git submodule для отслеживания последних

Мы перемещаем наш (огромный) проект в 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 справочная страница:

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


Смотрите https://github.com/git/git/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 ...

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

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


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

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

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

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

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

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

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

Другие вопросы по тегам