Долгосрочное использование веток с "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

Итак, мои вопросы двояки:

  1. Можно / правильно ли применять несколько рабочих деревьев для долгосрочных веток или это просто что-то, что временно имеет смысл?
  2. Как мне тогда правильно удалить мои ненужные рабочие деревья?
  3. Должны ли я иметь эти рабочие деревья внутри или за пределами моего основного репозитория 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 в основном или любом связанном рабочем дереве для очистки любых устаревших административных файлов.

Другие вопросы по тегам