Ich sah this Buchung, die erklärt, wie man BC3 als Diff-Tool für Subversion arbeiten ... aber was ist mit der Verwendung von Beyond Compare 3 zu tun 3-Wege-Zusammenführung/Vergleiche?Wie kann ich Beyond Compare 3 als diff3-cmd für svn verwenden?
Antwort
Um dies zu tun, erstellen Sie eine Batch-Datei namens (zum Beispiel) diff3wrap.bat, und richten Sie Ihre diff3-cmd in Ihrer SVN-Konfiguration, um darauf zu zeigen.
Die folgende diff3wrap.bat Datei wird die Aufgabe erledigen. Es erstellt einen temporären Dateinamen für die Zusammenführungsausgabe und löscht es, nachdem die zusammengeführten Inhalte wieder an SVN zurückgegeben wurden.
@ECHO OFF
SET DIFF3="C:\Program Files\BeyondCompare3\BComp.exe"
REM Subversion provides the paths we need as the last three parameters
REM These are parameters 9, 10, and 11.
REM Suitable titles for these three panes in the merge tool are in parameters 4, 6 and 8 respectively.
REM But we have access to only nine parameters at a time, so we shift our nine-parameter window
REM twice to let us get to what we need, thus changing the effective positions of the various parameters.
REM
SHIFT
SHIFT
SET MYTITLE=%2
SET OLDTITLE=%4
SET YOURTITLE=%6
SET MINE=%7
SET OLDER=%8
SET YOURS=%9
SET OUTPUTFILE=%OLDER%_%RANDOM%.merge
REM Call BeyondCompare to perform the actual merge
REM Note we give it a temporary output file and echo the output back out for SVN to use as the merged file
%DIFF3% /lefttitle=%MYTITLE% /centertitle=%OLDTITLE% /righttitle=%YOURTITLE% /outputtitle="Merge Output" %MINE% %YOURS% %OLDER% %OUTPUTFILE%
if NOT %errorlevel% == 0 goto :mergenotcomplete
REM Merge complete. Echo the output to stdout for SVN to pick up as the result, then throw away the temporary file
TYPE %OUTPUTFILE%
del /f /q %OUTPUTFILE%
exit 0
:mergenotcomplete
exit 1
Ich habe nur Erfahrung mit BC3 und TFS, also nehmen Sie das mit einem Körnchen Salz. Der 3-Wege-Merge war das einzige Feature, mit dem ich Probleme hatte. Mehr als einmal musste ich die Änderungen manuell in BC3 kopieren und einfügen, um die Zusammenführung zu beenden.
ich BC3 durch Schildkröte auf Windows verwenden. Ich kann sagen, dass die Entscheidungen, die BC3 trifft, konsistent genauer sind als Tortoise oder der SVN cli selbst. Ich erstelle auch benutzerdefinierte Profile für bestimmte Dateitypen/Muster, für die ich die Standardeinstellungen überschreiben möchte. –
Ich mag liamf die Batch-Datei, aber ich denke, es ist eine kleine zwicken nehmen könnte:
Ich habe hinzugefügt autoMerge und reviewconflicts auf den Befehlsaufruf, so dass es ohne Konflikte im Falle eines merge es nur schließt ohne Intervention - die Benutzeroberfläche wird nur angezeigt, um Konflikte zu überprüfen.
So wird die Linie in Frage:
%DIFF3% /automerge /reviewconflicts /lefttitle=%MYTITLE% /centertitle=%OLDTITLE% /righttitle=%YOURTITLE% /outputtitle="Merge Output" %MINE% %YOURS% %OLDER% %OUTPUTFILE%
Schöne Verbesserung ... Ich habe dies in meine Standard-BC3 Merge-Skript übernommen. Vielen Dank! – liamf
Hier ist eine Linux-Version des Skripts liamf, die mit SVN 1.6 funktioniert.
#!/bin/bash
MYTITLE=$4
OLDTITLE=$6
YOURTITLE=$8
MINE=$9
OLDER=${10}
YOURS=${11}
OUTPUTFILE=${MINE}.merge
/usr/bin/bcompare -solo -automerge -force -reviewconflicts -favorleft -lefttitle=$MYTITLE -centertitle=$OLDTITLE -righttitle=$YOURTITLE -outputtitle=$OUTPUTFILE $MINE $YOURS $OLDER $OUTPUTFILE
RESULT=$?
if [ $RESULT -eq 0 ] ; then
cat $OUTPUTFILE
exit 0
else
exit 1
fi
Hier ist ein Cygwin Bash-Skript, das sowohl mit Subversion 1.7 für arbeitet diff-cmd und diff3-cmd
#!/bin/bash
# Set path to BeyondCompare
bcomp=~/bin/bcomp;
function bcerrlvl() {
echo -en "$1\t";
case $1 in
0) echo "Success";;
1) echo "Binary same";;
2) echo "Rules-based same";;
11) echo "Binary differences";;
12) echo "Similar";;
13) echo "Rules-based differences";;
14) echo "Conflicts detected";;
100) echo "Error";;
101) echo "Conflicts detected, merge output not saved";;
*) echo "Error";;
esac;
return $1;
}
if [ "$1" = "-u" ];
then
# paths
left=$(cygpath --dos "$6");
right=$(cygpath --dos "$7");
# titles
titleleft="$3";
titleright="$5";
# compare command
$bcomp -title1="$titleleft" -title2="$titleright" "$left" "$right";
if [ $? -gt 0 ];
then
bcerrlvl $?;
exit $?;
else
exit 0;
fi;
elif [ "$1" = "-E" ];
then
# Get to the tenth and eleventh arguments
shift; shift;
# paths
centre=$(cygpath --dos "$7");
left=$(cygpath --dos "$8");
right=$(cygpath --dos "$9");
outext="_$(date +%s)-$RANDOM.merge";
output="$(cygpath --dos "$8")_$outext";
# titles
titlecentre=$2;
titleleft=$4;
titleright=$6;
titleoutput="Merge Output";
# compare command
$bcomp -title1="$titleleft" -title2="$titleright" -title3="$titlecentre" \
-outputtitle="$titleoutput" -automerge -reviewconflicts \
"$left" "$right" "$centre" "$output";
if [ $? -eq 0 ];
then
outfile=$(cygpath --unix "$output");
cat $outfile
rm -f $outfile
exit 0;
else
bcerrlvl $?;
exit $?;
fi;
fi;
Basierend auf dem, was das SVN Redbook dazu gesagt hat, sieht das richtig aus ... Ich werde die Antwort akzeptieren, sobald ich es überprüfen kann. – paxos1977
Ich habe es gerade getestet und es funktioniert (sobald Sie die eingestellte DIFF3-Zeile mit dem richtigen Installationspfad für Ihre Box ersetzen). –