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 (на который вы уже смотрели) кажется наиболее подходящим, в том числе для операции фиксации.
Немного раздражает вносить изменения в подмодуль из-за необходимости проверить правильную ветвь подмодуля, внести изменения, зафиксировать, а затем перейти в суперпроект и зафиксировать коммит (или, по крайней мере, записать новое местоположение модуля). подмодуль).
Другие альтернативы подробно описаны здесь.