git: Größere merge Konflikte in Python code lösen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
buhtz
Beiträge: 1205
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

git: Größere merge Konflikte in Python code lösen

Beitrag von buhtz » 01.01.2023 14:05:56

Ich bin jetzt das erste Mal in der Situation, dass ich einen develop (bzw., release) branch, der über mehrere Monate gewachsen und entwickelt wurde, zurück nach "main" mergen muss.

Dabei entstehen natürlich merge Konflikte die ich lösen muss.
Git/diff nimmt keine Rücksicht auf Python-Semantik, sondern sieht wohl nur Textzeilen.
Konflikte werden in der Datei ja mit "<<<<<<< HEAD" usw dargestellt.

Mein Problem ist, dass einige Dateien hier derart zerschnitten werden, dass es aus Python Sicht eigentlich keinen Sinn mehr ergibt. Nachvollziehen kann ich nicht, wie git/diff hier auf Konflikte kommt. Es geht hier nicht um einige Zeilen, sondern die Konfliktblöcke sind über 100 Zeilen groß. Die Datei hat insgesamt ca 2500 Zeilen.

Da ich in dem Projekt der einzige Entwickler bin, kann ich ziemlich sicher sein, dass ich ich lieber nur den "develop/release" Code haben möchte und die Konflikte mit dem alten "main" Code ignoriert werden können.

Gibt es einen Zauberbefehl (ohne sed/regex und Co), mit dem ich ausdrücken kann: "Ignoriere Konflikte, nimmt einfach Branch X'?

EDIT: Tut mir leid, meine Frage war mal wieder etwas schwammig. Mir geht es hier weniger, um konkrete technische Vorschläge oder Anleitungen, sondern mehr um eure eigenen Erfahrungen als Entwickler. Stellt es auch vor als "Entwickler treffen sich an der Kaffeemaschine" (oder Bällebad). :mrgreen:

EDIT2: Ich "stochere" mit Debianmeld in einer diff3 Ansicht in den Code-Versionen herum und merke jetzt beim testen, das alles futsch ist. Die Konflikte sind derart groß, dass ich keinen Überblick habe. Dabei ist es doch nur ein 1-Mann Miniprojekt. Wie macht "ihr Großen" das?! :mrgreen: :hail: Ich mache jetzt einen reset und versuche die "theirs" Strategie beim mergen.
Zuletzt geändert von buhtz am 01.01.2023 14:57:53, insgesamt 3-mal geändert.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

JTH
Moderator
Beiträge: 3077
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: git: Größere merge Konflikte in Python code lösen

Beitrag von JTH » 01.01.2023 14:35:17

Nur als Anhaltspunkt für weiteres Nachschlagen: Es gibt verschiedene Mergestrategien. Hab sie noch nie gebraucht/benutzt, mehr kann ich dir dazu nicht sagen.

Zusätzlich kann man, ohne spezielle Mergestrategie, einzelne Dateien im Ganzen von diesem oder jenem Branch in den Merge übernehmen: „Git: Handling Merge Conflicts Using "Ours" and "Theirs"“.
Manchmal bekannt als Just (another) Terminal Hacker.

buhtz
Beiträge: 1205
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: git: Größere merge Konflikte in Python code lösen

Beitrag von buhtz » 01.01.2023 15:18:18

Puh... Auch ein git merge --squash -X theirs release hilft nicht und macht die Situation nur schlimmer.
Ich glaube ich brauche mal ne Pause und muss dann wirklich zeilenweise rangehen. Ich sehe keine andere Lösung.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

buhtz
Beiträge: 1205
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: git: Größere merge Konflikte in Python code lösen

Beitrag von buhtz » 01.01.2023 16:18:49

Also eine gute Lösung ist das nicht, aber ich habe es jetzt so gemacht. Da ich davon ausgehe, dass alles aus "release" (also theirs) übernommen werden kann, habe ich diese Strategie verfolgt. Wie gesagt, hat es bei mir nicht funktioniert, dies in einem Rutsch zu erledigen mit git merge --squash -X theirs release. Scheinbar verstehe ich diesen Befehl falsch.

Also habe ich einfach einen klassischen merge gemacht. Dann habe ich für jede Konfliktdatei explizit die Version des zu mergenden Branches ausgechecked und als gelöst markiert.

Code: Alles auswählen

git checkout myconflict.py --theirs
git add myconcflict.py
Tests laufen durch.

Ich werde darüber nachdenken meine Dateien noch kleiner zu machen und evtl. sub-module Einführen die implizit importiert werden.

Was ich weiterhin nicht nachvollziehen kann ist, warum überhaupt Konflikte aufgetreten sind. Meiner Erinnerung nach, wurde gerade die eine betroffene große 2500 Zeilen Datei in "main", während der Lebensdauer von develop/release gar nicht verändert. Weshalb ein merge eigentlich durchlaufen sollte. Aber evtl. trügt mich meine Erinnerung da auch.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Benutzeravatar
shoening
Beiträge: 914
Registriert: 28.01.2005 21:05:59
Lizenz eigener Beiträge: MIT Lizenz

Re: git: Größere merge Konflikte in Python code lösen

Beitrag von shoening » 02.01.2023 09:12:05

Hi,

wenn Du der einzige Entwickler bist, und Du den alten Branch eigentlich auch nicht mehr brauchst, könntest Du die Branches
mittels git branch -m umbenennen und damit den „aktuellen“ branch zu Deinem „main“-Branch machen.

Nur so eine Idee ...

Viele Grüße und ein gutes neues Jahr
Stefan
Bürokratie kann man nur durch ihre Anwendung bekämpfen.

Antworten