83 Stimmen

Verwaltung von Hotfixes, wenn sich der Entwicklungszweig stark vom Master unterscheidet?

Ich verwende das Verzweigungsmodell "Git Flow" mit einem Master-Zweig und einem Entwicklungszweig. Ich arbeite an einer wichtigen neuen Version, daher unterscheidet sich mein Entwicklungszweig stark von meinem Masterzweig. Das führt immer dann zu einem Problem, wenn ich einen Hotfix im Master-Zweig machen und ihn wieder in den Entwicklungszweig einfügen muss. Es kommt fast immer zu Konflikten, und das wird zu einer echten Qual.

Wie lässt sich dies am besten bewerkstelligen? Es wäre einfacher für mich, die kleinen Hotfix-Änderungen in der Entwicklungsumgebung manuell vorzunehmen und dann alles in die Master-Version zu übertragen, wenn ich bereit bin, ohne die Master-Version wieder in die Entwicklungsumgebung zu übertragen. Ist dies möglich?

72voto

eckes Punkte 59894

Der einfachste Weg, die un peu de Übertragungen von einem Zweig zum anderen ist Rosinenpickerei .

Angenommen, Ihr Fix in master hat den Commit-Hash HASH und Sie wollen diesen Hotfix in Ihr devel verzweigen, eine git checkout devel gefolgt von einer git cherry-pick HASH . Das war's.

Wenn Sie die todos Änderungen von master in devel können Sie dies erreichen mit

git checkout devel
git rebase master

Wenn Sie das gegenteilige Szenario haben (Sie machen einen Hotfix während der Entwicklung in einer devel Zweig und wollen diese Korrektur in master vor devel wird vollständig in master ), ist der Arbeitsablauf recht ähnlich. Angenommen, der Hotfix hat den Hash HOTFIX_HASH tun Sie dies:

git checkout master
git cherry-pick HOTFIX_HASH

Jetzt ist die Übergabe in master y devel . Um dies zu umgehen, geben Sie

git checkout devel
git rebase master

und die Übertragung verschwindet aus devel da es bereits in master .

22voto

tswicegood Punkte 336

Mein allgemeiner Arbeitsablauf für diese Situation ist die Erstellung einer bug-fix Zweigstelle von master die das Problem behebt. Sobald es fertig ist, fügen Sie es wieder in master dann zusammenführen master in develop .

Dies setzt voraus, dass Ihre Fehlerbehebung fast eins zu eins mit dem zu ändernden Code in beiden Zweigen übereinstimmt. Wenn das der Fall ist, können Sie immer versuchen, eine git merge -s ours master (siehe Man-Seite ) in develop so dass die develop Zweig hat Vorrang.

Ich verwende einen ähnlichen Prozess für die Verwaltung von Fehlerkorrekturen in einem Open-Source-Projekt, an dem ich arbeite. master ist immer vor der Stelle, an der die Fehlerkorrektur angewendet werden muss, also erstelle ich einen Zweig von dem Tag, der die Korrektur benötigt, wende die Korrektur an und gebe sie frei, dann retagge ich das neue Tag und führe es in master . Dies führt zu einem Konflikt aufgrund der Versionsnummern, kann aber mit dem obigen Befehl vermieden werden.

Ich hoffe, das hilft.

8voto

Cristian Douce Punkte 3108

Normalerweise befolge ich dies Leitfaden was in den meisten Fällen recht gut passt und viele Probleme mit Konflikten vermeidet und groß Änderungen.

Wenn Sie an folgenden Themen arbeiten könnten feature Zweige und fügen Sie sie in development nur vor einer release Zweig-Erstellung (d.h. Sie bereiten tatsächlich eine Version vor)... diese Methode sollte die meisten der auftretenden Merge-Konflikte vermeiden.

Da die Änderungen in einem feature-breaking Zweig, dürfen Sie nur einmal Konflikte haben, wenn dieser feature-breaking Zweig in den Entwicklungszweig überführt wird. Und Sie könnten auch Folgendes zusammenführen development in die release Zweig jederzeit auf den neuesten Stand bringen.

Sie werden auch mit der Verschmelzung in development alle hotfix-branch Sie haben nur wenige oder gar keine Konflikte.

Der Leitfaden, den ich über den vorstehenden Link weitergegeben habe, legt großen Wert darauf, dass niemals eine Zusammenführung von development a master oder rückwärts. Bearbeiten Sie Ihre Freigaben immer über einen release Zweigstelle.

0voto

Z.Wei Punkte 3208

Das alles hängt davon ab, wie Sie GIT zur Verwaltung Ihres Codes, Ihres Veröffentlichungsplans und Ihrer Version einsetzen wollen. Die beste Praxis ist, dass Sie master Zweig, der den Code der Produktionsebene enthält, haben develop Zweig, um Ihre Entwicklung durchzuführen, haben release verzweigt von develop um Ihre anstehenden Veröffentlichungen zu bearbeiten und hotfix Zweig verzweigt von master um dringende Korrekturen für den Produktionscode durchzuführen. Daher ist die release y hotfix Zweige schließlich wieder zu BEIDEN Zweigen zusammengeführt werden master y develop um sicherzustellen, dass beide Zweige die Änderungen haben, und später, wenn develop verzweigt sich neu release diese neue Version lässt sich problemlos zusammenführen master . Und das Tagging wird immer eingeschaltet sein master .

Mit diesem Ansatz wird die release y hotfix Zweige werden zweimal zusammengeführt und der Konflikt wird manchmal beim Zusammenführen zu develop was unvermeidlich ist, wenn viele Entwicklungsaktivitäten im Gange sind develop . Kürzen Sie Ihr release o hotfix Zweiglebenszyklus könnte eine Möglichkeit sein, dieses Problem zu entschärfen. Wenn ein Konflikt auftritt, lösen Sie ihn mit beliebigen Techniken und stellen Sie sicher, dass Sie die fertiggestellten und getesteten Zweige nicht verändern. release o hotfix Code.

0voto

Liquid Core Punkte 2861

Alle Antworten waren stinkend. Meine persönliche Lösung sind mittlere Freisetzungen.

Einmal alle 3-7 Tage führen Sie eine Mikrofreisetzung durch.

Wie Sie es nennen 1.01, 1.02 und so weiter. Die nächste Version für Kunden wird 2.0 sein. Diese Zwischenversionen dürfen nur Funktionen enthalten, die stabil sind (und daher noch nicht in die Master-Version integriert wurden)

Dies ermöglicht es Ihnen, zu halten Meister und entwickeln konsequent im Laufe der Zeit und tun hotflix mit leichtem Herzen und vermeiden eine Menge Ärger

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X