Best Practices für Git-Verzweigungen und -Tags

141

Ich lerne gerade, Git zu benutzen, indem ich Pro Git lese . Im Moment lerne ich etwas über Verzweigungen und Tags. Meine Frage ist, wann ich einen Zweig und wann ein Tag verwenden soll.

Angenommen, ich erstelle eine Verzweigung für Version 1.1 eines Projekts. Soll ich den Zweig verlassen, um die Release-Version zu markieren, wenn ich diese Version fertiggestellt und freigegeben habe? Oder sollte ich einen Tag hinzufügen? Soll ich den Versionszweig löschen, wenn ich ein Tag hinzufüge (vorausgesetzt, er wird mit dem Master oder einem anderen Zweig zusammengeführt)?

Code-Guru
quelle

Antworten:

162

Kurz gesagt: Best Practice ist Verzweigen, häufiges Zusammenführen und immer synchron bleiben .

Es gibt ziemlich klare Konventionen, um Ihren Code in getrennten Zweigen vom Hauptzweig zu halten:

  1. Sie sind dabei, wichtige oder störende Änderungen umzusetzen
  2. Sie werden einige Änderungen vornehmen, die möglicherweise nicht verwendet werden
  3. Sie möchten mit etwas experimentieren, von dem Sie nicht sicher sind, ob es funktioniert
  4. Wenn Sie aufgefordert werden, sich zu verzweigen, haben andere möglicherweise etwas, was sie im Master tun müssen

Als Faustregel gilt, dass Sie nach dem Verzweigen mit dem Hauptzweig synchron bleiben sollten. Denn irgendwann müssen Sie es wieder zum Master zusammenführen. Um beim Zusammenführen nicht zu komplizierten Konflikten zu führen, sollten Sie häufig einen Commit ausführen und häufig zusammenführen.

Gute Praktiken, die zu befolgen sind

Ein erfolgreiches Git-Verzweigungsmodell von Vincent Driessen hat gute Vorschläge. Wenn Ihnen dieses Verzweigungsmodell zusagt, ziehen Sie die Flusserweiterung auf git in Betracht . Andere haben über den Fluss kommentiert .

Tagging-Praktiken

Wie Sie bereits wissen, gibt Git Ihnen Commit-IDs wie 1.0-2-g1ab3183, aber das sind keine Tags! Das Taggen erfolgt mit dem git-Tag, und die Tags, die mit dem git-Tag erstellt werden, sind die Basis für die von git describe erstellten Festschreibungs-IDs. Mit anderen Worten, in Git kennzeichnen Sie keine Zweige. Sie markieren Commits. Es ist richtig zu sagen, dass das Tag nur ein mit Anmerkungen versehener Zeiger auf ein Commit ist.

Schauen wir uns ein praktisches Beispiel an, das es demonstriert hat:

                        / - [v1.0]
                       v
---. ---. --- .--- S ---.--- Ein <- Meister
                         \ 
                           \ -.--- B <- Test

Lassen Sie uns ein 'S' übergeben, indem Sie auf das Tag 'v1.0' zeigen. Diese Festschreibung gilt sowohl für den Zweig 'master' als auch für den Zweig 'test'. Wenn Sie " git describe " über "commit A" (über "master") ausführen, erhalten Sie so etwas wie v1.0-2-g9c116e9. Wenn Sie "git describe" über "commit A" (auch als "test" -Zweig bezeichnet) ausführen, erhalten Sie so etwas wie v1.0-2-g3f55e41das bei der Standardkonfiguration für "git describe" der Fall ist. Beachten Sie, dass dieses Ergebnis etwas anders ist. v1.0-2-g9c116e9bedeutet, dass wir mit der sortierten SHA-1-ID von 9c116e9, 2 Commits nach dem Tag festgeschrieben sind v1.0. Es gibt kein Tag v1.0-2!

Wenn Ihr Tag nur im Zweig 'master' angezeigt werden soll, können Sie nach dem Verzweigungspunkt des Zweigs 'test' ein neues Commit erstellen (z. B. nur Standard- / Fallback-Versionsinformationen in GIT-VERSION-FILE aktualisieren). Wenn Sie Commits für den Zweig 'test' mit zB 'v1.0.3' markieren, wird dies nur in 'test' angezeigt.

Verweise

Ich habe viele, viele nützliche Blogs und Posts gefunden, von denen ich lernen kann. Diejenigen, die professionell illustriert werden, sind jedoch selten. Daher möchte ich einen Beitrag empfehlen - Ein erfolgreiches Git-Verzweigungsmodell von @nvie. Ich habe seine illustration ausgeliehen :)

Bildbeschreibung hier eingeben

EL Yusubov
quelle
4
1.0-2-g1ab3183 ist ein Bezeichner, der von git describe aus Informationen erstellt wurde, die von git verfügbar sind. Es ist jedoch etwas zu viel, ihn als git-Bezeichner zu bezeichnen. Git identifiziert sich durch SHA-Hash; Tags und Zweige sind menschliche Konstrukte, die git hilfreich verfolgt. Erstellen Sie daher ein Tag, wenn Sie glauben, dass ein Mensch eines Tages ein passendes Lesezeichen für ein Commit finden möchte.
Abraham
2
Eine wunderbare Illustration der Multidimensionalität im Git-Universum. schön. danke
Tope
Es ist erwähnenswert, dass für viele Projekte einige der in diesem Diagramm gezeigten Fahrspuren nicht benötigt werden. Einige Projekte benötigen nur das, was hier entwickelt und vorgestellt wird. Dies gilt häufig für Webanwendungen, die nach Belieben bereitgestellt werden können.
usr
37

Eine Verzweigung wird verwendet, wenn Sie zwei verschiedene Versionen des Repositorys gleichzeitig haben. Ein Tag ist eine Möglichkeit, einen Zeitpunkt in Ihrem Repository zu markieren.

Sie sollten ein Tag hinzufügen, um eine freigegebene Version zu markieren. Wenn Sie dann Fehlerbehebungen für diese Version vornehmen müssen, erstellen Sie einen Zweig am Tag.

Sie möchten nur Zweige löschen, die wieder mit HEAD [oder einem anderen Zweig] zusammengeführt wurden.

gam3
quelle
3
oh ... und ich nehme an, Sie meinen, dass der Zweig mit einem anderen Zweig zusammengeführt wird, z. B. master. HEAD bewegt sich jedes Mal, wenn ich zur Kasse gehe, richtig?
Code-Guru
HEAD weist in der Regel auf einen Zweig (es sei denn , Sie in frei stehende HEAD - Modus befinden), so HEAD bewegt sich mit dem Zweig verweist er auf
LoicAG