Ich habe eine großartige Lösung gefunden, um aus allen Unterverzeichnissen mit einem .git-Ordner aus dem aktuellen Zweig zu ziehen, selbst wenn für jedes Repo ein anderer Zweig ausgecheckt ist. Der Befehl ist einzeilig, flexibel genug, um für verschiedene Git-Befehle geändert zu werden, und kann als Alias verwendet werden.
Kopieren Sie einfach Folgendes und fügen Sie es ein:
find . -type d -maxdepth 2 -name .git -exec sh -c 'cd $0 && cd .. && git pull origin $(git rev-parse --abbrev-ref HEAD)' {} \;
Brechen sie ab:
find . -type d -maxdepth 2 -name .git
Suchen Sie alle Verzeichnisse (-typ d) im aktuellen Verzeichnis (find.) Mit dem Namen ".git" (-name .git) und suchen Sie maximal zwei Verzeichnisse tief (2 statt 1, da wir nach dem suchen Git-Ordner im Git-Repo-Ordner).
-exec sh -c
Führen Sie den folgenden Shell-Befehl aus (exec sh -c)
'cd $0 && cd .. && git pull origin $(git rev-parse --abbrev-ref HEAD)'
Wechseln Sie in das erste Argument (cd $ 0), wechseln Sie das Verzeichnis um eine Ebene nach oben, um den .git-Ordner (cd ..) zu verlassen, und führen Sie dann den Git-Pull-Ursprung aus, während Sie den Zweig angeben, indem Sie git rev-parse ... für den aktuellen Zweig ausführen HEAD Commit.
{} \;
Das "{}" ist der relative Pfad des Ergebnisses, den wir vom anfänglichen Suchbefehl erhalten . Das ; wird verwendet, um den Befehl zu beenden.
Getestet unter MacOS 10.14.6 unter zsh. Funktioniert nur, wenn entfernte und lokale Zweigstellen den gleichen Namen haben, AFAIK.
Sie können dies ändern, um den Status abzurufen. Ich gehe davon aus, dass Sie möglicherweise Argumente hinzufügen können, um dies flexibler zu gestalten, aber ich habe es noch nicht versucht.
hg mercurial
.