Ich habe viele Ratschläge zu Git-Verzweigungsmodellen erhalten, und die gängigste Meinung scheint zu sein, dass es eine schlechte Idee ist, Änderungen direkt in der Master-Verzweigung vorzunehmen.
Einer unserer Mitarbeiter ist sehr froh, Änderungen direkt in der Hauptniederlassung vornehmen zu können, und trotz mehrerer Gespräche ist es unwahrscheinlich, dass dies geändert wird.
Zum gegenwärtigen Zeitpunkt kann ich einen Mitarbeiter, der eine schlechte Praxis ist, nicht davon überzeugen, direkt am Meister zu arbeiten, aber ich möchte die Dinge verstehen, die mit seiner Arbeitsweise in Konflikt stehen, um zu wissen, wann ich noch einmal darüber nachdenken muss dieses Problem.
version-control
git
svn
branching
linuxunil
quelle
quelle
Antworten:
Es gibt verschiedene Probleme, wenn Commits direkt an Master gesendet werden
quelle
Erklären Sie ihm, dass für neue Funktionen ein eigener Entwicklungszweig erforderlich ist, der in einer Testumgebung bereitgestellt werden kann, bevor er in die Produktion übernommen wird.
Andernfalls befinden Sie sich in einem fortwährenden Zustand der halbfertigen Funktionen. Sie können keine halbfertigen Features für die Produktion bereitstellen. Wenn Sie also direkt am Master-Zweig arbeiten, müssen alle anderen darauf warten, dass Sie Ihr Feature fertig stellen, bevor die Änderungen anderer in die Produktion gehen können, einschließlich Fehlerkorrekturen.
Durch die Verwendung unabhängiger Zweige für Features kann jedes neue Feature unabhängig von den anderen getestet und bereitgestellt werden.
quelle
Der Master sollte möglicherweise lösbar sein. Zeitraum. Es sollte keine halbfertige Arbeit im Master geben (es sei denn, sie ist mit einem Feature-Flag deaktiviert)
Nachdem dies gesagt wurde, habe ich gesehen, dass einige Teams ihren Fluss erschweren.
Die Nichtverwendung von PR bei der Integration in Master ist ein Fehler, da Entwickler nicht die Möglichkeit haben, zu entscheiden, wann die Integration stattfindet.
Ein einzelner Entwicklungszweig bringt sehr wenig Wert. Normalerweise kompliziert es die Dinge nur. Viele Feature-Zweige bringen viel Wert.
Das Erstellen von Zweigen für jede Umgebung (Entwickler, Test, Produkt) ist ein Fehler. Dies ist für git nicht möglich und sollte von der Release-Pipeline behandelt werden. Der exakt gleiche Build sollte für alle Umgebungen bereitgestellt werden, was unmöglich ist, wenn für jede Umgebung Zweige vorhanden sind.
Wenn ein Feature so groß ist, dass es in ein oder zwei Tagen nicht erledigt werden kann, sollten alle Arbeiten an einem Feature-Zweig in separaten Zweigen ausgeführt und in PR integriert werden.
quelle
quelle
Zunächst möchte ich darauf hinweisen, dass in git jede
pull
Operation im wahrsten Sinne des Wortes eine Verzweigungsoperation und jedepush
eine Zusammenführung ist. Dermaster
On-Developer-Rechner ist ein völlig separater Zweig desmaster
On-Central-Repo, den Sie gemeinsam nutzen, und aus technischer Sicht gleichberechtigt. Ich werde gelegentlich meine lokale Version umbenennenupstream
oder so, wenn es meinen Zwecken besser entspricht.Ich weise darauf hin, weil viele Unternehmen der Meinung sind, dass sie Niederlassungen effektiver nutzen als Ihr Kollege. In Wirklichkeit tun sie jedoch nicht viel mehr, als einen zusätzlichen Namen für eine Niederlassung zu erstellen, der ohnehin nicht im Verlauf gespeichert wird. Wenn Ihr Kollege Features in einem atomaren Commit festschreibt, ist das Zurücksetzen genauso einfach wie das Zusammenführen eines Feature-Zweigs. Die überwiegende Mehrheit der Feature-Zweige sollte ohnehin sehr kurzlebig sein und häufig zusammengeführt werden.
Davon abgesehen sind die Hauptnachteile seines Arbeitsstils zweierlei. Erstens ist es sehr schwierig, an einem noch nicht abgeschlossenen Feature zusammenzuarbeiten. Es ist jedoch nicht schwierig, eine Zweigstelle genau zu den Zeitpunkten zu erstellen, zu denen eine Zusammenarbeit erforderlich ist.
Zweitens ist eine Überprüfung vor dem Zusammenführen sehr schwierig. In diesem Punkt müssen Sie ihn eigentlich nicht überzeugen. Sie können ein Tool wie github, gerrit oder gitlab übernehmen und Pull-Request-Code-Überprüfungen und bestandene automatisierte Tests für alle Zusammenführungen anfordern. Wenn Sie so etwas nicht tun, nutzen Sie git ehrlich gesagt nicht mit vollem Potenzial, und es ist kein Wunder, dass Ihr Kollege dieses Potenzial nicht sieht.
quelle
pull
neuer Zweig erstellt oder wiepush
ein Zusammenführungsvorgang sein würde. Vielmehr ist einepull
ist ganz wörtlich ein ,fetch
gefolgt von einemmerge
!master
als eine andere Branche ansehen könnteorigin master
. Technisch gesehen handelt es sich um verschiedene Zweige auf zwei verschiedenen Fernbedienungen, von denen jede ihre eigene Geschichte hat.pull
: Vorher: zwei Zweige, die möglicherweise auf unterschiedliche Festschreibungen verweisen - Nachher: zwei Zweige, die auf gleichwertige Festschreibungen verweisen - Keine Zweige erstellt, daher würde ich es keine "Verzweigungsoperation" nennen. Wenn einer der beiden Befehle, würde ich das aufrufenpush
, weil es möglicherweise einen neuen Zweig in der Fernbedienung erstellt. Was es nicht tut, ist eine Verschmelzung.In anderen Antworten wurden bereits verschiedene Vorteile genannt (isolierte Funktionen, immer versandbarer Code auf dem Master usw.), wenn NICHT direkt auf dem Master gearbeitet wird.
Für mich scheinen Sie ein anderes Problem zu haben. Offensichtlich haben Sie keinen Entwicklungsprozess, der von all Ihren Entwicklern genehmigt oder verwendet wird (oder der von Ihrem Entwickler ignoriert wird).
Haben Sie Feature-Zweige, die zum Master zusammengeführt werden, oder haben Sie auch andere Release-Zweige oder verwenden Sie einen völlig anderen Prozess?
"Verwenden Sie nicht den Master-Zweig" ist nicht ausreichend.
quelle
Dies lässt mich glauben, dass es weitere Probleme gibt. Das Arbeiten am Master oder nicht ist größtenteils Teil einer größeren Philosophie darüber, wie, was und wann Sie Produkte veröffentlichen.
Also in Verbindung mit "Sie sollten nie am Master arbeiten", haben Sie Tests der Funktionen, testen Sie die Arbeit des jeweils anderen, überprüfen Sie den Code des jeweils anderen. Abnahme- und Integrationstests.
Wenn Sie keines der oben genannten haben und es nur tun, um "do git" zu tun, können Sie genauso gut am Meister arbeiten.
quelle
Es gibt keine "schlechte Praxis", direkt an der Niederlassung zu arbeiten. Sie müssen sich jedoch entscheiden, was Ihren Prozess am besten unterstützt:
Frage 1: Sollte Ihr Master den aktuellen Release-Stand Ihrer Software darstellen? Dann sollten Sie einen globalen Entwicklungszweig einführen und die Entwicklung am Ende einer Release-Entwicklung zusammenführen.
Frage 2: Möchten Sie einen Codeüberprüfungsprozess durchführen lassen? Dann sollten Sie "Feature-Zweige" haben, die über Pull-Anforderungen in Master-Zweige (oder, falls vorhanden, in Entwicklungszweige) eingebunden werden.
Frage 3: Müssen andere Entwickler den Zwischencode-Status freigeben, der noch nicht in der Produktion (oder im Test) veröffentlicht werden soll? In diesem Fall entwickelt mehr als ein Entwickler ein Feature. Dann sollten Sie "Feature Branches" einführen.
quelle