Git: объединить несколько репозиториев - PullRequest
2 голосов
/ 15 марта 2012

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

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

Я читал что-то на Гитславе. Это хорошо? http://gitslave.sourceforge.net/

Ответы [ 2 ]

2 голосов
/ 15 марта 2012

Gitslave используется, когда вы хотите выполнить одну и ту же команду на нескольких репо.Единственная применимость в этом случае будет заключаться в том, что вы создали суперпроект (возможно, из базового репо, возможно, другого репо) и имели все репозитории проекта как дочерние.Затем вы можете в одной команде добавить пульт дистанционного управления во все подчиненные репо, указывающие на базовое репо, проверить базовую ветку во всех подчиненных репо, затем внести изменения в каждое подчиненное репо и, наконец, объединить / перебазировать базовое репо.-ветвление на ветку проекта (мастер или что-то еще).Как только вы разрешите любые конфликты, вы можете , а затем выдвинуть каждый репо проекта.

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

Обратите внимание, что другой подход, который более соответствует вашему первоначальному желанию, заключался бы в добавлении цели "all" для push, которая подталкивала бы базовую ветвь к нескольким репо в одной команде.http://jeetworks.org/node/22

Тем не менее, обратите внимание, что вы должны иметь концепцию "базового ветвления" при любых обстоятельствах, чтобы иметь стратегию разумного ветвления.В частности, ветвь проекта должна быть разветвленной от basic-branch, чтобы обновления в basic-branch могли быть объединены или перебазированы в.

Еще один вариант - иметь один репозиторий, чтобы управлять ими всеми, и создать одну ветвьза проект.Затем вам потребуется написать некоторую автоматизацию, чтобы объединить ваши изменения в basic-branch со всеми другими соответствующими ветвями.В зависимости от ваших потребностей, безопасности, или от того, насколько далекие проекты отличаются друг от друга, или от того, насколько велика конкретная реализация проекта, это может иметь или не иметь смысла.

1 голос
/ 15 марта 2012

Я не думаю, что подмодули или рабы здесь уместны:
Вам не нужен подкаталог с содержимым другого репо, вы хотите объединить (обновленный) контент репо с базовой структурой проекта.

Было бы проще, если бы каждый репозиторий проекта добавлял репо 'basic' в качестве удаленного (git remote add basic /path/to/basic/repo) и извлекал репо basic в локальную ветку (названную, например, basic-br) а затем объединить указанную ветку с текущей веткой.

Таким образом, они могут регулярно получать или извлекать репо basic, а при необходимости объединять ветку basic-br.

...