Ich habe eine Reihe von Repositorys, die auf der Grundlage ihres VCS (Git, Mercurial, SVN) in Verzeichnisse sortiert sind. Mit Subversion konnte ich svn update *
das übergeordnete Verzeichnis ausführen und es durchlief jedes Verzeichnis und aktualisierte jedes Repository wie erwartet. Das ist bei Git oder Mercurial nicht der Fall.
Ich möchte ein Bash-Skript entwickeln, das ich ausführen kann, um genau das zu tun, Verzeichnisse zu durchlaufen und entweder git pull
oder hg pull
in jedem. Ich habe nur nicht viel Erfahrung mit Bash-Skripten.
Antworten:
quelle
Wenn Sie es brauchen, um rekursiv zu sein:
Dies wird in alle Verzeichnisse unter dem aktuellen Verzeichnis absteigen und einen Git-Pull für die Unterverzeichnisse ausführen, die ein Git-Verzeichnis haben (Sie können es mit einschränken
-maxdepth
).quelle
-execdir
ist hier viel besser:find . -type d -name .git -execdir sh -c "pwd && git pull" \;
Wenn Sie GNU Parallel http: // www.gnu.org/software/parallel/ installiert haben, können Sie dies tun:
Dies wird parallel ausgeführt. Wenn einige der Netzwerkverbindungen der Git-Server langsam sind, kann dies die Dinge beschleunigen.
Sehen Sie sich das Einführungsvideo zu GNU Parallel an, um mehr zu erfahren: http://www.youtube.com/watch?v=OpaiGYxkSuQ
quelle
ls */
Sie dies , um sicherzugehen, dass Sie einen schlüssigen Beitrag leistencd
.Das sollte funktionieren
quelle
-maxdepth 1
Flags ist der einzige Befehl, den ich bei vielen Suchen und Versuchen gefunden habe, bei denen ein Befehl rekursiv ausgeführt wird (in allen Unterverzeichnissen, nicht nur in den Verzeichnissen eine Ebene tiefer).Um es rekursiv zu machen, ohne
find
aber zu verwendenforloop
quelle