интересно.
В общем, есть такой механизм как git worktree.
Обычно репозиторию соответствует одна рабочая копия (либо ни одной в случае bare-репозитория). То есть есть рабочая копия, в ней папка .git в которой уже все данные о репозитории. (Уточнение: Далее я под репозиторием буду иметь в виду как раз таки то что в этой папке, про ремоуты речь не идёт).
Гит умеет так же создавать дополнительные рабочие копии для существующего репозитория. Для этого всего лишь нужно вызвать одну команду и указать в каком каталоге нужно эту рабочую копию создать и на какую ветку ее переключить.
Зачем это может быть полезно?
В любых случаях, когда нам удобно иметь две или более рабочие копии одного репозитория на одном компьютере.
Например я часто параллельно работаю над несколькими задачами, при этом проект у меня собирается 20+ минут. Было бы неудобно ждать при каждом переключении с задачи на задачу по 20 минут.
Плюсов перед тем, чтобы держать несколько копий репозитория несколько:
1) не тратим дополнительное место на репозиторий. Если история проекта весит 300Мб, рабочая копия - 10Мб, то мы экономим по 300Мб при создании каждой рабочей копии. Для трёх рабочих копий это 300 + 10 * 3 МБ против 310 * 3 МБ.
2) Не надо обновлять каждый репозиторий с ремоута отдельно, если репозиторий всего один 🧔🏿👆🏿
3) Простота синхронизации правок между рабочими копиями. Например можно сделать stash save в одной рабочей копии и сразу же stash pop, чтобы забрать эти правки во второй. То же с черрипиками коммитов между временными ветками, которые иначе пришлось бы пушить или передавать патчами.
Есть ещё несколько особенностей worktree, но это уже детали.
Суть проблемы о которой я писал:
Репозиторий большой, файлов в LFS много и они здоровые, я хотел сэкономить время и не выкачивать их по сети. Я сначала сдуру подумал, что он все выкачивает по сети, но он берет файлы из локального репозитория. Все кроме файлов из LFS. Я нашел решение этой проблемы, указывании флага при создании worktree, писал о нем выше, сейчас не смогу процитировать. Но оказалось, что копирование локально занимает совсем немного меньше времени, так что я не сильно выигрываю все равно и лучше буду выкачивать как раньше.
За ссылки в любом случае спасибо.
Аа, всё, понял, что значит worktree. Слышал, что можно в другом месте держать рабочую копию, но не знал, что их может быть несколько. Прикольно! Спасибо за подробное пояснение
Обсуждают сегодня