Долгосрочное использование веток с "git worktree"
Я смотрел в Git "новый" worktree
Эта функция, как мне кажется, очень хорошо вписывается в проблему, с которой я обычно сталкиваюсь: необходимость работать в нескольких ветвях одновременно (некоторые из них недолговечны, а другие действительно долгоживущи).
Обычно мне придется работать пару часов на release_a branch
а затем исправить что-то на release_x branch
а потом немного release_h branch
, Поскольку я ленивый, то, что я в конечном итоге делаю, это имеет несколько копий моего git-репозитория, настроенного с Intellij, так что мне не нужно постоянно переключать ветки тут и там.
Когда я услышал о мерзавце worktree
Я подумал, что это именно то, что я искал - способ иметь один репо с несколькими рабочими каталогами. И, как большой плюс, это означало бы, что мне больше не нужно было выдвигать что-либо каждый раз, когда я что-то менял в ветке просто ради того, чтобы другой потянул это (например, для исправления). Я мог бы просто локально объединить их.
Мое понимание того, что мерзавец worktree
правильный?
Я играл с этим, но я не могу понять, как это работает для моих целей. Кажется, что по умолчанию он создает рабочие деревья в своей корневой папке, но если я сделаю git add .
те же самые папки будут включены в коммит.
Вот так я создаю рабочее дерево для уже существующей ветки my_branch
(предположим, что я в настоящее время @ master
):
git worktree add my_branch my_branch
Итак, мои вопросы двояки:
- Можно / правильно ли применять несколько рабочих деревьев для долгосрочных веток или это просто что-то, что временно имеет смысл?
- Как мне тогда правильно удалить мои ненужные рабочие деревья?
- Должны ли я иметь эти рабочие деревья внутри или за пределами моего основного репозитория git?
Спасибо
1 ответ
И, как большой плюс, это означало бы, что мне больше не нужно было выдвигать что-либо каждый раз, когда я что-то менял в ветке просто ради того, чтобы другой потянул это (например, для исправления). Я мог бы просто локально объединить их.
Вы уже можете объединять филиалы локально: вам просто нужно сначала оформить ветку назначения.
Если у вас есть несколько локальных извлеченных папок одного и того же репо, да, вам нужно будет нажимать / тянуть между ними.
С git worktree
вместо извлечения конечной ветви (для слияния) или вместо отправки в другую извлеченную папку того же репо, вам необходимо cd /path/to/destination/branch
(где это уже проверено).
Идея состоит в том, чтобы:
/path/to/your/repo
(с одной веткой, как проверено мастером)/path/to/your/Branch1
(за пределами репо, но связаны с репо черезgit worktree
механизм текстовых ссылок)/path/to/your/Branch2
,...и так далее.
Тогда документ ясно:
Когда вы закончите со связанным рабочим деревом, вы можете просто удалить его.
Административные файлы рабочего дерева в хранилище ( см. "ПОДРОБНОСТИ" ниже) в конечном итоге будут удалены автоматически (см.
gc.worktreePruneExpire
вgit-config
).
Или вы можете запуститьgit worktree prune
в основном или любом связанном рабочем дереве для очистки любых устаревших административных файлов.