Was sind A, B und C in KDIFF-Zusammenführung?

78

Warum habe ich drei Möglichkeiten, wenn ich meinen Code mit dem eines anderen zusammenführe? Sollte es nicht nur meinen Code, den Code der anderen Person und die Ausgabe unten geben? Die Dokumentation für KDIFF hilft mir nicht zu verstehen.

geschmuggelte Pfannkuchen
quelle

Antworten:

35

Klingt so, als würden Sie eine Drei-Wege-Zusammenführung durchführen . A sollte also die Basisrevision sein, auf der B und C basieren, B gehört ihnen und C gehört Ihnen (ich glaube, B und C könnten jedoch das Gegenteil sein).

Eldarerathis
quelle
2
Worum geht es in der Basisrevision? Hilft das in einigen Fällen?
geschmuggelt
6
@ user464095: Für KDiff glaube ich, dass es die Revision ist, die sowohl B als auch C modifizieren. Sie können also B mit seiner Basis (A), C mit seiner Basis (auch A) und die Änderungen in B und C miteinander vergleichen. Auf diese Weise können Sie Konflikte lösen, indem Sie die Änderungen in B oder C verwenden oder zum Original zurückkehren (A).
Eldarerathis
2
Ich verstehe immer noch nicht, können Sie noch etwas näher erläutern?
geschmuggelt
12
Stellen Sie sich einen Fall vor, in dem Sie und ein anderer Entwickler widersprüchliche Änderungen am selben Code vornehmen. In der Regel ist es hilfreich, den Kontext der Originaldatei zu haben, damit Sie wissen, ob einer von Ihnen die vorherige Funktionalität verletzt. Sie können Ihre Datei mit der des anderen Entwicklers unterscheiden, Konflikte lösen und sie dann mit dem Original unterscheiden, aber ein Drei-Wege-Diff führt dieselbe Funktion in weniger Schritten aus.
Eldarerathis
Wie @gbarry in diesem verwandten SO-Thread erklärt , ist die BASE-Revision diejenige, die Sie zuletzt aus dem Repository heruntergeladen haben, zumindest mit Subversion. Er spricht auch über das Bearbeiten von Konflikten und wie sich dies auf die BASE- und HEAD-Revisionen auswirkt.
hotshot309
75

A bezieht sich auf die Version, auf der Ihr Zusammenführungsziel basiert. Wenn Sie von Zweig zu Amtsleitung zusammenführen, ist 'A' die vorherige Amtsleitungsversion.

B ist das, was Sie derzeit in Ihrem lokalen Trunk-Ordner haben, einschließlich lokaler Änderungen.

C ist die Version, die Sie über B zusammenführen möchten.

Th 00 mÄ s
quelle
B bedeutet vor dem Stash anwenden ODER nach dem Stash anwenden?
Wohlfühlen und Programmieren
3
Versteckte Änderungen werden während der Zusammenführung nicht angewendet. Sie bleiben so lange versteckt, bis sie explizit nicht mehr aufbewahrt werden.
Do 00 m
11

Eine (BASE) -> Originaldatei, die sich derzeit im Remote-Repo befindet.
B (LOKAL) - Ihre Datei. Dies zeigt nur Ihre Änderungen im Vergleich zu A.
C (REMOTE) -> Ihre Datei. Dies zeigt nur ihre Änderungen im Vergleich zu A.

Wenn sich die Änderungen in unterschiedlichen Codezeilen befinden, übernehmen Sie sowohl B als auch C. Wenn sich die Änderungen in denselben Codezeilen befinden (Konflikt), übernehmen Sie entweder B oder C.

Nikhil Vartak
quelle
11

A ist Ihre Elternrevision mit B und C als Kind .
Das heißt, B enthält die Änderungen, die Benutzer1 / Repo1 an A vorgenommen haben, und C enthält auch die Änderungen an A, jedoch von einem anderen Benutzer ( Benutzer2 / Repo2) ).

kdiff bietet Ihnen die Möglichkeit, entweder die Modifikation von b oder c (oder beide) oder vom übergeordneten Element auch 'A' auszuwählen.

RollerCosta
quelle
3

Wenn ich das tat git rebase, war meine Beobachtung, dass: C - das ist, was in my_branch lokal ist (dh in meinem Editor gesehen wurde, bevor die Rebase begann und Konflikte auftraten). B-Zweig Ich habe my_branch über (zum Beispiel Master-Zweig) A-Basis-Revision von B & C neu basiert (was mir in diesem Fall nicht allzu wichtig war).

Aleks Tkachenko
quelle
Ja, es scheint, dass B & C zwischen dem Zusammenschluss und dem Rebase umgekehrt ist
pdem