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.

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