git працює на двох гілках одночасно


168

У мене є проект з багатьма філіями.

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

Чи я можу це зробити, окрім копіювання всього сховища десь в іншому місці?



1
Git 2.5+ (Q2 2015) офіційно підтримає це новою командою git checkout --to=<path>. Дивіться мою відповідь нижче .
VonC

2
Власне, команда буде git worktree add <path> [<branch>](Git 2.5 rc2)
VonC

Відповіді:


156

Git 2.5+ (Q2 2015) підтримує цю функцію!

Якщо у вас є git repo cool-app, cd до root ( cd cool-app), запустіть git worktree add ../cool-app-feature-A feature/A. Це перевірка з галузі feature/Aв його власному новому спеціальному каталозі cool-app-feature-A.

Це замінює старіший сценарій contrib/workdir/git-new-workdir, з більш надійним механізмом, коли ті "пов'язані" робочі дерева фактично записуються в основну $GIT_DIR/worktreesпапку repo new (так що це працює в будь-якій ОС, включаючи Windows).

Знову ж таки, після того, як ви клонували репо (у папці як /path/to/myrepo), ви можете додавати робочі дерева для різних гілок у різні незалежні шляхи ( /path/to/br1, /path/to/br2), при цьому ті робочі дерева пов'язані з основною історією репо (більше не потрібно використовувати --git-dirпараметр)

Дивіться більше в " Кілька робочих каталогів з Git? ".

І коли ви створили робоче дерево, ви можете його перемістити або видалити (з Git 2.17+, Q2 2018).


2
Це має бути нова прийнята відповідь, оскільки 2.5.X тепер є рекомендованою версією, навіть для Windows i.imgur.com/oQvUhVl.png git-scm.com/download/win
RAnders00

40

Погляньте на $ GIT_SRC_DIR / contrib / workdir / git-new-workdir .

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



2
Я знаю, що це по-старому, але ви можете надати пояснення, будь ласка.
dav_i

@dav_i: Як це ?
Стефан Наве

@ StefanNäwe Ах, я був розгублений - занадто рано вранці ... оновив свою відповідь за посиланням.
dav_i

0

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

Це зробить клон git та замінить конфігурацію (щоб "дивитись" на оригінальний репо, тому потяг / натискання перейде в "головне" репо) в основному, але це досить просто, щоб подати абстракцію від фактичного завантаження.


0

Як сказав наш друг VonC п’ять місяців тому, тепер з'явилася нова функція, оскільки версія 2.5.x робить цю роботу. git worktree .


Хіба це не те саме, що я згадував 5 місяців тому у своїй відповіді вище ?
VonC

Оп. Тепер мені страшно. Я не звернув належної уваги до цього. Моє ліжко.

0

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

Як завжди, дуже важко підтримувати кілька робочих дерев з ідентифікаторами. Наприклад, це запит на покращення в JGet (ідентифікатор затемнення) для підтримки робочого дерева.

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


На сьогодні ця відповідь є невірною. Будь ласка, оновіть відповідь.
нарендра-чодхарі

-2

Насправді, оскільки Git підтримує лише одну робочу копію даних репозиторію в каталозі репозиторію.

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

Щоразу, коли ви щось закінчили, ви просто натискаєте на "головне" оголене сховище.

Деякі підказки:

man git-clone

git clone --bare


3
"Git підтримує лише одну робочу копію даних сховища" -1 Неправда, див. Відповідь про git-new-workdir.
sleske

Це гарна ідея. Просто клонуйте це двічі.
Серж Виноградов
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.