Ich komme aus Mercurial und verwende Zweige, um Features zu organisieren. Natürlich möchte ich diesen Workflow auch in meiner Geschichte sehen.
Ich habe mein neues Projekt mit git gestartet und mein erstes Feature fertiggestellt. Beim Zusammenführen der Funktion wurde mir klar, dass git den Schnellvorlauf verwendet, dh meine Änderungen werden nach Möglichkeit direkt auf den Hauptzweig angewendet und mein Zweig wird vergessen.
Um in die Zukunft zu denken: Ich bin der einzige, der an diesem Projekt arbeitet. Wenn ich den Standardansatz von git (schnelles Zusammenführen) verwende, würde meine Historie zu einem riesigen Hauptzweig führen. Niemand weiß, dass ich für jedes Feature einen eigenen Zweig verwendet habe, da ich am Ende nur diesen riesigen Hauptzweig haben werde. Wird das nicht unprofessionell aussehen?
Aus diesem Grund möchte ich kein schnelles Zusammenführen und kann nicht erkennen, warum dies die Standardeinstellung ist. Was ist daran so gut?
quelle
no-ff
' mit seinen "Checkpoint Commits", die die Halbierung oder Schuld brechen.-no-ff
ist selten eine gute Idee, kann aber dennoch dazu beitragen, einen funktionsinternen Verlauf beizubehalten, während nur ein Commit im Hauptzweig aufgezeichnet wird. Dies ist sinnvoll für eine lange Feature-Historie, wenn Sie von Zeit zu Zeit deren Verlauf auf dem Hauptzweig zusammenführen.Antworten:
Das Zusammenführen mit schnellem Vorlauf ist für kurzlebige Zweige sinnvoll. In einem komplexeren Verlauf kann das Zusammenführen mit nicht schnellem Vorlauf das Verständnis des Verlaufs erleichtern und das Zurücksetzen einer Gruppe von Commits erleichtern.
Warnung : Ein nicht schneller Vorlauf hat ebenfalls mögliche Nebenwirkungen. Bitte überprüfen Sie https://sandofsky.com/blog/git-workflow.html , vermeiden Sie das "no-ff" mit seinen "Checkpoint Commits", die die Halbierung oder Schuld brechen, und überlegen Sie sorgfältig, ob dies Ihr Standardansatz sein sollte
master
.(Von nvie.com , Vincent Driessen , Beitrag " Ein erfolgreiches Git-Verzweigungsmodell ")
Jakub Narębski auch erwähnt die Config
merge.ff
:Der schnelle Vorlauf ist die Standardeinstellung, weil:
Wenn Sie jedoch einen iterativen Workflow für einen Themen- / Feature-Zweig erwarten (dh ich füge zusammen, dann gehe ich zurück zu diesem Feature-Zweig und füge weitere Commits hinzu), ist es nützlich, nur die Zusammenführung in den Hauptzweig aufzunehmen und nicht Alle Zwischen-Commits des Feature-Zweigs.
In diesem Fall können Sie am Ende diese Art von Konfigurationsdatei festlegen :
Das OP fügt in den Kommentaren hinzu:
Jefromi antwortet:
Ganz allgemein füge ich hinzu:
Wenn Sie das Mercurial-Zweigmodell betrachten, ist es im Kern ein Zweig pro Repository (obwohl Sie anonyme Köpfe, Lesezeichen und sogar benannte Zweige erstellen können ).
Siehe "Git und Mercurial - Vergleichen und Kontrastieren" .
quelle
feature
Zweig nicht in ein öffentliches Repo verschoben haben, können Sie ihnmaster
so oft wie Sie möchten neu gründen . Siehe stackoverflow.com/questions/5250817/…feature
Zweigs wieder integrierenmaster
, die den Verlauf linear macht oder nicht. Eine einfache schnelle Zusammenführung macht es linear. Dies ist sinnvoll, wenn Sie den Verlauf diesesfeature
Zweigs vor der Schnellvorlauf-Zusammenführung bereinigt haben und nur signifikante Commits hinterlassen haben, wie unter stackoverflow.com/questions/7425541/… erwähnt .Lassen Sie mich auf eine etwas erweitern VonC ‚s sehr umfassende Antwort :
Wenn ich mich richtig erinnere, ist die Tatsache, dass Git im Schnellvorlauf standardmäßig keine Zusammenführungs-Commits erstellt, auf die Berücksichtigung von "gleichen Repositorys" mit einem Zweig zurückzuführen, bei denen das gegenseitige Ziehen verwendet wird, um diese beiden Repositorys zu synchronisieren (a Workflow finden Sie als erstes Beispiel in der Dokumentation der meisten Benutzer, einschließlich "The Git User's Manual" und "Version Control by Example". In diesem Fall verwenden Sie Pull nicht, um einen vollständig realisierten Zweig zusammenzuführen, sondern verwenden Sie ihn, um mit anderen Arbeiten Schritt zu halten. Sie möchten keine kurzlebigen und unwichtigen Tatsachen haben, wenn Sie eine Synchronisierung durchführen, die für die Zukunft gespeichert und im Repository gespeichert wird.
Beachten Sie, dass die Nützlichkeit von Feature-Zweigen und die Verwendung mehrerer Zweige in einem einzigen Repository erst später erfolgte, da VCS mit guter Unterstützung für das Zusammenführen häufiger verwendet wurde und verschiedene zusammenführungsbasierte Workflows ausprobiert wurden. Aus diesem Grund hat Mercurial beispielsweise ursprünglich nur einen Zweig pro Repository unterstützt (plus anonyme Tipps zum Verfolgen von Remote-Zweigen), wie in älteren Versionen von "Mercurial: The Definitive Guide" zu sehen ist.
Zweitens, wenn folgendes Best Practices der Verwendung von Feature Zweigen , nämlich dass Feature Zweige sollten alle gehen von stabiler Version ( in der Regel von den letzten Release), in der Lage sein , herauspicken und auswählen , welche durch die Auswahl , welche Funktion verzweigt zu verschmelzen umfassen Funktionen, Sie sind in der Regel nicht in der Schnellvorlaufsituation ... was dieses Problem strittig macht. Sie müssen sich Sorgen machen, dass beim Zusammenführen eines ersten Zweigs eine echte Zusammenführung und kein schneller Vorlauf erstellt wird (vorausgesetzt, Sie setzen Single-Commit-Änderungen nicht direkt auf 'master'). Alle anderen späteren Zusammenführungen befinden sich natürlich in einer Situation ohne schnellen Vorlauf.
HTH
quelle