Git: объединить несколько репозиториев
Мы создали хранилище для базовой установки, которое мы можем использовать для новых проектов. Эта базовая установка находится в стадии разработки, поэтому разработка продолжается. Когда появится новый проект, мы бы хотели пройти базовую настройку и использовать его. Новые проекты являются модулями внутри базовой установки.
Поскольку базовая настройка находится в стадии разработки, мы хотели бы отправить обновления в другие репозитории. Как мы можем сделать это с Git?
Я читал что-то на Gitslave. Это хорошо? http://gitslave.sourceforge.net/
2 ответа
Gitslave используется, когда вы хотите выполнить одну и ту же команду на нескольких репозиториях. Единственная применимость в этом случае будет заключаться в том, что вы создали суперпроект (возможно, из базового репо, возможно, другого репо) и имели все репозитории проекта как дочерние. Затем вы можете в одной команде добавить пульт во все подчиненные репо, указывающие на базовое репо, проверить базовую ветку во всех подчиненных репо, затем внести изменения в каждое подчиненное репо и, наконец, объединить / перебазировать базовое репо. -ветвление на ветку проекта (мастер или что-то еще). После того, как вы разрешите любые конфликты, вы можете вытолкнуть каждый репо проекта.
Это обратная сторона для внесения изменений в другие репозитории, но, вероятно, гораздо более полезная, так как тогда вы также можете автоматизировать процесс слияния.
Обратите внимание, что другой подход, который более соответствует вашему первоначальному желанию, заключался бы в добавлении цели "all" для push, которая подталкивала бы базовую ветвь к нескольким репо в одной команде. http://jeetworks.org/node/22
Тем не менее, обратите внимание, что вы должны иметь концепцию "базового ветвления" при любых обстоятельствах, чтобы иметь стратегию разумного ветвления. В частности, ветвь проекта должна быть разветвленной от basic-branch, чтобы обновления в basic-branch могли быть объединены или перебазированы в.
Еще один вариант - иметь один репозиторий, чтобы управлять ими всеми, и создавать одну ветку для каждого проекта. Затем вам нужно будет написать некоторую автоматизацию, чтобы объединить ваши изменения в basic-branch со всеми другими соответствующими ветвями. В зависимости от ваших потребностей, безопасности, или от того, насколько далекие проекты отличаются друг от друга, или от того, как много зависит от проекта, это может иметь или не иметь смысла.
Я не думаю, что подмодули или рабы уместны здесь:
Вам не нужен подкаталог с содержимым другого репо, вы хотите объединить (обновленный) контент репо с базовой структурой проекта.
Было бы проще, если бы каждый репозиторий проекта добавил, чтоbasic
репо как удаленный (git remote add basic /path/to/basic/repo
), и потяните это basic
сделайте репо в локальной ветке (названной, например, "basic-br"), а затем объедините указанную ветку с текущей веткой.
Таким образом, они могут регулярно получать или извлекать basic
репо и объединить при необходимости basic-br
ветка.