Я пытаюсь написать скрипт, который проверяет 'master' во всех подмодулях.
Обычно после клона все подмодули находятся в отключенном состоянии. Однако я хочу, чтобы они были на ветке. Так что мой скрипт посещает каждый подмодуль и при определенных условиях проверяет ветку.
Грубо говоря, это сводится к тому, что
git submodule foreach --recursive 'git checkout master'
После такой проверки я также пытаюсь перемотать их вперед , HEAD подмодуля (master) может больше не совпадать с записанным sha1 в родительском проекте. В этом случае сценарий также делает
git add path/to/submodule
git commit -m 'Automatic update of submodule'
в родительском элементе (сразу после 'git мастер проверки; git merge --ff-only' в подмодуле).
То есть ... это также зафиксировало бы все, что уже было добавлено в индекс, и я не хочу этого: я ТОЛЬКО хочу зафиксировать это "добавление" пути / к / подмодулю.
Я попытался решить эту проблему, обернув вышеуказанное в git sta sh push / pop:
git stash save Automatic stash of parent project by update_submodules.sh
git add "$path"
git commit -m "Updating submodule reference to current HEAD of branch $submodule_branch of $name"
git stash pop
Однако git stash
снова переводит все подмодули в отключенное состояние! И git stash pop
НЕ восстанавливает это: /
Как мне добиться того, что я хочу?
РЕДАКТИРОВАТЬ
Ответ Торека был использован в финале update_submodules.sh
скрипт в строке 47 . Он должен называться вот так .