![]() |
Versionsverwaltung - zwei große Branches zusammenführen, aber wie?
Bald ist es soweit und ich muss zwei Branches zusammenführen.
Ich habe einen Hauptbranch in dem ich arbeite, einen weiteren in dem ich Neuerungen ins Programm einbaue und einen master Branch. Mein Neuerungen-Branch unterscheidet sich mittlerweile sehr stark vom Hauptbranch. Es gibt so gut wie keine Unit im Programm die ich nicht geändert habe. Wie führe / merge ich beide Branches ohne Kopfschmerzen, Hunderten von Konflikten und einem eventuellen Datenverlust? Mein Hauptbranch liegt mittlerweile 17 Commits und weitere 53 geänderte noch un-committete Dateien zurück. |
AW: Versionsverwaltung - zwei große Branches zusammenführen, aber wie?
Schwierig. Hast du mal ein "git merge" laufen lassen, um zu gucken ob es überhaupt so viele Konflikte gibt?
Die Möglichkeiten sehe ich grob wie folgt: 1) Hauptbranch einstellen, Neuerungen als nächste Version bringen. 1a) Du kannst den Merge einfach lösen, indem du stumpf eine Seite nimmst. Ist nachher leider nicht so transparent. 1b) Du benennst den Hauptbranch um in "Version 1.2" (oder was es inzwischen ist) und ernennst den anderen zum neuen Hauptbranch. 2) Durchbeißen und alle Mergekonflikte einzeln lösen Um die auch Tipps zu geben, so etwas in Zukunft zu vermeiden: 1. Besser sind viele kleine Commits. "53 geänderte noch un-committete Dateien" wären für mich schon per se ein Alptraum. Sowas kommt vielleicht mal vor, wenn man eine Unit umbenannt hat - dann sollte man aber schnell einen commit machen :wink: 2. Viele Feature-Branches statt eines großen. Du kannst die Bugfixes für deinen Hauptbranch ja in einem kleinen Branch machen, dort hinein mergen und dann (nach eventuellen Anpassungen) auch in den Neuerungen-Branch. |
AW: Versionsverwaltung - zwei große Branches zusammenführen, aber wie?
Zitat:
zu 2 - ich arbeite an einem einzigen Feature aktuell. Ist aber leider ein Monster-Teil. Ich arbeite mit SmartGit. Kann irgendwas gewaltig schief gehen, wenn ich mal nur zum Spaß Feature mit Haupt mergen möchte? |
AW: Versionsverwaltung - zwei große Branches zusammenführen, aber wie?
Naja mit GIT kannst du ja prinzipiell immer wieder zurück gehen. Was du nicht machen solltest, wäre ein Push auf ein evlt. vorhandenes remote Repository. Denn dort wird es schwierig bis unmöglich, ungewollte Änderungen wieder rauszunehmen.
Was ich in solchen Fällen oft mache in denen ich mir unsicher bin ist, dass ich mir ein Backup des Projektordners mache und dann (in der Kopie oder eben im Original) den Test durchführe. Wenn danach noch alles funktioniert, dann ist alles wunderbar. Wenn nicht, wird eben das Backup wiederhergestellt. |
AW: Versionsverwaltung - zwei große Branches zusammenführen, aber wie?
Zitat:
Erst letzte Woche habe ich git diff --shortstat ausgeführt. Schon dutzende Male gemacht aber dieses mal ratterten die Dateinamen nur so durch die Konsole und Delphi meckerte dann, dass sich Dateien geändert hätten (das waren nach ein paar Prüfungen aber nur Datumswerte wie letzter Zugriff, Modifikation). Seit dem bin ich vorsichtiger. |
AW: Versionsverwaltung - zwei große Branches zusammenführen, aber wie?
Schief gehen kann erstmal nichts, Du kannst ja immer noch zurück. Andererseits scheinst Du aber noch nicht so ganz auf git-Linie zu arbeiten. Versuch möglichst oft zu committen, zB nach jedem Refactoring, jedem Bugfix etc. Du musst ja nicht alles gleich pushen, falls Du nicht alleine an dem Projekt arbeitest. Aber häufige commits sind das A und O.
Sherlock |
AW: Versionsverwaltung - zwei große Branches zusammenführen, aber wie?
Zitat:
Mein aktueller Refactor dauert schon 20 Committs und Hunderte Änderungen. |
AW: Versionsverwaltung - zwei große Branches zusammenführen, aber wie?
Demnächst steht mein großer Merge an.
Ich habe eben noch eine andere Idee gehabt, wie ich das ohne Probleme machen kann. Was sagt ihr dazu? Branches: dev, featureX, master. featureX ist etwa 30 commits weiter als dev und master. Ich bleibe in featureX, kopiere das gesamte Projektverzeichnis, checke dev aus, überschreibe das dev-Projektverzeichnis mit dem featureX-Projektverzeichnis und commite die Änderungen als meinen eigenen manuellen Merge. |
AW: Versionsverwaltung - zwei große Branches zusammenführen, aber wie?
Ganz ehrlich? Was bringt dir ein neuer Branch, wenn du den alten sowieso überschreiben willst? Beim Überschreiben der Dateien gehen dir sämtliche Änderungen im Dev Branch verloren. Dann hättest du den FeatureX Branch auch nicht anlegen müssen. Wenn du sowieso alle Änderungen von Dev überschreiben bzw. FeatureX den Vorrang lassen willst, dann mach ein git merge FeatureX aus dem Dev Branch heraus. Laut deiner Logik dürfte dann auch kein Merge Conflict entstehen. Falls doch, siehst du wenigstens, wo du evtl. Änderungen im Dev Branch nicht mehr beachtet hast. Das kann aufwendig sein, aber immer besser als sich die Arbeit von einigen Tagen zunichte zu machen.
|
AW: Versionsverwaltung - zwei große Branches zusammenführen, aber wie?
Ich fahre seit einigen Monaten zweigleisig. Ich möchte regelmäßige Updates nicht vernachlässigen und dafür ist der dev Branch da. Der featureX Branch bekommt alles einverleibt, was ich seit einigen Monaten einbaue aber noch nicht reif für das wilde WWW ist.
Der dev branch soll schon noch der Hauptbranch nach master sein. Den featureX branch lösche ich, sobald das erledigt ist was ich da mache. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz