2017-01-23 3 views
-1

Ich behebe ein Problem mit TeamCity beim Erstellen von Pull-Anforderungen für GitHub, wie in this blog post beschrieben, und ich versuche, das Checkout-Verhalten lokal zu replizieren.Warum werden Änderungen an Master nicht in meinen GitHub-Merge-Heads angezeigt?

Hier ist die Reihenfolge der Schritte mir folgenden:

// in /projects/semver_demo/master 
git checkout master 
echo "Hello World!" > master.txt 
git add . 
git commit -m "edited master.txt" 
git push 
git branch foo 
echo "Hello World!" > foo.txt 
git add foo.txt 
git push 

Jetzt habe ich zu GitHub gehen, offen Pull Anfrage # 123 von Ast foo. Dann wird in einem separaten Repo, die ich in einem anderen Ordner ausgecheckt, Ich überprüfe, was ich glaube, dass der aktuelle merge Kopf seine für Pull-Request # 123:

// in /projects/semver_demo/merged 
git fetch origin refs/pull/123/merge:pr123 
git checkout pr123 

OK, so weit, so gut - ich bin auf einem Zweig mit meinem Feature. Jetzt gehe ich zurück in meinen Arbeitsordner, simuliere einige Änderungen am Master, die - wie ich es verstehe - erscheinen sollten, wenn ich den Merge-Head erneut abrufe.

// in /projects/semver_demo/master 
git checkout master 
echo "Hello again!" >> master.txt 
git add master.txt 
git commit -m "Added another line to master.txt" 
git push 

Nun wechseln Sie wieder in meine feature_branch Ordner und löschen und erneut abzurufen den Merge Kopf:

// in /projects/semver_demo/merged 
git checkout master 
git branch -D pr123 
git fetch origin refs/pull/123/merge:pr123 
git checkout pr123 

Wenn ich das tue, ich erwartet, dass die neue, um zu sehen „Hallo again!“ Nachricht in merged/master.txt, aber ich bin nicht - ich sehe die gleiche Version von master.txt, die existierte, als der Zweig erstellt wurde.

Mein Verständnis war, dass ein Merge-Kopf geben Sie das Äquivalent der Zusammenführung der aktuellen Master (oder Upstream-Zweig) in den aktuellen HEAD der Feature-Zweig - aber das ist nicht, was ich sehe. Habe ich einen subtilen Schritt verpasst, um Git zu sagen, dass er den Zusammenführungskopf "wieder zusammenführen" soll? Oder habe ich den Zweck von Merge Heads völlig falsch verstanden?

EDIT: Nach einer wenig mehr Untersuchung DOES Kopf führen die Zusammenführung Änderungen foo drängt die neuesten Änderungen an master zu reflektieren ... aber Änderungen an master drücke nicht. Ich frage mich jetzt, ob dieses Verhalten von Entwurf ist?

+1

Haben Sie den SHA für die Zusammenführung HEAD Änderung danach zweiten Abruf sehen? Ich denke eigentlich, dass die Zusammenführung HEAD nur ändert, wenn Sie die Spitze der Branche ändern, aber ich würde eine ähnliche Repro einrichten müssen und bestätigen, dass dies der Fall ist. –

+0

@ BrendanForster Wie würde ich das überprüfen? Ich habe hauptsächlich mit Git über verschiedene GUI-Tools gearbeitet und habe daher nicht viel Erfahrung damit, direkt mit den zugrunde liegenden Datenstrukturen zu arbeiten ... –

+1

run 'git rev-parse HEAD' nachdem du den' pr123 ausgecheckt hast 'ref - Wenn sich die Objekt-ID in beiden Anwendungen unterscheidet, bedeutet dies, dass GitHub versucht hat, ein neues Zusammenführungs-Commit zu erstellen. Sie können dann 'git show HEAD' anzeigen, um zu sehen, welche Commits es versucht hat, zu verschmelzen, und Sie können diese mit den Zweigen korrelieren, die Sie lokal haben ... –

Antwort

0

Ich habe mit GitHub-Unterstützung verifiziert, dass Merge-Heads nur aktualisiert werden, wenn Änderungen an den Kopf Zweig geschoben werden; Sie werden nicht aktualisiert, um Änderungen am Basiszweig widerzuspiegeln. Wenn Sie also Prerelease-Pakete auf Basis von Pull-Request-Merge-Heads erstellen, müssen Sie unmittelbar vor dem Erstellen des Pakets eine Änderung an den PR-Zweig senden. Wenn Sie VCS-Trigger verwenden, um Ihre Paket-Builds zu starten, sollte dies ohnehin passieren, also denke ich, dass dies einer dieser obskuren Randfälle ist, die im wirklichen Leben nicht wirklich häufig vorkommen werden.

Es gibt detailliertere Hinweise dazu, und wie es wirkt sich auf die GitHubFlow Workflow wir verwenden, bei http://www.dylanbeattie.net/2017/01/semantic-versioning-with-powershell_26.html

Verwandte Themen