Wie ist ein tag unterscheidet sich von einem branch in Git? Was sollte ich hier?
Ich bin mit einigen Schwierigkeiten zu verstehen, wie zu verwenden tags versus Filialen in git.
Ich bewegte nur die jeweils aktuelle version unserer code von cvs, git, und jetzt werde ich arbeiten, ein Teil des code für eine bestimmte Funktion. Ein paar andere Entwickler die Arbeit an diesem als gut, aber nicht alle Entwickler in unserer Gruppe gehen, um Pflege zu dieser Funktion. Sollte ich erstellen Sie einen Zweig oder ein tag? In welchen Situationen soll ich mich mit einem gegenüber dem anderen?
- Da web-Suche, wie git tag brachte mich in den ersten link, den ich hinzufügen, dass es einen besseren (IMHO) Antwort über einen tag hier: stackoverflow.com/questions/35979642/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen tag repräsentiert eine version eines bestimmten Zweiges in einer Zeit in der Zeit. Ein Zweig stellt einen separaten thread aus der Entwicklung, die gleichzeitig ausgeführt werden können mit anderen Entwicklungs-Anstrengungen auf der gleichen code-Basis. Änderungen an einem Zweig kann schließlich zusammengeführt werden, wieder in einem anderen Zweig, um diese zu vereinheitlichen.
In der Regel werden Sie tag eine bestimmte version, so dass Sie neu erstellen können, z.B. dies ist die version, die wir versendet XYZ Corp. Ein Zweig ist eher eine Strategie, um vor-gehen updates auf eine bestimmte version des Codes, während Sie weiterhin zu tun Entwicklung auf. Sie machen einen Zweig der gelieferten version, weiterhin die Entwicklung auf der main-Linie, aber stellen Sie bug-fixes, um die Verzweigung, die für die gelieferte version. Schließlich, Sie werden Zusammenführen, die diese Fehler behebt, wieder in die Hauptleitung. Oft werden Sie verwenden beide branching und tagging zusammen. Haben Sie verschiedene tags, die gelten sowohl für die Haupt-Linie und seine äste Kennzeichnung bestimmte Versionen (die an Kunden ausgeliefert, zum Beispiel) entlang jeder Zweig, können Sie neu erstellen möchten -- für Liefer -, Fehler-Diagnose, etc.
Es ist tatsächlich komplizierter, als diese-oder so kompliziert, wie Sie wollen, es zu machen-aber diese Beispiele sollten Ihnen eine Vorstellung von den unterschieden.
git checkout 88c9f229f
können Sie etwas tun, wiegit checkout your_tag
und Sie wird die Kasse verpflichten, das war ein Aliasing durch den tag.Aus der theoretische Sicht:
Aus der technische Sicht:
refs/tags/
namespace, und können tag Objekte (kommentiert und Optional GPG signierte tags) oder direkt an commit-Objekt (weniger leichte-tag für lokale Namen), oder in sehr seltenen Fällen sogar zu Baum Objekt oder blob-Objekt (z.B. GPG-Signatur).refs/heads/
namespace, und kann nur commit-Objekte. DieHEAD
Mauszeiger muss sich auf einem Zweig (symbolische Referenz) oder direkt auf einen commit (freistehende LEITER oder Unbenannte Zweig).refs/remotes/<remote>/
namespace, und Folgen ordinary branches im remote-repository<remote>
.Siehe auch gitglossary manpage:
git checkout <tag>
" erzeugen würden anonyme Unbenannte Zweig (so genannte "detached HEAD") und wählen Sie Staat - tag. Erstellen einer neuen commit tut es auf diese Unbenannte Zweig, und nicht ändern, was tag Punkte zu.git checkout -b <branch name> <tag name>
Wenn Sie denken, zu Ihrem repository wie ein Buch, die Chroniken Fortschritte an Ihrem Projekt...
Filialen
Können Sie denken, ein Zweig, wie einer dieser klebrigen Lesezeichen:
Einer Marke neues repository hat nur einer von denen (genannt
master
), der bewegt sich automatisch auf die neueste Seite (denke Begehen), die Sie geschrieben haben. Jedoch, Sie sind frei zu erstellen, und verwenden Sie mehr Lesezeichen, um zu markieren, andere Punkte von Interesse an dem Buch, so können Sie zurück zu Ihnen schnell.Können, können Sie auch immer bewegen eine bestimmte Textmarke, um einige der anderen Seite des Buches (mit
git-reset
zum Beispiel); die Punkte des Interesses in der Regel im Laufe der Zeit variieren.Tags
Können Sie denken-tags als Kapitel-überschriften.
Es enthält möglicherweise einen Titel (denke annotierten tags) oder nicht. Ein tag ist ähnlich, aber unterscheidet sich an einen ast, dass Sie markiert einen Punkt von historischen Interesse an dem Buch. Für die Erhaltung Ihrer historischen Aspekt, wenn man einmal gemeinsam einen tag (D. H. hat Sie zu einem freigegebenen remote), Sie sind eigentlich nicht zu verschieben Sie es an eine andere Stelle in dem Buch.
master
unddevelop
sagen—beide zeigen an, dass zu Begehen. Sie können nicht eindeutig zu entnehmen, in der Rede, zu Begehen, alsmaster
oderdevelop
.Was Sie brauchen, um zu realisieren, kommen aus dem CVS, ist, dass Sie nicht mehr schaffen Verzeichnisse beim Aufbau einer Filiale.
Nicht mehr "sticky tag" (die angewendet werden können, um nur eine Datei), oder "ast-tag".
Branch und tags sind zwei verschiedene Objekte in Git, und Sie beziehen sich immer auf die alle repo.
Würden Sie nicht mehr (mit SVN diesem Zeitpunkt) haben explizit die Struktur Ihres Repositorys mit:
Die Struktur kommt von der Tatsache CVS ist ein revision system und nicht eine version system (siehe Source-control vs. Revision Control?).
Das bedeutet, dass die Zweige emuliert werden durch tags für Lebensläufe, directory, Kopien für den SVN.
Ihre Frage macht Sinne, wenn Sie werden verwendet, um die Kasse ein tag, und zu arbeiten beginnen, es.
Das sollten Sie nicht 😉
Ein tag darstellen soll, ein unveränderlich Inhalt, nur für den Zugang ist es mit der Garantie, um den gleichen Inhalt zu jeder Zeit.
Im Git, die Geschichte der Revisionen ist eine Serie von commits, bilden ein Diagramm.
Ein Zweig ist ein Pfad des Graphen
Sehen Jakub Narębski Antwort für alle die Technik, aber ehrlich gesagt, an diesem Punkt, Sie brauchen nicht (noch) nicht alle details 😉
Der wichtigste Punkt ist: ein tag, wird eine einfache Zeiger auf einen commit, werden Sie nie in der Lage sein, zu ändern, seinen Inhalt. Sie müssen einen Zweig.
In Ihrem Fall, jeder Entwickler arbeitet auf ein bestimmtes Merkmal:
Statt tracking direkt die Zweige Ihrer Kollegen, Sie konnte verfolgen, nur der Zweig von einem "offiziellen" zentralen repository, auf die jeder schiebt seine/Ihre Arbeit auf, um Sie zu integrieren und zu teilen, jeder Arbeit für diese spezielle Funktion.
Zweige sind aus Holz und wachsen aus dem Stamm des Baumes. Tags sind aus Papier (Derivat aus Holz), und hängen wie Christmas Ornaments aus verschiedenen Orten in den Baum.
Ihrem Projekt ist der Baum, und Ihre Funktion wird dem Projekt Hinzugefügt wird, wachsen auf einem Zweig. Die Antwort ist Zweig.
Sieht es aus wie der beste Weg, um zu erklären, dass tags handeln, als nur zu Lesen Zweige. Sie können einen Zweig, wie ein tag, aber Sie können unbeabsichtigt-update mit neuen commits. Tags sind garantiert zu zeigen auf den gleichen commit wie lange Sie existieren.
git tag -f
.Tags können entweder Sie signiert oder unsigniert sind; äste sind nie unterzeichnet.
Unterzeichnet tags können nie bewegen, denn Sie sind kryptografisch gebunden (mit Unterschrift) auf einen bestimmten commit. Unsigned-tags sind nicht gebunden und es ist möglich, um Sie zu bewegen (aber das verschieben von tags ist nicht ein normaler use-case).
Zweige können nicht nur verschieben auf einen anderen verpflichten, aber erwartet zu tun. Sie sollten eine Verzweigung für die lokale Entwicklung Projekt. Ist es nicht durchaus Sinn machen, zu verpflichten, arbeiten an einem Git-repository "auf einen tag".
Den Git Gleichnis erklärt, wie ein typischer DVCS angelegt wird, und warum Ihre Schöpfer wussten, was Sie Taten. Auch, möchten Sie vielleicht werfen Sie einen Blick auf Git für Computer-Wissenschaftler; es wird erklärt, was jede Art von Objekt in Git, einschließlich der Zweige und tags.
Ich mag zu denken Filialen als , wohin Sie gehen,, tags als , wo Sie gewesen.
Einem tag fühlt sich an wie ein Lesezeichen von einer bestimmten wichtigen Punkt in der Vergangenheit, wie eine release version.
In der Erwägung, dass eine Niederlassung einen bestimmten Pfad, den das Projekt den Bach runter geht, und somit die Niederlassung marker Fortschritte mit Ihnen. Wenn Sie fertig sind, die Sie Zusammenführen/löschen Sie die Verzweigung (D. H. der Markierung). Natürlich, an diesem Punkt können Sie wählen, um tag Begehen.
Ein-tag wird verwendet, um eine version, genauer gesagt, es verweist auf einen Punkt in der Zeit auf einem Zweig. Eine Niederlassung ist in der Regel verwendet, um Funktionen hinzuzufügen, um ein Projekt.
einfach:
Git User Manual
die einfache Antwort ist:
aber