Git - хранить ветки в отдельных локальных каталогах
Я новичок в git, и я пытаюсь правильно настроить мой репозиторий.
В основном мое приложение является платформой, поэтому реализации этой платформы основаны на основной ветке, но имеют небольшие модификации для этих файлов, а также некоторые дополнительные файлы.
Я попытался настроить его как ветки, поэтому у меня есть ветвь master
, implementation_1
и implementation_2
.
Но, насколько я могу судить, это означает, что локально все ветки хранятся в одном каталоге, причем их разделение происходит только через git.
Я хотел бы иметь 3 локальных каталога, master
, imp_1
и imp_2
. Если я внес изменения в один из основных файлов в каталоге imp_1
, я хочу иметь возможность объединить это изменение в ветвь master
и оттуда в imp_2
.
Я начинаю думать, что это должны быть 3 разных репозитория (реализация - это вилки ядра). Это путь? В этом случае, как мне будет работать с описанным выше сценарием?
Ответы
Ответ 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). Обратите внимание, что любая ветка может быть проверена в одной рабочей группе за раз.