Frage

Ich habe einige Schwierigkeiten, die Verwendung zu verstehen Stichworte gegen Geäst In .

Ich habe gerade die aktuelle Version unseres Codes verschoben Zu , und jetzt werde ich an einer Teilmenge dieses Codes für eine bestimmte Funktion arbeiten.Einige andere Entwickler werden ebenfalls daran arbeiten, aber nicht alle Entwickler in unserer Gruppe werden sich für diese Funktion interessieren.Soll ich einen Zweig oder ein Tag erstellen?In welchen Situationen sollte ich das eine gegenüber dem anderen verwenden?

War es hilfreich?

Lösung

Tag stellt eine Version eines bestimmten Zweig zu einem Zeitpunkt in der Zeit. Ein Zweig stellt einen separaten Thread der Entwicklung, die mit anderen Entwicklungsanstrengungen auf der gleichen Code-Basis gleichzeitig laufen kann. Änderungen an einem Zweig schließlich in einen anderen Zweig verschmolzen wieder werden sie zu vereinigen.

In der Regel werden Sie Tag eine bestimmte Version, so dass Sie es neu erstellen können, zum Beispiel Dies ist die Version, die wir zu XYZ Corp ausgeliefert . Ein Zweig ist eher eine Strategie für die laufende Updates auf einer bestimmten Version des Codes zu schaffen, während sie weiterhin die Entwicklung auf, es zu tun. Hier finden Sie eine Filiale der gelieferten Version machen, weiterhin die Entwicklung auf der Hauptlinie, aber Bug-Fixes auf den Zweig machen, dass die gelieferte Version darstellt. Irgendwann werden Sie diese Fehlerkorrekturen zurück in die Hauptleitung verschmelzen. Oft werden Sie beide zusammen Verzweigen und Markieren verwenden. Sie werden verschiedene Tags haben, die sowohl an die Hauptleitung anwenden kann und seine Zweige Kennzeichnung bestimmte Versionen (die an Kunden ausgeliefert, zum Beispiel) entlang jedem Zweig, die Sie neu erstellen möchten -. Lieferung, Fehlerdiagnose, usw.

Es ist eigentlich komplizierter, als dies - oder so kompliziert, wie Sie es machen wollen - aber diese Beispiele sollen Ihnen eine Vorstellung von den Unterschieden geben

.

Andere Tipps

Von dem theoretisch Standpunkt:

  • Stichworte sind symbolische Namen für etwas Revision.Sie zeigen immer auf dasselbe Objekt (normalerweise:zur gleichen Revision);sie ändern sich nicht.
  • Geäst sind symbolische Namen für Entwicklungslinie.Neue Commits werden über dem Zweig erstellt.Der Verzweigungszeiger rückt auf natürliche Weise vor und zeigt auf immer neuere Commits.

Von dem technisch Standpunkt:

  • Stichworte wohnen in refs/tags/ Namespace und kann darauf verweisen Markieren Sie Objekte (annotierte und optional GPG-signierte Tags) oder direkt an Commit-Objekt (weniger verwendetes Lightweight-Tag für lokale Namen) oder in sehr seltenen Fällen sogar Baumobjekt oder Blob-Objekt (z.B.GPG-Signatur).
  • Geäst wohnen in refs/heads/ Namespace und kann nur auf verweisen Objekte festschreiben.Der HEAD Der Zeiger muss auf einen Zweig (symbolische Referenz) oder direkt auf einen Commit (getrennter HEAD oder unbenannter Zweig) verweisen.
  • Remote-Tracking-Zweige wohnen in refs/remotes/<remote>/ Namespace und folgen Sie gewöhnlichen Zweigen im Remote-Repository <remote>.

Siehe auch Gitglossar Manpage:

Zweig

Ein „Zweig“ ist eine aktive Entwicklungslinie.Der letzte Commit für einen Zweig wird als Spitze dieses Zweigs bezeichnet.Die Spitze des Zweigs wird durch einen Zweigkopf referenziert, der sich vorwärts bewegt, wenn weitere Entwicklungen am Zweig vorgenommen werden.Ein einzelnes Git-Repository kann eine beliebige Anzahl von Zweigen verfolgen, aber Ihr Arbeitsbaum ist nur mit einem von ihnen verknüpft (dem „aktuellen“ oder „ausgecheckten“ Zweig) und HEAD zeigt auf diesen Zweig.

Etikett

Ein Verweis, der auf ein Tag- oder Commit-Objekt verweist.Im Gegensatz zu einem Head wird ein Tag durch einen Commit nicht verändert.Tags (keine Tag-Objekte) werden in gespeichert $GIT_DIR/refs/tags/.[...].Ein Tag wird am häufigsten verwendet, um einen bestimmten Punkt in der Commit-Abstammungskette zu markieren.

Tag-Objekt

Ein Objekt, das einen Verweis enthält, der auf ein anderes Objekt zeigt, das genau wie ein Commit-Objekt eine Nachricht enthalten kann.Es kann auch eine (PGP-)Signatur enthalten. In diesem Fall wird es als „signiertes Tag-Objekt“ bezeichnet.

Wenn Sie denken, Ihr Repository als ein Buch, das die Fortschritte auf dem Projekt Chronik ...

Branchen

Sie können als eine jener klebrigen Lesezeichen eines Zweiges denken :

eingeben Bild Beschreibung hier

Ein brandneues Repository hat nur einer von denen (genannt master), die auf die aktuelle Seite automatisch bewegt (man denke commit ) Sie geschrieben haben. Allerdings sind Sie frei zu erstellen und mehr Lesezeichen verwenden, um weitere interessante Orte in dem Buch zu markieren, so dass Sie schnell zu ihnen zurückkehren.

Sie können aber auch immer ein bestimmtes Lesezeichen auf eine andere Seite des Buches bewegen (mit git-reset, zum Beispiel); Sehenswürdigkeiten variieren typischerweise über die Zeit.

Tags

Sie können denken von Tags wie Kapitelüberschriften .

Lesezeichen

Es kann einen Titel enthalten (man denke an kommentierten Tags ) oder nicht. Ein Tag ist ähnlich, aber anders als einen Zweig, dass es einen Punkt von historischem Interesse an dem Buch markiert. Um seinen historischen Aspekt zu halten, wenn Sie einen Tag geteilt haben (dh schob es zu einem gemeinsamen Remote), bist du nicht anzunehmen es an einen anderen Ort in dem Buch bewegen.

Was Sie müssen erkennen, aus dem CVS kommt, ist, dass Sie nicht mehr erstellen Verzeichnisse , wenn eine Filiale einrichten.
No more „Sticky-Tag“ (die angewendet werden können, um nur eine Datei) oder „Zweig-Tag“.
Zweig und Tags sind zwei verschiedene Objekte in Git, und sie beziehen sich immer auf die alle Repo.

Sie würden nicht mehr (mit SVN diesmal) müssen explizit Ihre Repository-Struktur mit:

branches
   myFirstBranch
     myProject
       mySubDirs
   mySecondBranch
     ...
tags
   myFirstTag
     myProject
       mySubDirs
   mySecondTag
   ...

Diese Struktur aus der Tatsache, CVS kommt, ist ein Revisionssystem und nicht eine Version System (siehe Quelle Kontrolle vs. Revision Control? ).
Das bedeutet, Zweige werden durch Tags für CVS emuliert, Verzeichniskopien für SVN.

Ihre Frage macht den Sinn, wenn Sie verwendet werden, um einen Tag zur Kasse, und beginnt die in ihr .
Sie sollten es nicht;)
Ein Tag soll nur einen unveränderlich Inhalte verwendet, um darzustellen, die sie für den Zugriff auf mit der Garantie, jedes Mal den gleichen Inhalt zu erhalten.

In Git, die Geschichte der Revisionen ist eine Reihe von Commits, einen Graphen bilden.
Ein Zweig ist ein Pfad dieses Diagramm

x--x--x--x--x # one branch
    \ 
     --y----y # another branch
       1.1
        ^
        |
        # a tag pointing to a commit
  • Wenn Sie einen Tag Kasse, benötigen Sie einen Zweig erstellen daraus zu arbeiten.
  • Wenn Sie einen Zweig Kasse, werden Sie direkt sehen die neuesten es commit ( ‚HEAD‘) dieses Zweiges.

Siehe Jakub Narębski Antwort für alle technischen Details, aber ehrlich gesagt, an dieser Stelle, die Sie nicht brauchen (noch) nicht alle Details;)

Der wichtigste Punkt ist: ein Tag ein einfacher Zeiger auf einen begehen ist, werden Sie nie in der Lage sein, seinen Inhalt zu ändern. Sie benötigen einen Zweig.


In Ihrem Fall jeder Entwickler auf einer bestimmten Funktion arbeiten:

  • sollte ihre eigene Niederlassung in ihrem jeweiligen Repository erstellen
  • Spur zweigt von ihren Kollegen Repositories (die auf der gleichen Funktion in Betrieb)
  • Ziehen / Schieben, um Ihre Arbeit mit Ihren Kollegen zu teilen.

Statt direkt die Zweige Ihrer Kollegen von Tracking, können Sie nur den Zweig eines „offiziellen“ zentralen Repository verfolgen seine / ihre Arbeit, um zu dem jeder schiebt zu integrieren und zu jeder Arbeit für diese spezielle Funktion gemeinsam nutzen.

Branchen sind aus Holz und aus dem Stamm des Baumes wachsen. Stichworte sind aus Papier (Ableitung von Holz) und hängen wie Ornamente aus verschiedenen Orten im Baum.

Ihr Projekt ist der Baum, und Ihre Funktion, die das Projekt hinzugefügt werden wird auf einem Zweig wachsen. Die Antwort ist Zweig.

Es sieht aus wie der beste Weg ist, zu erklären, dass die Tags nur Zweige als gelesen handeln. Sie können einen Zweig als Tag verwenden, aber Sie können es versehentlich mit neuen Commits aktualisieren. Tags sind garantiert auf den gleichen Punkt begehen, solange sie existieren.

Stichworte können entweder mit oder ohne Vorzeichen ; Zweige sind nie unterzeichnet.

Signed-Tags können nicht bewegen, weil sie verschlüsselt (mit Unterschrift) zu einem bestimmten verpflichten gebunden sind. Unsigned-Tags sind nicht gebunden und es ist möglich, sie zu bewegen (aber Tags zu bewegen ist kein normaler Anwendungsfall).

Branchen können nicht nur bewegen, um ein anderes begehen, sind aber erwartet , dies zu tun. Sie sollten einen Zweig für die lokale Entwicklungsprojekt verwenden. Es ist nicht ganz sinnvoll arbeiten zu einer Git-Repository zu begehen „auf einem Tag“.

Der Git Parable erklärt, wie ein typische DVCS wird erstellt und warum ihre Schöpfer taten, was sie taten. Auch Sie vielleicht einen Blick auf Git für Informatiker nehmen wollen; es wird erklärt, was jede Art von Objekt in Git tut, einschließlich Zweige und Tags.

Ich mag denken von Zweige , wo Sie gehen , -Tags wo Sie gewesen sind .

Ein Tag fühlt sich wie ein Lesezeichen eines bestimmten wichtigen Punkt in der Vergangenheit, wie zum Beispiel eine Version Release.

Während ein Zweig ein bestimmte Weg ist das Projekt nach unten geht und damit der Zweig Marker geht mit Ihnen. Wenn Sie fertig sind Sie fusionieren / löschen Sie den Zweig (das heißt der Markierung). Natürlich könnte dieser Punkt, an Sie zu Tag wählen, die zu begehen.

Ein Tag verwendet wird, eine Version zu markieren, genauer gesagt verweist es einen Zeitpunkt auf einem Zweig. Ein Zweig wird in der Regel verwendet, um Merkmale zu einem Projekt hinzuzufügen.

einfach:

  

Die Tags werden voraussichtlich immer an der gleichen Version eines Projekts zeigen, während Köpfe erwartet voran die Entwicklung voranschreitet.

Git Benutzerhandbuch

Die einfache Antwort lautet:

  

Zweig:   die Stromzweig Zeiger bewegt sich mit Commit jeder in das Repository

und

  

tag:. Commit, dass ein Tag Punkte ändern in der Tat nicht, den Tag ist eine Momentaufnahme, dass commit

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top