2016-04-26 11 views
1

Ich traf die folgende Situation:Wie behandelt man Probleme mit Subversion-Vorfahren beim Zusammenführen und "Ignore Ancestry" nur, um die Situation zu verschlimmern?

F deleted  F added 
    +-----X------------X--------+-- 
^      ^| 
    |  Branch A   | | 
    |       | | 
    |       | v 
+-+----------------------+----+-+-------+-> 
         |    | 
         | Branch B | PROBLEM 
         |    v 
         +----------------> 

Branch A wurde Stamm erstellt wird. In diesem Zweig wurde eine Folder F gelöscht und dann einige Commits später erneut hinzugefügt, aber unter Verwendung neuer, neuer Dateien (d. H. Ohne Rückwärts-Merge-Undo des Löschens). Danach wurde Branch B vom Stamm gesponnen, wo einige andere Arbeiten weitergingen. In der Zwischenzeit wurde A in den Kofferraum reintegriert.

Jetzt fertig mit B Ich möchte es auch in den Kofferraum reintegrieren, aber ich habe ein Problem mit der Synchronisierung mit dem Kofferraum, bevor das passiert. Egal was ich mache, mein Subversion-Client (TortoiseSVN) behauptet, B 's Version von F ist veraltet. Ich stelle mir das vor, weil B 's F und Stamm F keine gemeinsame Abstammung haben. Wenn ich jedoch versuche, die F des Trunks unter Verwendung der Option "Ignore Ancestry" auf Bzusammenzuführen, geht es ohne Fehler weiter, während ich immer noch mit F zurückbleibe, das nicht wie das im Stamm aussieht. Wenn ich versuche, ganzen Stamm zusammenführen auf B mit „Ignore Vorfahren“ für alles ausgewählt eine ganze Reihe von anderer Traurigkeit geschieht (Baum Konflikte überall etc.)

In meinem Fall haben keine Änderungen an F in B gemacht worden.

Wie geht man in einer solchen Situation richtig mit Ahnenproblemen um?

Antwort

0

Ich kann das Problem nicht reproduzieren, also muss etwas fehlen. Wenn Sie in der Lage, die Zeit zu verbringen, mein Versuch, eine Bewertung zu einem MVCE unten und vergleichen Sie es mit Ihrer Situation:

@ECHO OFF 

SET CWD=%~dp0 
SET REPO_NAME=repo 
SET REPO_PATH="%CWD%%REPO_NAME%" 
SET WC_NAME=wc 
SET WC_PATH="%CWD%%WC_NAME%" 

:: Create REPO URI (C:\path\to\repo -> file:///C:/path/to/repo, see https://stackoverflow.com/a/27817626/1698557) 
FOR /f "delims=" %%R IN (%REPO_PATH%) DO SET REPO_URL=%%~fR% 
SET REPO_URL=file:///%REPO_URL% 
SET REPO_URL=%REPO_URL:///\\=//% 
SET REPO_URL=%REPO_URL:\=/% 
SET REPO_URL="%REPO_URL%" 

:: Cleanup previous run 
RMDIR /S /Q %REPO_PATH% 
RMDIR /S /Q %WC_PATH% 

:: Create the repository 
svnadmin create %REPO_PATH% 

:: TEST STARTS HERE ---------------------------- 
svn mkdir %REPO_URL%/trunk -m "Creating trunk directory" 
svn mkdir %REPO_URL%/branches -m "Creating branches directory" 

:: Create folder "F" in trunk (revision 3) 
svn mkdir %REPO_URL%/trunk/F -m "Creating F directory in trunk" 

:: Checkout trunk 
svn checkout %REPO_URL%/trunk %WC_PATH% 

:: Add a file to "F" (revision 4) 
echo "First file version" > %WC_PATH%\F\thefile.txt 
svn add %WC_PATH%\F\thefile.txt 
svn commit %WC_PATH% -m "Creating thefile.txt in trunk/F" 

:: Create branch A (revision 5) 
svn copy %REPO_URL%/trunk %REPO_URL%/branches/A -m "Creating branch A" 

:: Delete F from Branch A (revision 6) 
svn delete %REPO_URL%/branches/A/F -m "Deleting F directory from branch A" 

:: Add F back to the branch (revision 7) 
svn mkdir %REPO_URL%/branches/A/F -m "Recreating F directory in branch A" 

:: Switch to branch A 
svn switch %REPO_URL%/branches/A %WC_PATH% 

:: Add a file with different content to "F" (revision 8) 
echo "Second file version" > %WC_PATH%\F\thefile.txt 
svn add %WC_PATH%\F\thefile.txt 
svn commit %WC_PATH% -m "Creating thefile.txt in trunk/F" 

:: Create branch B (revision 9) 
svn copy %REPO_URL%/trunk %REPO_URL%/branches/B -m "Creating branch B" 

:: Merge trunk to branch A (revision 10) 
svn update %WC_PATH% 
svn merge %REPO_URL%/trunk %WC_PATH% 
svn commit %WC_PATH% -m "Synchronizing branch A with trunk" 

:: Switch back to trunk 
svn switch %REPO_URL%/trunk %WC_PATH% 

:: Merge branch A to trunk (revision 11) 
svn merge %REPO_URL%/branches/A %WC_PATH% 
svn commit %WC_PATH% -m "Merging branch A into trunk" 

:: Switch to branch B 
svn switch %REPO_URL%/branches/B %WC_PATH% 

:: Merge trunk into branch B (revision 12) 
svn merge %REPO_URL%/trunk %WC_PATH% 
svn commit %WC_PATH% -m "Synchronizing branch B with trunk" 

Der Ausgang dieses ist (auf meinem Rechner, läuft SVN 1.9.3):

Committing transaction... 
Committed revision 1. 
Committing transaction... 
Committed revision 2. 
Committing transaction... 
Committed revision 3. 
A wc\F 
Checked out revision 3. 
A   wc\F\thefile.txt 
Adding   wc\F\thefile.txt 
Transmitting file data .done 
Committing transaction... 
Committed revision 4. 
Committing transaction... 
Committed revision 5. 
Committing transaction... 
Committed revision 6. 
Committing transaction... 
Committed revision 7. 
D wc\F 
A wc\F 
Updated to revision 7. 
A   wc\F\thefile.txt 
Adding   wc\F\thefile.txt 
Transmitting file data .done 
Committing transaction... 
Committed revision 8. 
Committing transaction... 
Committed revision 9. 
Updating 'wc': 
At revision 9. 
--- Recording mergeinfo for merge of r5 through r9 into 'wc': 
U wc 
Sending  wc 
Committing transaction... 
Committed revision 10. 
D wc\F 
A wc\F 
A wc\F\thefile.txt 
U wc 
Updated to revision 10. 
--- Merging r5 through r10 into 'wc': 
R wc\F 
A wc\F\thefile.txt 
--- Recording mergeinfo for merge of r5 through r10 into 'wc': 
U wc 
Sending  wc 
Replacing  wc\F 
Committing transaction... 
Committed revision 11. 
D wc\F 
A wc\F 
A wc\F\thefile.txt 
U wc 
Updated to revision 11. 
--- Merging r9 through r11 into 'wc': 
R wc\F 
A wc\F\thefile.txt 
U wc 
--- Recording mergeinfo for merge of r9 through r11 into 'wc': 
G wc 
Sending  wc 
Replacing  wc\F 
Committing transaction... 
Committed revision 12. 
+0

Ist 'F' Dateien überhaupt relevant? Die Verzeichnis-/Dateistruktur von 'F' ist vor und nach dem Löschen identisch, der Dateiinhalt ist jedoch unterschiedlich. – Sanuuu

+0

Siehe meine Bearbeitung. Es scheint nicht wichtig zu sein, da mein Beispiel immer noch ohne Konflikte läuft. –

+0

Ok, danke für den MVCE Versuch! Das ist rätselhaft. Ich habe den Verdacht, dass der Fall von mir sein könnte, dass ich einfach nicht das ganze Bild sehe, da das Repository viel komplexer ist als das, das seit 5 Jahren existiert und derzeit in seiner hohen 4.000 Revisionsnummer. Ich werde versuchen, nach einer anderen Ursache der Probleme zu suchen. – Sanuuu