Всем добрый день.

На одном из проектов мы используем субмодули. Все бы замечательно, но перед каждым push приходится вспоминать что я там понаделал в подпроектах. Чтобы облегчить себе жизнь я придумал такой небольшой алиас.

git config --global alias.swalk "submodule foreach '\$SHELL -c \"(git status | grep nothing\ to\ commit,\ working\ directory\ clean) || \$SHELL\"'"


Как это работает под катом.


Суть его в следующем. Допустим у нас есть проект со следующей структурой
 - superproject
 |  -  submodule1 // - не делал изменений
 |  -  submodule2 // - есть изменения
 |  -  somefolder
    |  -  submodule3 // - есть изменения



Выполнив в консоли git swalk у меня начнут запускаться экземпляры shell в моих субмодулях и если там нет никаких изменений тут же выходить. Таким образом я быстро обойду все субмодули в которых я сделал изменения, сделаю коммиты и push. Чтобы оборвать этот процесс достаточно выйти с кодом отличным от 0

В моем примере будет выглядеть так
$> git swalk
entering 'submodule1'
nothing to commit, working directory clean
entering 'submodule2'
$> git add .
$> git commit -m "commit message"
$> git push
$> exit
entering 'submodule3'
$>....


Проверял на маке в zsh. Пробовал проверить у коллеги на windows в git bash, у него не было проектов с субмодулями, но и ошибками во всяком случае не сыпало.