3-Wege-Diff (diff3) im Kontext von Git Merge-Konflikten

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

3-Wege-Diff (diff3) im Kontext von Git Merge-Konflikten

Beitrag von buhtz » 01.01.2023 16:27:02

Im Kontext von Merge-Konflikten in git repos habe ich den 3-Wege-Diff (git config merge.conflictstyle diff3) kennengelernt.

Visualisieren lässt sich das bspw. so (von hier).

Code: Alles auswählen

  ╔═══════╦══════╦════════╗
  ║       ║      ║        ║
  ║ LOCAL ║ BASE ║ REMOTE ║
  ║       ║      ║        ║
  ╠═══════╩══════╩════════╣
  ║                       ║
  ║        MERGED         ║
  ║                       ║
  ╚═══════════════════════╝
Ich verstehe allerdings die Unterscheidung zwischen LOCAL und BASE nicht. Auch nicht nach dieser Erklärung.
Bei einem Merge-Konflikt im Kontext von Git habe ich doch nur 2 "Parteien". Warum sehe ich dann hier drei und warum kann mir das helfen?
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

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

Re: 3-Wege-Diff (diff3) im Kontext von Git Merge-Konflikten

Beitrag von JTH » 01.01.2023 16:40:27

BASE ist der Ursprungszustand, von dem die Veränderungen in LOCAL und REMOTE ausgehen.

Im letzten Schritt unterscheiden sich hier alle drei, BASE, LOCAL und REMOTE:

Code: Alles auswählen

echo BASE > txt
git add txt
git commit -m BASE

git checkout -b remote
echo REMOTE > txt
git commit -am REMOTE

git checkout <default branch>
echo LOCAL > txt
git commit -am LOCAL

git merge --no-ff remote
(Wenn ich mich hier nicht grad vertue/vertippt habe.)
Manchmal bekannt als Just (another) Terminal Hacker.

Benutzeravatar
Meillo
Moderator
Beiträge: 8817
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: 3-Wege-Diff (diff3) im Kontext von Git Merge-Konflikten

Beitrag von Meillo » 02.01.2023 08:26:56

buhtz hat geschrieben: ↑ zum Beitrag ↑
01.01.2023 16:27:02
Im Kontext von Merge-Konflikten in git repos habe ich den 3-Wege-Diff (git config merge.conflictstyle diff3) kennengelernt.

[...]

Bei einem Merge-Konflikt im Kontext von Git habe ich doch nur 2 "Parteien". Warum sehe ich dann hier drei und warum kann mir das helfen?
BASE ist nur als Zusatzinformation zu verstehen, damit du sehen kannst, wie es zuvor war, bevor beide Branches ihre Aenderungen gemacht haben.

Die Erklaerung in der Manpage git-merge (Abschnitt: ``HOW CONFLICTS ARE PRESENTED'') finde ich sehr gut verstaendlich. Falls du die noch nicht gelesen hast, solltest du das tun.
Use ed once in a while!

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

Re: 3-Wege-Diff (diff3) im Kontext von Git Merge-Konflikten

Beitrag von buhtz » 02.01.2023 09:21:40

Und welches von den drei Fenstern ist den mein Ziel?

Bisher habe ich immer alles in die goldene MItte "BASE" geschoben in der Annahme, dass wäre dann die Lösung des Merge-Konflikts. Aber vermutlich war genau das meine Fehlannahme.
Ich tippe auf LOCAL, richtig?
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Benutzeravatar
MSfree
Beiträge: 10773
Registriert: 25.09.2007 19:59:30

Re: 3-Wege-Diff (diff3) im Kontext von Git Merge-Konflikten

Beitrag von MSfree » 02.01.2023 09:50:08

buhtz hat geschrieben: ↑ zum Beitrag ↑
02.01.2023 09:21:40
Und welches von den drei Fenstern ist den mein Ziel?
Das vierte :mrgreen:
MERGED

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

Re: 3-Wege-Diff (diff3) im Kontext von Git Merge-Konflikten

Beitrag von buhtz » 02.01.2023 13:26:31

MSfree hat geschrieben: ↑ zum Beitrag ↑
02.01.2023 09:50:08
buhtz hat geschrieben: ↑ zum Beitrag ↑
02.01.2023 09:21:40
Und welches von den drei Fenstern ist den mein Ziel?
Das vierte :mrgreen:
MERGED
In Debianmeld sieht man aber kein viertes. Dort gibt es nur die oberen drei.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Benutzeravatar
Meillo
Moderator
Beiträge: 8817
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: 3-Wege-Diff (diff3) im Kontext von Git Merge-Konflikten

Beitrag von Meillo » 02.01.2023 13:37:20

buhtz hat geschrieben: ↑ zum Beitrag ↑
02.01.2023 13:26:31
In Debianmeld sieht man aber kein viertes. Dort gibt es nur die oberen drei.
Das was du hier hast, ist doch ein Standardproblem. Da muss es doch dutzende Tutorials im Internet dazu geben. Ich kann mir kaum vorstellen, dass die nicht erklaeren, wie man einen Mergekonflikt mit dem Programm loest.
Use ed once in a while!

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

Re: 3-Wege-Diff (diff3) im Kontext von Git Merge-Konflikten

Beitrag von buhtz » 02.01.2023 14:15:03

Meillo hat geschrieben: ↑ zum Beitrag ↑
02.01.2023 13:37:20
Da muss es doch dutzende Tutorials im Internet dazu geben. Ich kann mir kaum vorstellen, dass die nicht erklaeren, wie man einen Mergekonflikt mit dem Programm loest.
Bei Debianmeld im diff3 Modus ist es angeblich die Mitte.

Ich habe so blöd (nochmal) gefragt, weil ich hier die Ursache für mein Merge-Problem vermutet hatte. Scheint aber nicht der Fall zu sein.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Antworten