Git стратегия управления субмодулями - PullRequest
4 голосов
/ 27 апреля 2011

Мы используем GIT для управления нашим проектом.

У каждого проекта есть «ядро» (например, фреймворк, из которого мы построили проект). Таким образом, у каждого проекта есть как минимум 2 удаленных ветви:

  • 1 репозиторий для этой базовой инфраструктуры.
  • 1 репозиторий на проект клиента.

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

  • Итак, у нас есть подмодули, которые включены в каждый клиентский проект
  • Но я не могу понять, как обращаться с персонализированной частью подмодулей.

Как GIT может помочь мне, если я хочу добавить несколько новых файлов в подмодуль, который должен использоваться только в 1 конкретном клиентском проекте?

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

Ps .: Мы используем SmartGit.

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

Это сценарий, в котором вы можете использовать git-subtree (слияние)

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

http://www.kernel.org/pub/software/scm/git/docs/howto/using-merge-subtree.html

Идея слияния поддеревьев состоит в том, что у вас есть два проекта, и один из проектов отображается в подкаталог другого, и наоборот.Когда вы указываете объединение поддеревьев, Git достаточно умен, чтобы понять, что одно является поддеревом другого, и объединить соответствующим образом - это довольно удивительно.

http://progit.org/book/ch6-7.html

Но яПредположим, вы хотите использовать подмодули, а не уходить от них.

0 голосов
/ 27 апреля 2011

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

Хотя это верно, подмодуль является "независимым", поскольку он имеет свой собственный набор коммитов и ветвей в качестве отдельного репозитория.Вы все еще можете определить ветку клиент-проект в указанном подмодуле.

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

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

...