Ich habe gelesen , Git Verzweigen und Markieren Best Practices und git Tagging Kommentare - Best Practices , aber ich habe keine direkte Antwort auf etwas , sehe ich für eine lange Zeit gefragt haben:
Warum hat Git Tags? (statt nur Zweige)
Sie scheinen Bürger zweiter Klasse zu sein oder zumindest "anders". Sie werden nicht gepusht, es sei denn, Sie geben dies explizit an. Das Löschen von Remote-Tags führt nicht zum Löschen in nachgeschalteten Repos.
Dieser letzte Punkt war kürzlich ein Problem, als jemand eine Reihe von Mülletiketten mit Tonnen von Commits von einem anderen Repo schob. Wir könnten sie stromaufwärts löschen und die Commits überprüfen, aber das würde sich nicht verbreiten, und wenn jemand das nächste Mal ein Tag mit schob git push --tags
, würden sie diese Müll-Tags und Commits zurückweisen. Also mussten wir sicherstellen, dass alle sie löschten.
Wann und warum sollte ich ein Tag anstelle eines Zweigs verwenden?
Antworten:
Dies geschieht absichtlich .
Ich bin nicht mit der Antwort von lxrec einverstanden, dass Git schlechte Standardeinstellungen hat. Wenn Sie der Mailingliste folgen, können Sie sehen, dass Git-Entwickler sich tatsächlich um vernünftige Standardeinstellungen kümmern. Wäre es sinnvoll,
--ff-only
als Standard zu haben ? Das glaube ich nicht.Tags ermöglichen das Erstellen von Anmerkungen für Ihre eigene lokale Entwicklungskopie. Ich möchte nicht, dass meine
why_does_it_break_here
undtodo_fix_formatting
Tags ohne meine Zustimmung gepusht werden (dies sind keine tatsächlichen Tag-Namen). Das Markieren einer Version tritt dagegen seltener auf, und es ist sinnvoll, einen expliziten Push zu erfordern (oder einen Alias zu verwenden).Ich sehe keinen großen Unterschied zwischen Tags und Zweigen hinsichtlich des Verhaltens von Push / Fetch. Wenn in Ihrem Beispiel die Garbage Tags Verzweigungen gewesen wären, würde sich das Löschen wie beabsichtigt verbreiten?
Allgemein gesagt:
quelle
git push --tags
, lokale Tags jedoch nicht. Es ist schon eine Weile her, dass ich Git im Zorn benutzt habe, das war lange vor Git 1.0.1) Warum sind Git-Tags Bürger zweiter Klasse?
Weil Git leider viele schlechte Standardeinstellungen hat. So sehr ich es auch mag, es ist einfach kein sehr für Anfänger geeignetes oder intuitives Werkzeug. Ziemlich jeder muss Git-Konfigurationen oder Aliase oder Skripte einrichten, die etwa ein Dutzend der - Optionen (wie --ff-only) verwenden, damit sich Git so verhält, wie er es eigentlich möchte. Tags sind nur ein weiteres Beispiel.
2) Warum sollte ich ein Git-Tag anstelle eines Zweigs verwenden?
Ein Zweig soll ein Commit markieren, über das Sie andere Commits ausführen. Wenn Sie einen neuen Commit für diesen Zweig durchführen, "verschiebt" sich der Zweig selbst so, dass er auf den neuen Commit zeigt.
Ein Tag hingegen markiert ein Commit und markiert dann dasselbe Commit so ziemlich für immer (theoretisch). Die häufigste Verwendung ist das Kennzeichnen von Commits mit ihren offiziellen Release-Versionen, wenn Sie eine neue Version für die Produktion bereitstellen.
Wir verwenden sowohl Zweige als auch Tags für unsere Release-Versionen. Der Zweig repräsentiert lediglich die Haupt- / Nebenversion, während die Tags Patch- / Build-Versionen innerhalb dieser Haupt- / Nebenversion angeben. Wenn wir also einen Bugfix auf eine alte Version anwenden müssen, wählen wir einfach das Bugfix-Commit vom Master in den entsprechenden Zweig aus und kennzeichnen das neue Commit mit der neuen Versionsnummer, die es während der Bereitstellung erhält.
quelle