Verwendet Mercurial immer die externen Zusammenführungstools, wenn zwei Zweige, die zusammengeführt werden, Änderungen an derselben Datei aufweisen?Mercurial- und Merge-Tools?
Oder sieht es zuerst, ob es die Datei selbst zusammenführen kann, und nur zum externen Werkzeug stochern, wenn es nicht kann?
Der Grund, warum ich gefragt habe, ist, dass ich (wieder einmal) Wieder Lesen der tutorial written by Joel Spolsky on Mercurial und eine Sache, sagt er, bei einem Vergleich, wie Subversion und Mercurial ist, dass verschmilzt:
dagegen während Wir arbeiteten separat in Mercurial, Mercurial war damit beschäftigt, eine Reihe von Changesets zu behalten. Wenn wir also unseren Code zusammenführen wollen, hat Mercurial tatsächlich eine ganze Menge mehr Informationen: Er weiß, was jeder von uns geändert hat, und kann diese Änderungen erneut anwenden, anstatt nur das Endprodukt zu betrachten und zu erraten, wie es formuliert wird zusammen.
Nur, meine Erfahrung sagt mir, dass es das externe Merge-Tool, wenn zwei Zweige Änderungen müssen die gleichen Dateien einzubinden scheint. Und macht das obige Argument nicht falsch?
Oder sollte ich interpretieren dies wie folgt:
- Subversion nur den Endzustand der beiden Zweige verbindet, und mehr Arbeit hat in einer einzigen Einheit
- Mercurial verschmilzt jede ChangeSet einzeln, was zu tun erlaubt es mit kleineren Einheiten von Änderungen zu arbeiten, mit einer höheren Chance auf Merge-Erfolg
Kann jemand etwas Licht darauf werfen?
bearbeiten: Lassen Sie mich ein Beispiel geben:
@echo off
setlocal
if exist repo rd /s /q repo
md repo
cd repo
hg init .
rem --- version 0 ---
echo 1 >test.txt
echo 2 >>test.txt
echo 3 >>test.txt
echo 4 >>test.txt
echo 5 >>test.txt
hg add test.txt
hg commit -m "v0"
rem --- version 1 ---
echo 1 >test.txt
echo 2 v1 >>test.txt
echo 3 >>test.txt
echo 4 >>test.txt
echo 5 >>test.txt
hg commit -m "v1"
rem --- version 2 ---
hg update 0
echo 1 >test.txt
echo 2 >>test.txt
echo 3 >>test.txt
echo 4 v2 >>test.txt
echo 5 >>test.txt
hg commit -m "v2"
rem --- merge ---
hg update 1
hg merge 2
Diese erste erstellt eine Datei mit folgendem Inhalt:
1
2
3
4
5
Dann ändert er es an:
1
2 v1
3
4
5
Dann geht es zurück in die erste Version (changeset) und ändert es an:
1
2
3
4 v2
5
Dann versucht er, die beiden zu verschmelzen.
Jetzt, nach der (derzeit) einzigen Antwort, sollte dies kein Problem darstellen, da die Änderungen nicht in Konflikt stehen.
An diesem Punkt wird jedoch Beyond Compare (mein externes Merge-Tool) aufgerufen.
Bitte sehen Sie meine bearbeitete Frage –
Entschuldigung, ich habe bearbeitet, während Sie auch waren. Sollte jetzt klarer sein. Die Kriterien für den Aufruf von mergetool sind Änderungen an derselben Datei, was völlig in Ordnung ist. –