Как вы объединяете два репозитория git? - PullRequest
5 голосов
/ 12 февраля 2010

У меня есть основной репо (репо 1), с которым я работаю. У меня есть еще один репо (репо 2), который должен вписаться в первый, и я не уверен, каким образом я мог бы разместить их обоих в одной папке. Идея в том, что у меня есть стандартная кодовая база, которая мне нужна в каждом проекте, но каждый проект - это свое собственное git-репо.

/project
    /.git(repo 2)
    /.git(repo 1)
    /repo_2_sub
        /repo_2_sub_sub
            /repo_1_sub_sub
    /repo_1_sub
        /repo_1_sub_sub
        /repo_2_sub_sub

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

Как мне работать, чтобы эти два хранилища создали полную кодовую базу?

UPDATE

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

ОБНОВЛЕНИЕ 2

Подождите, может быть, это проще, чем я думал. Можете ли вы клонировать стандартное хранилище кодовой базы, а затем создать новую ветвь, являющуюся вашим проектом, а затем просто продолжать объединять эту ветку с репо кодовой базы при каждом ее изменении?

Ответы [ 3 ]

2 голосов
/ 12 февраля 2010

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

git --git-dir=.git1 --work-tree=. init
git --git-dir=.git2 --work-tree=. init

Теперь у вас есть два каталога git в одном каталоге. Не очень красиво. На этом этапе убедитесь, что у вас есть .git1 и .git2 в обоих .gitignores, так как они не игнорируются по умолчанию. Кроме того, каждая команда git, которую вы запускаете, также должна иметь аргумент --git-dir, чтобы указать, с каким хранилищем вы взаимодействуете. Вы можете настроить псевдонимы для этого.

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

Может потребоваться некоторое обслуживание, если два репозитория отличаются более тонкой гранулярностью, чем папки, но если вы укажете в каждом .gitignore файлы, которые принадлежат только ДРУГОМУ репо, это должно работать.

См .: Гитиньор

2 голосов
/ 12 февраля 2010

Использование git submodule

Обновление:

Стандартная база кода, которая должна быть частью всех репозиториев, должна представлять собой отдельный отдельный репозиторий git.

* +1007 *

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

git submodule init

и

git submodule update

соответственно инициализирует и обновляет удаленные репозитории субмодулей.

Для получения более подробной информации, смотрите документацию сообщества Git по подмодулям git и / или скотчам scot chacon на том же.

1 голос
/ 13 февраля 2010

Подождите, может быть, это проще, чем я думал. Можете ли вы клонировать стандарт репо Codebase, а затем создать новый ветвь это ваш проект, а затем просто продолжайте сливать эту ветку с репо codebase каждый раз, когда оно меняется?

Ты мог бы сделать это. У меня также есть проект, где я делаю это так. Большая часть кода одинакова для всех подпроектов. Я создаю новую ветвь для каждого проекта, чтобы файлы, принадлежащие только этому проекту, были разделены. Я регулярно объединяю ветку master с другими ветками.

Вы также можете создавать клоны основного хранилища. Затем вы просто объедините изменения из ветви origin/master в ветку master в каждом из ваших проектов.

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