746 Stimmen

Prüfen, ob ein Pull in Git erforderlich ist

Wie prüfe ich, ob sich das entfernte Repository geändert hat und ich einen Pull durchführen muss?

Jetzt verwende ich dieses einfache Skript:

git pull --dry-run | grep -q -v 'Already up-to-date.' && changed=1

Aber es ist ziemlich schwer.

Gibt es einen besseren Weg? Die ideale Lösung würde alle entfernten Zweige überprüfen und die Namen der geänderten Zweige sowie die Anzahl der neuen Übertragungen in jedem Zweig zurückgeben.

16 Stimmen

Bitte beachten Sie: "git pull --dry-run" funktioniert nicht so, wie vermutlich erwartet. Es scheint, dass git pull unbekannte Optionen direkt an git fetch weitergibt. Das Ergebnis ist das eines normalen git pull.

34 Stimmen

"pull" ist nur ein kurzer Weg, um "fetch" und "merge" auf einmal zu machen, wenn Sie den Status der entfernten Repo überprüfen müssen, simulieren Sie wirklich ein "fetch". Also git fetch -v --dry-run ist das, was Sie brauchen.

0 Stimmen

Ich habe die von OP vorgeschlagene Lösung ausprobiert, und es hat nichts gebracht. Wahrscheinlich nicht der beste Ansatz?

23voto

Harikrishna Punkte 330

Das folgende Skript funktioniert perfekt.

changed=0
git remote update && git status -uno | grep -q 'Your branch is behind' && changed=1
if [ $changed = 1 ]; then
    git pull
    echo "Updated successfully";
else
    echo "Up-to-date"
fi

0 Stimmen

Funktioniert unter Ubuntu mit .sh-Skripten und arbeitet mit geänderten Dateien (prüft, ob ein Pull möglich/benötigt ist, statt eines unsauberen Zustands)

22voto

Bruno Adelé Punkte 1030

Ich schlage vor, Sie sehen sich das Drehbuch an https://github.com/badele/gitcheck . Ich habe dieses Skript kodiert, um in einem Durchgang alle Git-Repositories zu überprüfen, und es zeigt, wer nicht verpflichtet hat und wer nicht gepusht/gezogen hat.

Hier ein Beispielergebnis:

Enter image description here

6 Stimmen

Ordentlich, ich denke darüber nach, es in reiner Shell umzuschreiben

1 Stimmen

Jetzt können Sie gitcheck auch direkt von einem Docker-Container aus verwenden (mit Ihren Dateien in Ihrem Host). Weitere Informationen finden Sie im gitcheck-Github-Projekt

0 Stimmen

Ein ähnliches Werkzeug in Bash git-multi-repo-tooling . git mrepo -c werden alle anstehenden Übertragungen angezeigt.

15voto

diegeelvis_SA Punkte 424

Ich möchte dies nur als eigenen Beitrag veröffentlichen, da man es in den Kommentaren leicht übersehen kann.

Die richtige und beste Antwort auf diese Frage wurde von @Jake Berger gegeben. Vielen Dank, jeder braucht das und jeder vermisst das in den Kommentaren. Also für alle, die damit kämpfen, hier ist die richtige Antwort, verwenden Sie einfach die Ausgabe dieses Befehls, um zu wissen, ob Sie einen Git Pull machen müssen. Wenn die Ausgabe 0 ist, dann gibt es offensichtlich nichts zu aktualisieren.

@stackoverflow, gib diesem Kerl eine Klingel. Danke @ Jake Berger

# will give you the total number of "different" commits between the two
# Jake Berger Feb 5 '13 at 19:23
git rev-list HEAD...origin/master --count

0 Stimmen

Danke, dass du es schön gemacht hast, Arnaud :)

1 Stimmen

Braucht es dazu eine fetch wie erwartet funktioniert, oder funktioniert der Verweis auf origin/master bedeutet, dass Git die entfernte Datei abfragt, ohne lokal etwas zu holen?

0 Stimmen

@NickChammas dieser Befehl ist lokal, daher ist er nützlich fetch y vor pull/merge/reset

14voto

Jeet Punkte 36472

Ich denke, dass dies am besten zu bewerkstelligen ist:

git diff remotes/origin/HEAD

Vorausgesetzt, Sie haben diese Refspec registriert. Das sollten Sie tun, wenn Sie das Repository geklont haben. Andernfalls (d.h. wenn das Repository lokal neu erstellt und auf das Remote-Repository übertragen wurde) müssen Sie die refspec explizit hinzufügen.

12voto

ma11hew28 Punkte 112879

Ich habe mich bei dieser Lösung an den Kommentaren von @jberger orientiert.

if git checkout master &&
    git fetch origin master &&
    [ `git rev-list HEAD...origin/master --count` != 0 ] &&
    git merge origin/master
then
    echo 'Updated!'
else
    echo 'Not updated.'
fi

0 Stimmen

Bezug nehmend auf Ihr vorheriges Kommentar kann ich Ihnen zum jetzigen Zeitpunkt noch keine endgültige Antwort geben. Zu der Zeit, als ich diese Kommentare machte, tauchte ich in die Tiefen von Git und insbesondere Remotes und Diffs ein. Seitdem sind ein paar Monate vergangen, und ein Großteil des Wissens ist in meinem Gehirn vergraben ;) Wenn Sie nach der Anzahl der "unterschiedlichen" Commits zwischen den beiden suchen, dann ... scheint ein gültiger Teil Ihrer Lösung zu sein.

1 Stimmen

Danke! Das war sauber.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X