Git отслеживание подмодулей последних

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

Проблема - это "последняя" глава. Мы хотели бы, чтобы суперпроект "последней" головы отслеживал главные ветки всех подмодулей (автоматически). И также было бы здорово, если бы он показал историю всех фиксаций подмодуля.

Я посмотрел на gitslave, но это не совсем то, что мы хотим. Любые предложения?

Ответы

Ответ 1

Обновление март 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 

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

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

Замечания:

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

Смотрите страницу git submodule:

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


Смотрите коммит 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 ...

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

Подписано: У. Тревор Кинг


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

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

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

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

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

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

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