git submodule для отслеживания последних - PullRequest
125 голосов
/ 08 февраля 2012

Мы перемещаем наш (огромный) проект в git и думаем об использовании подмодулей.Наш план состоит в том, чтобы в суперпроекте было три разных главы: релиз, стабильный, последний.Лидеры проекта будут заниматься выпуском и стабильными ветвями.Они будут перемещать субмодули по мере необходимости.

Проблема в «последней» голове.Мы бы хотели, чтобы «последняя» голова суперпроекта отслеживала основные ветви всех подмодулей (автоматически).А также было бы здорово, если бы он показывал историю всех коммитов в подмодуле.

Я посмотрел на Гитслав, но это не совсем то, что мы хотим.Есть предложения?

1 Ответ

208 голосов
/ 08 февраля 2012

Обновление март 2013

Git 1.8.2 добавлена ​​возможность отслеживать ветки.

"git submodule" начал изучать новый режим для интеграции с кончиком удаленной ветви (в отличие от интеграции с фиксацией, записанной в gitlink суперпроекта).

# add submodule to track master branch
git submodule add -b master [URL to Git repo];

# update your submodule
git submodule update --remote 

Если у вас был субмодуль , уже присутствующий , который вы сейчас хотите отслеживать ветку, см. ", как сделать существующий субмодуль отслеживающим ветку ".

Также см. Учебник Фогеллы по подмодулям для получения общей информации о подмодулях.

Примечание:

git submodule add -b . [URL to Git repo];
                    ^^^

См. git submodule man page :

Специальное значение . используется для указания того, что имя ветви в подмодуле должно совпадать с именемтекущая ветка в текущем репозитории .


См. commit b928922727d6691a3bdc28160f93f25712c565f6 :

submodule add: если задано --branch, записьэто в .gitmodules

Это позволяет вам легко записать опцию submodule.<name>.branch в .gitmodules при добавлении нового субмодуля.С этим патчем

$ git submodule add -b <branch> <repository> [<path>]
$ git config -f .gitmodules submodule.<path>.branch <branch>

уменьшается до

$ git submodule add -b <branch> <repository> [<path>]

Это означает, что будущие звонки на

$ git submodule update --remote ...

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

Подписано: W. Trevor King


Оригинальный ответ (февраль 2012 г.):

Подмодуль - это отдельный коммит, на который ссылается родительское репо.
Поскольку это сам репозиторий Git, «история всех»коммиты "доступны через git log внутри этого подмодуля.

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

  • cd в подмодуле
  • git fetch / pull, чтобы убедиться, что он имеет последние коммиты в правой ветке
  • cd назад в родительском репо
  • добавить и зафиксировать в порядкезаписать новый коммит субмодуля.

gitslave (который вы уже просматривалиt) кажется наиболее подходящим, , включая операцию фиксации .

Вносить изменения в подмодуль немного раздражает из-за необходимости проверки наисправьте ветвь подмодуля, внесите изменения, зафиксируйте, а затем перейдите в суперпроект и зафиксируйте коммит (или, по крайней мере, запишите новое местоположение подмодуля).

Другие альтернативы подробно описаны здесь.

...