Mam zestaw repozytoriów posortowanych w katalogach na podstawie ich VCS (Git, Mercurial, SVN). Dzięki Subversion mogłem uruchomić svn update *
w katalogu nadrzędnym, który przechodziłby przez każdy katalog i aktualizował każde repozytorium zgodnie z oczekiwaniami. Tak nie jest w przypadku Git lub Mercurial.
Chciałbym wymyślić skrypt bash, który mogę uruchomić, aby dokładnie to zrobić, przeglądać katalogi i jedno git pull
lub drugie hg pull
. Po prostu nie mam dużego doświadczenia w tworzeniu skryptów bash.
Odpowiedzi:
źródło
Jeśli potrzebujesz rekurencji:
Spowoduje to zejście do wszystkich katalogów pod bieżącym i wykonanie ściągnięcia git na te podkatalogi, które mają katalog .git (możesz go ograniczyć
-maxdepth
).źródło
-execdir
jest tu znacznie lepiej:find . -type d -name .git -execdir sh -c "pwd && git pull" \;
Jeśli masz GNU Parallel http: // www.gnu.org/software/parallel/, możesz to zrobić:
Będzie to działało równolegle, więc jeśli niektóre połączenia sieciowe serwerów git są wolne, może to przyspieszyć.
Obejrzyj wideo wprowadzające do GNU Parallel, aby dowiedzieć się więcej: http://www.youtube.com/watch?v=OpaiGYxkSuQ
źródło
ls */
upewnij się, że dajesz spójny wkładcd
.To powinno działać
źródło
-maxdepth 1
flagę, jest to jedyne polecenie, które znalazłem podczas wielu wyszukiwań i prób, które wykonuje polecenie rekurencyjnie (we wszystkich podkatalogach, nie tylko w katalogach o jeden poziom niżej).Aby to zrobić rekurencyjnie bez użycia,
find
aleforloop
źródło