Git - хранить филиалы в отдельных локальных каталогах - PullRequest
28 голосов
/ 24 февраля 2011

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

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

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

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

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

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

Ответы [ 3 ]

24 голосов
/ 24 февраля 2011

Ветка - это первоклассный гражданин в Git, что означает, что они не "эмулируются" как ветки, как в старых VCS (SVN, CVS, ...)

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

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

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


Или, начиная с Git 2.5 (июль 2015 г., через 4 года после вопроса ОП), как я подробно описал в Несколько рабочих каталогов с 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)
6 голосов
/ 24 февраля 2011

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

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

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

4 голосов
/ 25 апреля 2017

Вы можете сделать это, используя рабочее дерево git , которое было введено в 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). Обратите внимание, что любая ветка может быть извлечена в одном рабочем дереве за раз.

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