Git-tags gelten für alle Filialen?
Ich bin immer meine Füße nass mit git-tagging, aber meine vorherigen hintergrund ist die Subversion, wo die "tags" waren eigentlich nur Kopien, keine "echte" tags...
Wenn ich einen tag, um ein git repo, ist es auf alle Zweige oder nur die aktuelle?
Zum Beispiel, wenn ich aktuell über diese Zweige (git branch -v
):
* master deadbeef My master head comment
dev baddfeed My def head comment
Sind und die aktuell ausgecheckte branch ist master, wie Sie sehen können. Jetzt nehme ich git tag -a TAGNAME
tut TAGNAME
gelten nur für deadbeef
(master-branch) oder zu baddfeed
(dev-branch) als gut?
z.B., Sagen, dass ich schalten Sie anschließend den dev-Zweig (d.h., nicht den Zweig der tag erstellt wurde) vor der Kontrolle aus dem tag:
git checkout dev
git checkout TAGNAME
Mache ich das dann am Ende mit einem checkout von baddfeed
oder wird der tag checkout (zweite Zeile) Wechsel ich zurück auf den master branch (wo der tag erstellt wurde) und geben Sie mir eine Kasse von deadbeef
?
(Oder Dritte Möglichkeit, ist mein Verständnis für erstellen und wiederherstellen von tags zu fehlerhaft oder zu einfach für die Antwort so einfach wie eine dieser beiden Optionen?)
Auch nicht die Antwort auf meine Frage zu ändern, wenn ich ein leichtes tag (git tag TAGNAME
) anstatt eines kommentierten tag?
- Ich empfehle zu Lesen: git-scm.com/book/en/Git-Basics-Tagging & kernel.org/pub/software/scm/git/docs/git-tag.html. Alles drin.
- Ein tag kennzeichnet einen einzelnen commit. Siehe Die Git Objekt Model.
- Greg ' s Antwort ist alles, was Sie brauchen. Tags sind einzelne begeht, ohne Kontext, Sie Leben in einem repository-weit-namespace. Sie sprechen nicht über einen bestimmten tag "auf" ein Zweig mehr, als Sie sprechen über Linux 3.11 wird "on" jedem Zweig (offensichtlich existieren in jedem Zweig des kernel!).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lassen Sie uns sagen, Sie sind in der Abteilung
myBranch
. Und erstellen Sie ein tag namensmyTag
Wird die Markierung nur auf die commit-Objekt des
myBranch
Zweig. Ich habe mit CVS zu, und es tags Revisionen auch nicht alle Zweige (aber die CVS-Zweige sind spezielle tags). Ich glaube nicht, dass.Wenn Sie zur Kasse
myTag
Sie werden in der commit -G
Beispiel. Sie können nicht erstellen Sie die tags mit dem gleichen Namen auf differente Zweige. Wenn Sie es tun, werden Sie bewegen die tag.Gibt es keinen Unterschied für einen annotierten tag damit in Zusammenhang stehen.
Hinweis: wenn Check-out-tags, die Sie am Ende mit "detached HEAD" - Modus. Ihre änderungen werden verloren gehen, es sei denn, Sie erstellen ein weiterer Zweig ab dem tag ausgecheckt.
git checkout dev; git checkout TAGNAME
), dann würde ich am Ende wieder in die master brach, mit derdeadbeef
commit ausgecheckt im detached-Modus (auch wenn das zufällig auch noch sein Kopf, der Meister, es würde überprüft werden detached); ist das richtig?git reflog
.Es einfach zu machen:
In Git, ein tag ist einfach ein alias für eine commit-id. Wenn Sie ein tag hinzufügen, Git einfach die Karten Ihrer tag-name (tag-Zeichenfolge), um eine bestimmte commit-id. Da die commit-id relevant ist, auf einen bestimmten Zweig (oder Zweige bei der Zusammenführung) der tag wird nur relevant, um die Branche (und alle, die es zusammengeführt wurde).
Weitere Infos finden Sie hier:
http://git-scm.com/book/en/Git-Basics-Tagging#Creating-Tags
Dem Lesen der Fragen und Ihre Kommentare, ich denke, der wesentliche Punkt, der Ihnen unklar ist hier, was es bedeutet, in git (gegenüber anderen Systemen) "auf einem ast".
In git, ein
git checkout
Betrieb überprüft heraus einige insbesondere verpflichten [aber siehe Fußnote 1]. Es setzt auch den besonderen NamenHEAD
so dass es bezieht sich insbesondere verpflichten. Aber: es gibt zwei verschiedene Arten, dassHEAD
können festlegen, dass eine bestimmte Begehen. Es kann sein:Wenn Sie
git checkout branchname
, git legt die zweite, der gewöhnliche Fall. Wenn Sie danncat .git/refs/HEAD
Sie finden es enthält die Zeichenketteref:
gefolgt vonrefs/heads/branchname
[2]. Das ist, was es bedeutet, "auf dem ast": Sie überprüft haben, die verpflichten, dass die Zweig-name bezieht sich auf, aber auchHEAD
ist ein "symbolic ref". Wenn Sie neue änderungen und commit, git machen die neuen commit, dann "peel off" die Branche label sticky-note und fügen Sie es auf die neue zu Begehen, die Sie gerade Hinzugefügt haben. Das "bewegt die Branche", um die neu hinzugefügte Spitze, und Sie sind "immer noch auf dem ast".Auf der anderen Seite, wenn Sie
git checkout tagname
, git legt die ersten, ungewöhnlichen Fall. Es macht das gleiche, wenn Sie check-out von SHA-1 ID (dieea56709...
style-strings). In diesem Fall wird die Datei fürHEAD
hat gerade die wörtliche SHA-1 ID drin. In diesem Zustand, wenn Sie einen neuen commit, der es Hinzugefügt wird, wie üblich, aber es gibt keinen sticky-note-Wechsel zu bewegen, Zweigstelle labels um. Sie sind nicht "auf einem ast";HEAD
ist nicht ein "symbolic ref".Soweit die eigentlichen tags selbst gehen, sind Sie nur Namen für einen commit ausführt. Aber warten Sie, ist nicht, was a branch name ist? Ja! Der Unterschied zwischen einer branch-name und ein tag-name ist, dass ein Zweig name ist erwartet zu bewegen, und git sich bewegen wird, es automatisch, dass "auf einem ast" der Fall. Ein tag-name ist nicht "erwartet, sich zu bewegen" [3] und wird niemals automatisch.
Fußnoten:
[1] Nur um zu verwirren Dinge (oder denn git ' s Benutzeroberfläche ist "böse", wie manche es nennen 🙂 ) es gibt Fälle, wenn
git checkout
nicht ändernHEAD
, speziell, wenn Sie Fragen, es heraus zu überprüfen, insbesondere Pfadnamen.[2] In sehr alten Versionen von git, statt
ref: ...
git verwendet einen symbolischen link. Das Ziel war die Anbindung der FILIAL-ID-Datei, z.B.refs/heads/master
oder was auch immer, so öffnen und Lesen der Datei bekam die commit-ID, und Sie hattenlstat
zu erkennen, "auf einem ast". Dieser funktioniert nicht auf Windows und ausgeschlossen "Verpackung" refs (.git/packed-refs
), daher die änderung zu verwendenref:
statt.[3] Die Ausdrücke "sollen" und "nicht zu erwarten", sollte gefragt werden: erwartet von wem? Git selbst ist OK mit git-Nutzer bewegt-tags, es ist die Menschen mit git (und oft, Skripts, die Sie schreiben), dass man verwirrt von diesem. So bewegen Sie nicht einen tag-es sei denn, Sie haben zunächst überprüft, mit anderen Menschen teilen das repository.