Подтвердить что ты не робот

Git - хранить ветки в отдельных локальных каталогах

Я новичок в git, и я пытаюсь правильно настроить мой репозиторий.

В основном мое приложение является платформой, поэтому реализации этой платформы основаны на основной ветке, но имеют небольшие модификации для этих файлов, а также некоторые дополнительные файлы.

Я попытался настроить его как ветки, поэтому у меня есть ветвь master, implementation_1 и implementation_2.

Но, насколько я могу судить, это означает, что локально все ветки хранятся в одном каталоге, причем их разделение происходит только через git.

Я хотел бы иметь 3 локальных каталога, master, imp_1 и imp_2. Если я внес изменения в один из основных файлов в каталоге imp_1, я хочу иметь возможность объединить это изменение в ветвь master и оттуда в imp_2.

Я начинаю думать, что это должны быть 3 разных репозитория (реализация - это вилки ядра). Это путь? В этом случае, как мне будет работать с описанным выше сценарием?

4b9b3361

Ответ 1

Филиалы являются первоклассными гражданами в Git. Они не "эмулируются" как ветки, как в старых VCS, таких как SVN, CVS и т.д.

Если вам действительно нужны три разных каталога, потому что вы хотите иметь три разных среды разработки, сделайте 3 клона:

  • один в каталоге под названием master
  • один в каталоге с именем imp_1
  • один в каталоге с именем imp_2

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


Или, начиная с Git 2.5 (июль 2015 года, через 4 года после вопроса об OP), как я подробно описал в " Несколько рабочих каталогов с Git"? , используйте git worktree.

Это будет один клон, несколько папок (по одной на ветку).
С Git 2. 7+ вы можете затем перечислить эти папки:

$ git worktree list
/path/to/bare-source            (bare)
/path/to/linked-worktree        abcd1234 [master]
/path/to/other-linked-worktree  1234abc  (detached HEAD)

Ответ 2

вы можете создать три клона вашего репозитория и объединить между ними. вилки в git ничем не отличаются от ветвей, как они слиты и таковы. вы можете легко сделать:

git merge ../master
git pull ../imp_2

при локальном клонировании git будет жестко привязывать ваши объекты и даже экономить дисковое пространство

Ответ 3

Вы можете сделать это, используя git worktree, который был представленный в Git 2.5, около июля 2015 года.

git clone -b master <repo> master
cd master

# checking out implementation_1 in ../imp_1
git worktree add ../imp_1 implementation_1

# creating branch implementation_2 at master~2 as you check it out in ../imp2:
git worktree add -b implementation_2 ../imp_2 master~2

И вуаля! Все готово.

С помощью этой настройки у вас будет только одна .git-папка (в master/.git). Обратите внимание, что любая ветка может быть проверена в одной рабочей группе за раз.