Git работает на двух ветвях одновременно - PullRequest
142 голосов
/ 12 января 2010

У меня есть проект со многими ветками.

Я бы хотел работать с несколькими ветвями одновременно, не переключаясь с git checkout.

Есть ли способ сделать это, кроме копирования всего хранилища куда-нибудь еще?

Ответы [ 6 ]

127 голосов
/ 12 мая 2015

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).

39 голосов
/ 12 января 2010

Взгляните на $ GIT_SRC_DIR / contrib / workdir / git-new-workdir .

простой скрипт для создания рабочего каталога, который использует символические ссылки на указать на существующее хранилище. Это позволяет иметь разные ветви в разных рабочих каталогах, но все из одного и того же хранилище.

0 голосов
/ 05 октября 2015

Как сказал наш друг VonC пять месяцев назад, теперь, начиная с версии 2.5.x, появилась новая функция, которая выполняет эту работу. рабочее дерево git .

0 голосов
/ 24 октября 2014

Git поддерживает несколько рабочих деревьев одновременно. Для получения дополнительной информации см .:

Как бы то ни было, очень трудно поддерживать несколько рабочих деревьев с идентификаторами. Например, это запрос расширения в JGet (идентификатор затмения) для поддержки рабочего дерева.

Итак, вы должны управлять проектом вручную (из командной строки) с множеством проблем или работать с одним рабочим деревом в IDE.

0 голосов
/ 04 февраля 2013

Я предлагаю свой маленький сценарий http://www.redhotchilipython.com/en_posts/2013-02-01-clone-per-feature.html

Он будет выполнять git clone и заменять конфиг (чтобы «посмотреть» на исходное репо, поэтому pull / push перейдет в «основное» репо), но это достаточно просто, чтобы служить абстракцией от фактической начальной загрузки.

0 голосов
/ 12 января 2010

Не совсем так, как Git поддерживает только одну рабочую копию данных репозитория в каталоге репозитория.

Если вы хотите зафиксировать / вытащить в один и тот же репозиторий с двумя разными рабочими копиями, вы можете создать голый репозиторий и клонировать его в две рабочих копий .

Всякий раз, когда вы что-то закончили, вы просто нажимаете на "основной" пустой репозиторий.

Некоторые подсказки:

man git-clone

git clone --bare

...