Git: Soll ich eine getaggte Version oder einen Master in der Produktion auschecken?

423
AdamJeffers

Allgemeine Frage rund um Git.

Wir arbeiten in 2-wöchigen Sprints und haben einen 4-fach-Prozess:

entwickeln> Release-B-Name (Test)> Release-A-Name (Beta)> Master

Bei jedem Sprint erstellen wir einen neuen Zweig mit einem Namen (AZ).

In jedem Quartal mischen wir den RC in den Master und kennzeichnen diesen Code als produktionsbereit.

Dann holen und mischen wir auf der Produktionsbox die neueste Version von Master (durch Laufen git pull origin master), so dass in jedem Quartal die neueste und größte Version von Master ausgeführt wird . Dies war der historische Ansatz.

Frage: Soll ich den Master-Zweig oder die markierte Version des Masters auf der Produktionsbox ausführen?

Ich bin mir bewusst, dass das Ausführen mit einer getaggten Version dies in einem getrennten Zustand tut, aber ich sehe darin eigentlich kein Problem, außer wenn Sie einen Hotfix benötigen.

-1
Warum das Downvote? AdamJeffers vor 5 Jahren 0
Vermutlich weil der Frage viel Kontext fehlt. Git ist ein Versionskontrollsystem. Verwenden Sie git als Bereitstellungstool? Wenn ja warum? Und warum ist es wichtig, dass Sie sich in der Produktion in einem freistehenden Zustand befinden? Beabsichtigen Sie tatsächlich, sich in der Produktion zu engagieren (und zu entwickeln)? Bearbeiten Sie das bitte, um dies zu erklären. sleske vor 5 Jahren 2
Es ist auch möglich, dass dies vollständig von Ihrem Unternehmen abhängt, ob es sich bei den getaggten Versionen um "Produktionsversionen" handelt oder ob Produktionssysteme immer das Neueste von dem, was Sie prüfen, haben sollten. Dies ist für jemanden, der mit Ihren Gruppen- oder Unternehmensprozessen nicht vertraut ist, nicht einfach zu beantworten. Mokubai vor 5 Jahren 1
Ja, sehr gültige Punkte! Aktualisiert die Frage. AdamJeffers vor 5 Jahren 0
Vielleicht fragen Sie beim Besitzer nach, wo er seinen Code für die Produktion einfügt und was er auf prod sehen möchte. Es wird von Ihrem Projekt abhängen, daher ist es unwahrscheinlich, dass Ihnen jemand die richtige Antwort gibt, nur ein paar Vermutungen. Seth vor 5 Jahren 0
Habe die Frage aktualisiert;) AdamJeffers vor 5 Jahren 0
Danke für die Updates. Noch eine Sache: "Auf der Produktionsbox holen und mischen wir die neueste Version von Master". Warum "verschmelzen"? Wenn Sie immer nur den neuesten Master auschecken, sollte dies immer ein schneller Vorlauf sein. Warum bekommst du Zusammenführungen? Das hört sich gefährlich an ... sleske vor 5 Jahren 0
@sleske. Der Vorgang wird immer noch als Zusammenführen bezeichnet: "git merge --ff-only origin / master" TRiG vor 5 Jahren 0
@TRiG: Ja, ich hoffe, dass OP das "Zusammenführen" bedeutet. sleske vor 5 Jahren 0
@sleske und @TRig ... Ich musste das noch nicht tun, aber als ich sah, wie mein Manager den Prozess durchging, habe ich nur gesehen, wie er auf die Prod-Box gegangen ist und "git pull origin master" ausgeführt hat. Soweit ich weiß, macht das einfach ein "git fetch" und dann ein "git merge"? AdamJeffers vor 5 Jahren 0
OK, ich verstehe. Ich glaube ich verstehe jetzt. Ich werde morgen versuchen, eine Antwort zu schreiben. sleske vor 5 Jahren 1
@sleske ... super, danke! AdamJeffers vor 5 Jahren 0
Tags werden normalerweise für Releases verwendet. Und der Hauptzweig spiegelt oft einfach den aktuellen Status des Codes wider, der normalerweise freigegeben wird. Das heißt, dies ist alles wirklich willkürlich und basiert auf Ihrer internen Praxis. JakeGould vor 5 Jahren 0
@JakeGould: Ja, während Sie schreiben, hängt das vom verwendeten Prozess ab. In Bezug auf "master" sind insbesondere beide Ansätze üblich: Master für den aktuellen Status des Codes (dies ist die Standardeinstellung, die von git schwach angenommen wird) oder Master für die stabile Version ("stable master"), die z populäres [Git flow] (https://nvie.com/posts/a-successful-git-branching-model/) Modell). sleske vor 5 Jahren 0

1 Antwort auf die Frage

1
sleske

Haftungsausschluss: Ich persönlich bin mit der Verwendung von Git als Bereitstellungstool sehr skeptisch. Ein echtes Build- / Deployment-Tool bietet viele Möglichkeiten, die Git nicht ausführt: Versionsregeln, Kompilierung / Vorverarbeitung, Verwalten von Dateiberechtigungen usw. Wenn Sie Git mithilfe von Git "implementieren", müssen diese Schritte in der Regel manuell ausgeführt werden. Sie scheinen jedoch grundsätzlich mit Ihrem Bereitstellungsprozess zufrieden zu sein. Ich werde damit aufhören, darüber zu streiten.

Um Ihre Fragen zu beantworten:

Frage: Soll ich den Master-Zweig oder die markierte Version des Masters auf der Produktionsbox ausführen?

Beide können funktionieren, aber ich würde es vorziehen, eine getaggte Version zu verwenden . Die heruntergezogenen Dateien werden exakt gleich sein, es besteht also kein Unterschied. Die Verwendung einer getaggten Version ist jedoch in einigen Fällen sicherer:

  • Wenn jemand in der Zeit zwischen dem Tagging und der Bereitstellung zum Mastering bereit ist, erhalten Sie immer noch die richtige Version.
  • Wenn jemand später nur git pullin der Produktion ausgeführt werden sollte, masterwürde Git mit den Standardeinstellungen und dem ausgecheckten Status den neuesten Status von master(was auch immer das ist) abrufen. Wenn ein Tag ausgecheckt ist, ändert sich nichts.

Ich bin mir bewusst, dass das Ausführen mit einer getaggten Version dies in einem getrennten Zustand tut, aber ich sehe darin eigentlich kein Problem, außer wenn Sie einen Hotfix benötigen.

Ich hoffe wirklich, dass Sie nicht implizieren, dass Sie beabsichtigen, Hotfixes für die Produktion festzulegen (und möglicherweise sogar zu entwickeln)? Wenn ja, dann bitte nicht :-).

Wie auch immer: Ja, der abgetrennte HEAD-Status sollte kein Problem sein. Ich würde es tatsächlich als einen Vorteil betrachten, da es klar macht, dass Sie keine Dinge für die Produktion festlegen sollten. Wenn Sie wirklich das Gefühl haben, dass Sie das tun müssen, können Sie später eine Zweigstelle erstellen und auschecken, wenn Sie dies brauchen (aber bitte nicht).


Zum Schluss noch ein Rat:

Dann holen und mischen wir auf der Produktionsbox die neueste Version von master (indem Sie git pull origin master ausführen)

Selbst wenn Sie darauf bestehen, Git für die Bereitstellung zu verwenden, ist dies keine gute Idee git pull, da git pullautomatisch eine Zusammenführung ausgeführt wird, wenn zuvor der falsche Zweig ausgecheckt wurde (oder wenn Sie sogar lokale Commits haben, was Sie hoffentlich nicht tun). Durch die Zusammenführung erhalten Sie eine (ungeprüfte) Mischung von Daten aus verschiedenen Zweigen. Ich würde eher empfehlen:

git fetch git checkout MY_VERSION_TAG 

Auf diese Weise erhalten Sie genau die Dateien von MY_VERSION_TAG. Darüber hinaus empfehle ich dringend, git statusvor der Bereitstellung nach lokalen Änderungen zu suchen. Wenn welche gefunden werden, untersuchen Sie diese vor der Bereitstellung.

Danke für die ausführliche Antwort. Nicht sicher, warum jemand Sie gewählt hat ?! Wenn ich "Hotfix" sage, meine ich einfach lokal fixieren, teste es, und wenn es vorbei ist, Kirschpick in Master, der dann eingezogen werden kann. Aber wenn ich einen Tag betreibe, kann ich nicht einfach ziehen das Hotfix in, wie Sie sagen. Ich werde darüber nachdenken;) AdamJeffers vor 5 Jahren 0
@AdamJeffers: Ok, das Entwickeln von Hotfixes klingt vernünftig. Ich sehe auch kein Problem mit der Bereitstellung. Sie behandeln den Hotfix einfach wie jede andere Version (die Sie sowieso verwenden sollten): Sie markieren ihn (etwa "2018-q3-hotfix33") und checken diesen Tag aus, genau wie ich es oben beschrieben habe. sleske vor 5 Jahren 0
Ah, noch etwas: Offensichtlich sollte der Hotfix (lokal) über der aktuellen Produktionsversion erstellt werden (dh das Pro-Tag auschecken, einen Zweig darauf anlegen, dann Hotfix). Testen, implementieren und dann das Pro-Tag im Dev-Zweig zusammenführen. Kirschpflücken in der Produktion sind meiner Meinung nach sehr schlechte Praxis (weil Sie nicht das einsetzen, was Sie getestet haben). sleske vor 5 Jahren 0
Ja, das habe ich gemeint;) AdamJeffers vor 5 Jahren 0