2016-05-24 6 views
0

Ich mache eine spärliche Kasse in SVN, eine Zusammenführung für eine kleine Änderung, die eine Ordner-Löschung enthält, die mir Kopfschmerzen verursacht. HierZusammenführen Ordner Löschen mit SVN Ursachen "ungültiger Status für die Aktualisierung Eigenschaften" Fehler

ein Beispiel:

svn co https://bigrepo.company.com/ . 
mkdir source_branch 
mkdir source_branch/proc 
mkdir source_branch/proc/new_folder 
touch source_branch/proc/new_folder/new_thing 
svn add . --force 
svn ci 
svn cp source_branch/ target_branch/ 
svn ci 

Dann eine Revision in meinem Source-Zweig erstelle ich

svn del source_branch/proc/new_folder 
svn ci 

und dann zusammenführen möge, wenn es zu einem anderen Zweig (mit spärlicher Kasse) verschmelzenden:

svn co https://bigrepo.company.com/target_branch --depth empty . 
svn up --depth empty proc 
svn up --depth empty proc/new_folder 
svn up --depth empty proc/new_folder/new_thing 
svn merge https://bigrepo.company.com/source_branch -c 1635 . 

sVN gibt mir diesen Fehler

svn: E155023: Eigenschaften für 'proc/new_folder/new_thing' können nicht festgelegt werden: ungültiger Status zum Aktualisieren von Eigenschaften.

aber wenn ich wie so eine volle Kasse tun:

svn co https://bigrepo.company.com/target_branch --depth infinity . 
svn merge https://bigrepo.company.com/source_branch -c 1635 . 

Die Zusammenführung funktioniert. Warum funktioniert das nicht mit einem sparsamen Checkout?

Ich spielte mit Updates auf verschiedenen Ebenen herum und ich bin mir nicht wirklich sicher, warum einige arbeiten und andere nicht.

funktioniert das nicht:

svn co https://bigrepo.company.com/target_branch --depth empty . 
svn up --depth empty proc/ 
svn up --depth infinity proc/new_folder 
svn merge https://bigrepo.company.com/source_branch -c 1635 . 

Dies funktioniert: noch nicht ideal

Antwort

1

http://svnbook.red-bean.com/en/1.7/svn.branchmerge.advanced.html

verschmilzt

svn co https://bigrepo.company.com/target_branch --depth empty . 
svn up --depth infinity proc/ 
svn merge https://bigrepo.company.com/source_branch -c 1635 . 

, die ein wenig besser, aber vermeiden zu Zielen mit spärlichen Verzeichnissen . Ebenso nicht mit anderen Tiefen als --depth = unendlich verschmelzen.

Dies kann nur sein, wie SVN funktioniert; Das heißt, nicht gut, wenn Zusammenführungen an spärlich ausgecheckten Arbeitskopien vorgenommen werden.

Von dem, was ich in der Lage, zu verstehen, wenn Sie eine Zusammenführung machen, wird SVN Merge-Informationen zu Dateien und Ordnern hinzufügen. Auf welcher Ebene Merge-Informationen hinzugefügt werden, hängt davon ab, wie die Arbeitskopie erstellt wird. Das heißt, SVN ist "schlau" genug zu wissen, dass, wenn Sie einen Ordner mit --depth leer ausgecheckt haben, es nur eine teilweise Zusammenführung für diese Revision zu dem Ordner hinzufügen kann. Wenn Sie Dateien/Ordner unterhalb dieses Ordners ausgecheckt haben, fügt es Merge-Informationen auch auf diesen Ebenen hinzu, es kann diese Merge-Informationen später konsolidieren, wenn SVN das ausführt, was es einen "Elide" -Schritt nennt.

Im Gegensatz zu einem Checkout bei --depth infinity, muss SVN keine Merge-Informationen auf niedrigeren Ebenen verfolgen und kann den Elide-Schritt für diesen Ordnerstruktur vollständig überspringen.


So sind die Optionen, führen Sie eine vollständige --depth Unendlichkeit Kasse, oder nicht mehr verwenden SVN des Merge-Tracking und verschmelzen mit --ignore-Vorfahren, die die Zusammenführung korrekt wird ausführen, aber nicht mergeinfo posten.

Verwandte Themen