Git работает на двух ветках одновременно
У меня есть проект со многими филиалами.
Я хотел бы работать над несколькими ветками одновременно, не переключаясь с git checkout
,
Есть ли способ сделать это, кроме копирования всего хранилища куда-нибудь еще?
7 ответов
Git 2.5+ (Q2 2015) будет поддерживать эту функцию: как только вы клонировали git-репо, вы сможете оформить несколько веток по разному пути с помощью новой команды git worktree add <path> [<branch>]
,
Это заменяет старый скрипт contrib/workdir/git-new-workdir
с более надежным механизмом, в котором эти "связанные" рабочие деревья фактически записываются в основной репо. $GIT_DIR/worktrees
папка (так, чтобы работать на любой ОС, в том числе Windows).
Опять же, как только вы клонировали репо (в папке, как /path/to/myrepo
), вы можете добавить рабочие деревья для разных веток по разным независимым путям (/path/to/br1
, /path/to/br2
), хотя эти рабочие деревья связаны с основной историей репо (не нужно использовать --git-dir
вариант больше)
Смотрите больше в " Несколько рабочих каталогов с Git?".
И после того, как вы создали рабочее дерево, вы можете переместить или удалить его (с помощью Git 2.17+, Q2 2018).
Посмотрите на $ GIT_SRC_DIR / contrib / workdir / git-new-workdir.
простой скрипт для создания рабочего каталога, который использует символические ссылки для указания на существующее хранилище. Это позволяет иметь разные ветви в разных рабочих каталогах, но все из одного и того же репозитория.
Git поддерживает несколько рабочих деревьев одновременно. Для получения дополнительной информации см.:
Однако очень трудно поддерживать несколько рабочих деревьев с идентификаторами. Например, это запрос расширения в JGet (идентификатор затмения) для поддержки рабочего дерева.
Таким образом, вы должны управлять проектом вручную (из командной строки) с множеством проблем или работать с одним рабочим деревом в IDE.
Вот масштабируемая версия принятого ответа (поддерживаемого) с последовательно названными ветвями (app1..app10
).
Обратите внимание, что мы должны стараться избегать дублирования проверки (здесь: путем проверкиmaster
ветвь, которая не будет охваченаgit worktree add
):
$ git checkout master && for NUM in {1..10}; do git worktree add ~/git/<repo-name>/app$NUM app$NUM; done
Я предлагаю свой небольшой сценарий http://www.redhotchilipython.com/en_posts/2013-02-01-clone-per-feature.html
Он будет выполнять git clone и заменять конфигурацию (чтобы "посмотреть" на исходное репо, так что pull / push перейдет в "основное" репо), но это достаточно просто, чтобы служить абстракцией от реальной начальной загрузки.
В действительности, Git поддерживает только одну рабочую копию данных репозитория в каталоге репозитория.
Если вы хотите зафиксировать / извлечь один и тот же репозиторий с двумя разными рабочими копиями, вы можете создать пустой репозиторий и клонировать его в две рабочие копии.
Всякий раз, когда вы что-то закончили, вы просто нажимаете на "основной" голый репозиторий.
Некоторые намеки:
man git-clone
git clone --bare
Как сказал наш друг VonC пять месяцев назад, теперь, начиная с версии 2.5.x, появилась новая функция, которая делает эту работу. Git Worktree.