2011-01-05 8 views
3

Ich habe einige Lesung getan, wie sowohl die git merge und git rebase Operationen arbeiten, und ich denke, ich habe ein sehr grundlegendes Verständnis für die Unterschiede. Ich habe die Diagramme gesehen :-) Trotzdem bin ich mir immer noch nicht sicher, was der beste der beiden für meinen aktuellen Workflow sein könnte.Git - Merge vs Rebase für meinen Workflow

Meine Arbeit mit notgedrungen wie es SCM-System ist, aber ich bin mit git lokal Spur von lokalen Änderungen zu halten, tun Refactoring, und ein paar andere coole Sachen, die git bringen kann, um das zu bringen, Tabelle. Ich weiß, dass es bereits ein Werkzeug gibt, um der Einrichtung zu helfen, mit git und forforce zu arbeiten (ex p4-git), aber ich will/brauche diesen Overhead nicht unbedingt, also versuche ich, die Dinge so einfach wie möglich zu halten. Hier ist eine kurze Beschreibung meiner aktuellen Workflow für lokale git Filialen zu schaffen und schließlich die Integration zurück in unser notgedrungen Depot:

  1. Ich habe einen Master git Zweig, die macht einen nächtlichen p4 sync zu unserer Code-Basis . Nach der Zwangs-Synchronisierung übertrage ich alle Änderungen an den Master-Zweig. In der Tat ist mein Master Git-Zweig im Wesentlichen eine Momentaufnahme des neuesten Codes, der zu unserer Hauptlinie perforce verpflichtet wird.

  2. Für lokale Änderungen arbeite ich an, ich habe eine git branch immer zuerst erstellen und Kasse dieser Zweig, während auf der Veränderung arbeiten.

  3. Ab und zu möchte ich meinen Zweig auf den neuesten Stand der Master aktualisieren. Bis jetzt habe ich gerade einen git merge master Befehl ausgegeben, um das zu tun, und es hat gut funktioniert.

  4. Wenn ich bereit bin zu dem tatsächlichen notgedrungen Depot zu begehen, fusionieren ich meine Zweig zurück in mein Master Zweig, durch den Master und git merge BRANCHEN und senden regelmäßig notgedrungen mit Ausgabe Check-out

    Befehle

meinen Workflow gegeben, sollte ich wirklich Master Befehl verwenden für Schritt 3 anstelle eines git merge Master ein git rebase? Von meinem Verständnis der Rebase Befehl wäre dies nur notwendig, wenn sagen unsere perforce Mainline (Remote-Depot) wurde verzweigt, und ich wollte einen neuen Master basierend auf dieser Branche erstellen (sagen, ich nenne es Master- newbranch) und übernehme meine Änderungen in dieser neuen Filiale. Ich müsste Rebase von diesem Zweig zuerst?

Im Allgemeinen macht mein aktueller Workflow Sinn, oder habe ich schon einige schlechte Angewohnheiten aufgegriffen?

+1

Sehr interessiert zu sehen, wie diese Frage geht - kann nicht auf Ihre eigentliche Frage kommen, aber wäre es nicht ratsam, eine P4-Synchronisierung zu meistern, bevor Sie versuchen, Ihre Niederlassung in Master zu fusionieren? – cristobalito

+1

Etwas, das in den Sinn kommt, ist [dieser Beitrag] (http://gitster.livejournal.com/42247.html) von Junio ​​C. Hamano (der Betreuer von git). Es ist für Pure-Git-Benutzer gedacht, nicht für Situationen, in denen Sie sich befinden, aber es kann trotzdem einen Einblick geben. – MatrixFrog

+0

MatrixFrog - sehr interessanter Artikel, danke für den Link! Nachdem ich es gelesen habe, stimme ich generell mit dem überein, was Junio ​​sagt, ich sollte nicht wirklich meinen Zweig mit den neuesten Änderungen vom Meister auffrischen. Wenn die Funktion bereit ist, kann ich sie vor dem Senden wieder in den Master einfügen. Das einzige Problem mit diesem ist, dass ich meine "Daten" nicht unter git Kontrolle habe (20GB + von zu überwachenden binären Daten), und gelegentlich ändern sich Daten, die den Code brechen (schlechte Kodierung, ich weiß!), Die mich zwingt, zu aktualisieren mein Zweig vom Meister. –

Antwort

1

Sie sollten in diesem Fall nicht (unbedingt) Rebase über Merge verwenden. Denken Sie daran, dass Rebase im Wesentlichen Ihre Geschichte neu schreibt. Es ist nützlich, um mehrere Zweige zu bereinigen und einen lineareren Verlauf zu liefern, aber aus Ihrem Anwendungsfall gewinnen Sie nichts durch die Verwendung von Rebase. Das Verhalten, das Sie beschrieben haben, ist ein normaler Git-Workflow, für den Merge entwickelt wurde.

Die schwierige Sache über Rebase ist, wenn Sie Rebasing (Geschichte neu schreiben) verpflichtet, dass Sie bereits gedrückt haben. Dies kann bei der Zusammenarbeit mit anderen Benutzern zu erheblichen Problemen führen, die Sie jedoch für die Zusammenarbeit unbedingt verwenden müssen. Es ist daher unwahrscheinlich, dass Sie auf dieses Problem stoßen.

+0

Es scheint so Rebase ist unnötig und wahrscheinlich in meinem Anwendungsfall unerwünscht. Es ist gut für mich, auf meine lokale Geschichte zurückblicken zu können, um meine Änderungen/Fortschritte zu verfolgen (einer der Gründe, warum ich Git zu meinem Workflow überhaupt hinzugefügt habe). –

1

Ich habe den gleichen Workflow und bevorzuge git Rebase -i Master. Dies hält alle forforce resyncs am Ende der Änderungsliste. So scheint es, dass ich die neueste Version ausgecheckt habe und eine Menge Änderungen vorgenommen habe. Außerdem werden nach einer Resynchronisierung nur Änderungen angezeigt, die sich auf den Zweig beziehen. Scheint intuitiver, aber es klingt eher nach Stil als nach Korrektheit. ~ Ben

0

Rebase schreibt Ihre Geschichte neu. Es hängt wirklich davon ab, wie du deine Geschichte behalten willst. Rebase hält die Geschichte im Allgemeinen klarer.

Die Historie zeigt, was in Ihrem Projekt passiert ist. Aber Sie müssen nicht alles aufdecken, was Sie getan haben. Stellen Sie sich vor, Sie schreiben ein Buch. Sie müssen den Benutzern nicht Ihren Schreibverlauf einschließlich Entwurfsversionen zeigen.

In meinem Fall bevorzuge ich normalerweise Rebase über Merge, wenn es darum geht, Master zu Zweigen zu verbinden.