Есть ли способ автоматически вызывать git submodule update
(или предпочтительно git submodule update --init
вызывать, когда git pull
это делается?)
Ищите настройки git config или псевдоним git, чтобы помочь с этим.
git
git-submodules
philfreo
источник
источник
Ответы:
Начиная с Git 2.14 , вы можете использовать
git pull --recurse-submodules
(и псевдоним это все, что вам нравится).Начиная с Git 2.15 , вы можете установить
submodule.recurse
значение true, чтобы включить желаемое поведение.Вы можете сделать это глобально, запустив:
источник
git pull
к получению субмодуля и запускуsubmodule update
. Это действительно должен быть принятый ответ сейчасgit config --global submodule.recurse true
git clone
также. И сделать это по умолчанию. Иначе всегда будет огромное сопротивление использованию подмодулей, так как модули людей всегда не синхронизированы :-(commit
,fetch
,pull
и т.д.) предназначены для применения только к текущему хранилище. подмодуль является другим хранилищем и на него не должны влиять команды, выполняемые в родительском хранилище по умолчанию. это своего рода дизайнерское решение git-разработчика.git config --global alias.pullall '!git pull && git submodule update --init --recursive'
Если вы хотите, чтобы аргументы передавались в git pull, используйте вместо этого:
источник
Начиная с Git 1.7.5, он должен автоматически обновлять подмодули по умолчанию, как вы этого хотите.
[EDIT: в комментариях: новый 1.7.5 поведение автоматически получать последние коммиты для подмодулей, но не для обновления их (в
git submodule update
смысле). Таким образом, информация в этом ответе актуальна как справочная информация, но сама по себе она не является полным ответом. Вам все еще нужен псевдоним для извлечения и обновления подмодулей в одной команде.]Поведение по умолчанию «по требованию» - обновлять субмодули всякий раз, когда вы выбираете коммит, который обновляет коммит субмодуля, а этот коммит еще не находится в вашем локальном клоне.
Вы также можете обновлять его при каждой загрузке или никогда (поведение до 1.7.5, я полагаю).
Параметр конфигурации, чтобы изменить это поведение
fetch.recurseSubmodules
.Видеть:
git config
Страница man (1.7.5) (или последняяgit config
страница man )git fetch
Страница man (1.7.5) (или последняя страница man git fetch )Чтобы получить больше информации.
источник
git fetch
неgit submodule update
.git pull
, а не сgit fetch
, эта опция только делает выборку рекурсивной. Это вообще не изменит то, что зафиксировано в подмодулях. Такgit submodule update
что все еще необходимо, как отмечает @Artem.Я удивлен, что никто не упомянул использование git hooks для этого!
Просто добавьте файлы с именами
post-checkout
иpost-merge
в свой.git/hooks
каталог соответствующих репозиториев, и поместите в каждый из них следующее:Поскольку вы специально запросили псевдоним, предполагая, что вы хотите иметь его для многих репозиториев, вы можете создать псевдоним, который добавляет их в репозиторий
.git/hooks
для вас.источник
core.hooksPath
для каталога hooks , подробности см. В документацииgit-config
.git pull --rebase
:(Псевдоним, предложенный Кевином Баллардом, является отличным решением. Просто, чтобы бросить другой вариант, вы также можете использовать хук после слияния, который просто запускается
git submodule update [--init]
.источник
Вы можете создать псевдоним для команды git, которая автоматически обрабатывает обновление субмодуля. Добавьте следующее в ваш .bashrc
источник
Как уже упоминали другие, вы можете легко установить это с помощью:
Однако, если вы похожи на меня и имеете более сложную
.gitconfig
настройку (мой основной~/.gitconfig
файл используетсяinclude
для загрузки в другие.gitconfig
файлы), и вы никогда не сможете вспомнить, как выполнить преобразование междуgit
форматом конфигурации командной строки и.gitconfig
форматом, вот как его добавить. к любому из ваших.gitconfig
файлов:источник
Единственный способ, которым я смог получить подмодули и вложенные подмодули для обновления:
Я изо всех сил пытался создать псевдоним через терминал из-за скобок, поэтому мне пришлось вручную добавить это в .gitconfig для глобального:
Любые предложения о том, как запускать команды или псевдоним автоматически?
источник