Простой способ получить последние из всех подмодулей git

Из документации :

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

blockquote>

1649
задан Paul Floyd 13 November 2018 в 11:12
поделиться

5 ответов

Если это первый раз, вы проверяете репо, вам нужно сначала использовать - init :

git submodule update --init --recursive

Для git 1.8. 2 или выше, опция - удаленный была добавлена ​​для поддержки обновления до последних советов удаленных ветвей:

git submodule update --recursive --remote

Это дает дополнительное преимущество соблюдения любых ветвей «не по умолчанию», указанных в .gitmodules или .git / config файлы (если они у вас есть, по умолчанию используется origin / master, и в этом случае некоторые другие ответы здесь также будут работать).

Для git 1.7.3 или выше вы можете использовать (но нижеприведенные ошибки относительно того, какое обновление все еще применимо):

git submodule update --recursive

или:

git pull --recurse-submodules

, если вы хотите вытащить свои подмодули в последние коммиты, кроме того, что репо указывает на.

Подробнее см. git-submodule (1)

2315
ответ дан 22 November 2019 в 20:09
поделиться

Думаю, для этого вам придется написать сценарий. Честно говоря, я мог бы установить python для этого, чтобы вы могли использовать os.walk до cd для каждого каталога и вводить соответствующие команды. Использование python или другого языка сценариев, кроме пакетного, позволит вам легко добавлять / удалять подпроекты без необходимости изменять сценарий.

1
ответ дан 22 November 2019 в 20:09
поделиться

Примечание: это из 2009 года, и, возможно, тогда это было хорошо, но сейчас есть варианты получше. .

Мы используем это. Он называется git-pup :

#!/bin/bash
# Exists to fully update the git repo that you are sitting in...

git pull && git submodule init && git submodule update && git submodule status

Просто поместите его в подходящий каталог bin (/ usr / local / bin). В Windows вам может потребоваться изменить синтаксис, чтобы заставить его работать:)

Обновление:

В ответ на комментарий оригинального автора о втягивании всех заголовков всех подмодулей - это это хороший вопрос.

Я почти уверен, что git не имеет внутренней команды для этого. Для этого вам нужно будет определить, что на самом деле означает HEAD для подмодуля. Это может быть так же просто, как сказать, что master является самой последней веткой и т. Д.

После этого, создайте простой сценарий, который выполняет следующие действия:

  1. проверяет git submodule status на наличие «измененных» репозиториев. Об этом свидетельствует первый символ строк вывода. Если суб-репо изменено, вы, возможно, НЕ захотите продолжать.
  2. для каждого указанного репо перейдите в его каталог и запустите git checkout master && git pull . Проверьте наличие ошибок.
  3. В конце я предлагаю вам распечатать дисплей для пользователя, чтобы указать текущий статус подмодулей - возможно, предложить им добавить все и зафиксировать?

Я хотел бы упомянуть, что это style - это не совсем то, для чего были разработаны подмодули git. Как правило, вы хотите сказать, что «LibraryX» имеет версию «2.32», и будет оставаться так, пока я не скажу «обновить».

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

Обновление 2:

Если вы работаете на платформе Windows, вы можете использовать Python для реализации сценария, поскольку он очень эффективен в этих областях. Если вы используете unix / linux, я предлагаю только сценарий bash.

Нужны пояснения? Просто оставьте комментарий.

302
ответ дан 22 November 2019 в 20:09
поделиться

Хенрик на правильном пути. Команда foreach может выполнять любой произвольный сценарий оболочки. Два варианта получения самых последних могут быть:

git submodule foreach git pull origin master

и

git submodule foreach /path/to/some/cool/script.sh

. Это будет проходить через все инициализированные подмодули и запускать заданные команды.

157
ответ дан 22 November 2019 в 20:09
поделиться

Look at http://lists.zerezo.com/git/msg674976.html which introduces a --track parameter

6
ответ дан 22 November 2019 в 20:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: