In unserem Team verwenden wir Git als Quellcodeverwaltung. Wir haben mehrere Codebereiche, die fast unabhängig sind, sich jedoch teilweise überschneiden. In letzter Zeit haben wir Workflows und Ansätze zur Verwendung der Quellcodeverwaltung erörtert. Eine Beschwerde, die auftritt, wenn ich die Verwendung eines Feature-Branch-Workflows bewerbe, ist, dass Personen häufig auf komplizierte Zusammenführungskonflikte stoßen, die sie falsch lösen. Mit "kompliziert" meine ich "nicht offensichtlich, wie es gelöst werden soll". In Anbetracht dessen werden andere Workflows aktiver genutzt, beispielsweise ein auf Pull Rebase basierender Workflow.
Als Befürworter des Feature-Branch-Ansatzes erhalte ich die Beschwerde nicht wirklich. Ja, Sie müssen Ihre lokalen Feature-Zweige von master oder wo auch immer auf dem neuesten Stand halten, aber das ist ungefähr das einzige wirkliche Problem, das ich sehe. Ich denke, wenn Ihre Zusammenführungen immer kompliziert sind und Sekundäreffekte haben können, dann ist das eher ein Teamwork-Problem als ein Git-Problem.
Habe ich recht, wenn ich das denke? Sind komplizierte Zusammenführungskonflikte ein Zeichen für etwas Gutes oder Schlechtes?
quelle
Antworten:
Es ist nicht unmöglich, dass das Problem Ihr Code ist. Wenn Ihre Codebasis viele Beziehungen zwischen Modulen hat, wird jede Änderung überall Ranken haben und jeder Entwickler interagiert mit dem Code eines anderen, es wird ein Albtraum.
Ich würde eher denken, dass Sie dies zuerst auf andere Weise bemerken würden, aber es ist möglich, dass Sie so daran gewöhnt sind, dass Sie es nicht mehr sehen können.
quelle
Ich bin an den Workflow "Fetch-Rebase-Push" gewöhnt. Welches ist eigentlich der erste, primitivste Workflow, der in Ihrem Tutorial beschrieben wird? Hier sind die Vorteile:
Nun zu komplizierten Zusammenführungskonflikten. Ich verstehe nicht, wie man sowohl häufige als auch komplizierte Verschmelzungen erleben kann . Komplikationen entstehen dadurch, dass man lange Zeit nicht mehr rebasiert / kirscht und einen Monat lang an dieser Funktion arbeitet.
Ich persönlich würde es vorziehen, mit häufigen, einfachen Zusammenführungskonflikten (eigentlich Rebase-Konflikten) umzugehen, anstatt mit seltenem, allumfassendem Zusammenführungshorror.
quelle
Zusammenführungen und Neuzusammenlegungen sollten genau dieselben Konflikte verursachen wie die Konflikte, die ein Mensch lösen muss (dh zwei Entwickler, die dieselbe Codezeile ändern). Bei anderen Konflikten sind Zusammenführungen in der Regel sauberer, da Sie die SHA-1 von Commits nicht überall ändern. Ich bin mir nicht sicher, wie Sie es schaffen, in einen Zustand zu gelangen, in dem Zusammenschlüsse mehr Konflikte verursachen als Rebases, aber es ist sicherlich ein Zeichen dafür, dass der Workflow einiger Leute durcheinander ist und sie wahrscheinlich mehr Schulung benötigen, wie Git funktioniert. Entfernen sie die Merge Commits anderer Leute, wenn sie ihre lokalen Rebases durchführen, oder so ähnlich?
Der Vor- und Nachteil der Pull-Rebase-Methode ist, dass sie zentralisierten Workflows sehr ähnlich ist, an die viele Menschen gewöhnt sind. Sie müssen die Verzweigung nicht verstehen, um sie zu verwenden.
In jedem Fall ist es durchaus möglich, einen Feature-Branch-Workflow nur lokal durchzuführen, wenn Sie andere Personen nicht dazu bringen können, sich anzumelden.
quelle
Das Projekt, an dem ich arbeite, hat von Zeit zu Zeit diese Art von Problem und es scheint sich aus ein paar Faktoren zu ergeben:
Ich bin an dem Potenzial von Semantic Merge interessiert , bei einigen dieser Probleme Abhilfe zu schaffen, aber das nützt natürlich nur, wenn Sie in einer Sprache arbeiten, die es analysieren kann, und wenn ich Ich benutze es, daher kann ich nicht für seine Wirksamkeit bürgen.
quelle
Sofern Entwickler historische Festschreibungen nicht ändern (anstelle von reinen Zusammenführungen), sind die Konflikte in einem Git-Modell vom Typ Feature-Workflow ein Zeichen für eine eng gekoppelte Codebasis (/ brandneue Codebasis) oder eine überlappende Feature-Zuweisung.
quelle
Sie haben einen Hauptzweig (Master) und jeder arbeitet in seinem Feature-Zweig.
Die Arbeit in den Feature-Zweigen kann einige Stunden bis einige Monate dauern.
Von Zeit zu Zeit führt jemand sein Änderungsset zurück in den Hauptzweig. Ihr Teamleiter muss sicherstellen, dass jeweils nur eine Person die Zusammenführung rückgängig macht. Sobald dies geschehen ist, müssen Sie die Zusammenführung vom Hauptzweig in Ihren Feature-Zweig weiterleiten. Sobald jeder eine Vorwärtszusammenführung ausführt, kann es einer anderen Person gestattet werden, die Zusammenführung in den Hauptzweig rückgängig zu machen. Andernfalls werden zu viele Änderungen rückgängig gemacht und es kommt zu unzähligen Zusammenführungskonflikten bei der Vorwärtszusammenführung.
Um die Terminologie zu verdeutlichen, meine ich mit "Zusammenführen umkehren" das Zusammenführen vom Feature-Zweig zum Hauptzweig und mit "Zusammenführen umkehren" das Zusammenführen vom Hauptzweig zum Feature-Zweig. Aufgrund meiner bisherigen Erfahrungen ist es wahrscheinlich, dass bei der umgekehrten Zusammenführung mehr Zusammenführungskonflikte auftreten als bei der Vorwärtszusammenführung.
quelle
Zwei Dinge, die helfen können: Erstens: Vermeiden Sie Tools, die eigenständig Änderungen vornehmen. Zwei Entwickler, die unterschiedliche Registerkarteneinstellungen verwenden, sind ein Rezept für eine Katastrophe. Zweitens, nehmen Sie Änderungen an verschiedenen Orten vor. Ein Problem tritt beispielsweise auf, wenn drei Entwickler Code am Ende derselben Datei hinzufügen - viel besser, wenn sie Code an verschiedenen Stellen hinzufügen.
quelle