Znalazłem świetne rozwiązanie do pobierania z bieżącej gałęzi ze wszystkich podkatalogów, które mają folder .git, nawet jeśli każde repozytorium ma wyewidencjonowaną inną gałąź. Polecenie jest jednolinijkowe, na tyle elastyczne, że można je modyfikować dla różnych poleceń git i można je aliasować.
Po prostu skopiuj i wklej następujące elementy:
find . -type d -maxdepth 2 -name .git -exec sh -c 'cd $0 && cd .. && git pull origin $(git rev-parse --abbrev-ref HEAD)' {} \;
Rozbijając to:
find . -type d -maxdepth 2 -name .git
Znajdź wszystkie katalogi (-type d) w bieżącym katalogu (find.), Które mają nazwę „.git” (-name .git), szukając maksymalnie dwóch katalogów w głąb (2 zamiast 1, ponieważ szukamy git w folderze repo git).
-exec sh -c
Uruchom następujące polecenie powłoki (exec sh -c)
'cd $0 && cd .. && git pull origin $(git rev-parse --abbrev-ref HEAD)'
Zmień katalog na pierwszy argument (cd $ 0), następnie zmień katalog o jeden poziom wyżej, aby opuścić folder .git (cd ..), a następnie wykonaj polecenie git pull origin podczas określania gałęzi, uruchamiając git rev-parse ... dla bieżącej gałęzi Zatwierdź HEAD.
{} \;
„{}” To ścieżka względna wyniku, którą otrzymujemy z początkowego znalezienia polecenia . The; służy do zakończenia polecenia.
Testowano na MacOS 10.14.6 na zsh. Tak jak jest, działa tylko wtedy, gdy zdalne i lokalne oddziały mają taką samą nazwę, AFAIK.
Możesz to zmienić, aby uzyskać status. Spodziewam się, że możesz dodać argumenty, aby uczynić to bardziej elastycznym, ale jeszcze nie próbowałem.
hg mercurial
.