Я нашел отличное решение для извлечения из текущей ветки из всех подкаталогов, в которых есть папка .git, даже если в каждом репо есть другая ветка. Эта команда однострочная, достаточно гибкая, чтобы изменять ее для различных команд git, и может иметь псевдоним.
Просто скопируйте и вставьте следующее:
find . -type d -maxdepth 2 -name .git -exec sh -c 'cd $0 && cd .. && git pull origin $(git rev-parse --abbrev-ref HEAD)' {} \;
Разбивая это:
find . -type d -maxdepth 2 -name .git
Найдите все каталоги (-type d) в текущем каталоге (find.), Которые имеют имя ".git" (-name .git), просматривая максимум два каталога в глубину (2, а не 1, потому что мы ищем git в папке репозитория git).
-exec sh -c
Выполните следующую команду оболочки (exec sh -c)
'cd $0 && cd .. && git pull origin $(git rev-parse --abbrev-ref HEAD)'
Измените каталог на первый аргумент (cd $ 0), затем смените каталог на один уровень выше, чтобы оставить папку .git (cd ..), затем выполните git pull origin, указав ветку, запустив git rev-parse ... для текущей ветки HEAD фиксация.
{} \;
"{}" - это относительный путь результата, который мы получаем от начальной команды поиска . The; используется для завершения команды.
Проверено на MacOS 10.14.6 на zsh. Как есть, работает только тогда, когда удаленная и локальная ветки названы одинаково, AFAIK.
Вы можете изменить это, чтобы получить статус. Я надеюсь, что вы сможете добавить аргументы, чтобы сделать это более гибким, но я еще не пробовал.
hg mercurial
.