webentwicklung-frage-antwort-db.com.de

Gilt Git-Tags nur für den aktuellen Zweig?

Ich arbeite derzeit mit einem Repository, das mehrere Zweige hat.

Wenn ich ein Tag erstelle, bezieht sich dieses Tag auf den damals aktuellen Zweig?

Mit anderen Worten: Muss ich jedes Mal, wenn ich ein Tag erstelle, auf den gewünschten Zweig und das Tag in diesem Zweig wechseln, damit das Tag zu diesem Zeitpunkt auf diesen Zweig verweist?

123
Gerardo

Wenn Sie ein Tag erstellen, indem Sie z.

git tag v1.0

das Tag bezieht sich auf das letzte Commit des Zweigs, in dem Sie sich gerade befinden. Sie können die Verzweigung ändern und dort ein Tag erstellen.

Sie können auch beim Markieren nur auf den anderen Zweig verweisen.

git tag v1.0 name_of_other_branch

dadurch wird das Tag für das letzte Festschreiben des anderen Zweigs erstellt.

Oder Sie können das Tag einfach an einer beliebigen Stelle platzieren, unabhängig von der Verzweigung, indem Sie direkt auf die SHA1 einiger Festschreibungen verweisen

git tag v1.0 <sha1>
123
Kalle Pokki

CharlesBs Antwort und Helmberts Antwort sind beide hilfreich, aber ich habe eine Weile gebraucht, um sie zu verstehen. Hier ist eine andere Art, es auszudrücken:

  • Ein Tag ist ein Zeiger auf ein Commit und Commits existieren unabhängig von Zweigen .
    • Es ist wichtig zu verstehen, dass Tags keine direkt Beziehung zu Zweigen haben - sie identifiziere immer nur ein commit.
      • Auf dieses Festschreiben kann aus einer beliebigen Anzahl von Zweigen hingewiesen werden - d. H. Es kann Teil des Verlaufs einer beliebigen Anzahl von Zweigen sein - einschließlich keiner.
    • Daher enthält das Ausführen von git show <tag>, Um die Details eines Tags anzuzeigen, keinen Verweis auf Verzweigungen, sondern nur die ID des Commits, auf das das Tag verweist.
      • (Festschreibungs-IDs (a.k.a. Objektnamen oder SHA-1-IDs) sind 40-stellige Zeichenfolgen, die aus hexadezimalen Ziffern bestehen, die Hashes über den Inhalt einer Festschreibung darstellen, z. B .: 6f6b5997506d48fc6267b0b60c3f0261b6afe7a2)
  • Zweige kommen nur ins Spiel indirekt:
    • Zum Zeitpunkt der Erstellung ein Tag , indem impliziert the commit dass das Tag auf zeigt:
      • Wenn für ein Tag kein Ziel angegeben wird, wird standardmäßig das letzte Festschreiben des aktuellen Zweigs verwendet (a.k.a. HEAD). z.B.:
        • git tag v0.1.0 # tags HEAD of *current* branch
      • Wenn Sie einen Zweignamen als Tag-Ziel angeben, wird standardmäßig der letzte Festschreibungsvorgang für diesen Zweig verwendet. z.B.:
        • git tag v0.1.0 develop # tags HEAD of 'develop' branch
      • (Wie andere angemerkt haben, können Sie auch eine Festschreibungs-ID explizit als Ziel des Tags angeben.)
    • Bei Verwendung von git describe Zur Beschreibung des aktuellen Zweigs:
      • git describe [--tags] Beschreibt den aktuellen Zweig in Bezug auf die Commits seit dem letzten [möglicherweise leichtgewichtigen] Tag in der Geschichte dieses Zweigs.
      • Daher spiegelt das Tag, auf das durch git describe Verwiesen wird, möglicherweise NICHT das zuletzt erstellte Tag wider insgesamt.
153
mklement0

Tags und Verzweigung haben keinerlei Beziehung zueinander, da sich Tags auf eine bestimmte Festschreibung beziehen, und Verzweigung ist eine bewegende Referenz auf die letzte Festschreibung einer Historie. Zweige gehen, Tags bleiben.

Wenn Sie also einen Commit markieren, ist es git egal, welcher Commit oder Zweig ausgecheckt ist, wenn Sie ihm den SHA1 für das bereitstellen, was Sie markieren möchten.

Ich kann sogar markieren, indem ich mich auf einen Zweig beziehe (er markiert dann die Spitze des Zweigs), und später sagen, dass sich die Spitze des Zweigs an einer anderen Stelle befindet (mit git reset --hard zum Beispiel), oder löschen Sie den Zweig. Das von mir erstellte Tag wird sich jedoch nicht bewegen.

30
CharlesB

Beim Aufruf nur git tag <TAGNAME> ohne zusätzliche Parameter erstellt Git ein neues Tag aus Ihrem aktuellen HEAD (dh dem HEAD Ihres aktuellen Zweigs). Beim Hinzufügen zusätzlicher Commits in In diesem Zweig behält der Zweig HEAD diese neuen Commits bei, während das Tag immer auf dasselbe Commit verweist.

Beim Aufruf von git tag <TAGNAME> <COMMIT> Sie können sogar angeben, welches Commit zum Erstellen des Tags verwendet werden soll.

Unabhängig davon ist ein Tag immer noch einfach ein "Zeiger" auf ein bestimmtes Commit (keine Verzweigung).

5
helmbert

Wir können ein Tag für ein Commit in der Vergangenheit erstellen:

git tag [tag_name] [reference_of_commit]

z.B:

git tag v1.0 5fcdb03
3
Sana Hameed