2008-11-04 13 views
21

über die Kommandozeile, ich dies in der Regel tun:In SVN, wie kopiere ich nur die Unterverzeichnisse eines Verzeichnisses in ein anderes Verzeichnis?

cp -rRp /path/to/a\_folder/. /path/to/another\_folder 

Dies kopiert nur den Inhalt unter a_folder zu noch_ein_ordner. In SVN muss ich dasselbe tun, aber ich kann es nicht herausfinden. Ich beende immer auf den Punkt:

/path/to/another\_folder/a\_folder 

SVN wirft sogar, wenn ich dies versuchen:

svn copy file:///path/to/a\_folder/* file:///path/to/another\_folder 

Es sagt, dass es nicht existiert.

EDIT:

Dies würde wahrscheinlich helfen. Die Verzeichnisstruktur für mein Projekt sieht wie folgt aus:

my_project 
    /branches 
    /tags 
    /trunk 
    /vendor 
    /1.1 

ich den Inhalt von 1,1 unter dem Hersteller in den Kofferraum bekommen müssen, ohne es den 1.1 Ordner tatsächlich zu kopieren.

Antwort

8

Haben Sie in Betracht gezogen, svn merge zu verwenden?

ein Repo wie folgt gegeben:

trunk/a_folder/foo 
trunk/a_folder/bar 
trunk/new_folder/baz 

Verwendung dieser Befehle die foo und bar Verzeichnisse zu fusionieren:

cd trunk/new_folder 
svn merge -r1:HEAD http://svn/repo/trunk/a_folder . 
1

Sie sind sehr, sehr nah:

svn copy -m"Copy Directory" file:///path/to/a_folder file:///path/to/another_folder 

einfach die /* vom ersten Argument fallen lassen.

19

Wie Sie sicherlich festgestellt haben, Kopieren in ein Zielverzeichnis, das bereits existiert wird nicht funktionieren:

svn cp svn://my_project/vendor/1.1 svn://my_project/trunk

weil Stamm bereits vorhanden ist, so würden Sie am Ende mit:

Mit Merge hat die unglückliche Eigenschaft, nicht die Geschichte des Herstellers 1.1 Tag in Subversion vor 1.5, die Merge-Tracking eingeführt zu halten. Es ist dir vielleicht egal. In diesem Fall merge wäre die richtige Lösung:

 
svn co svn://my_project/trunk trunk-wc 
svn merge svn://my_project/trunk svn://my_project/vendor/1.1 trunk-wc 

Der beste Weg, um diese Zusammenführung zu lesen ist: Erstens die Änderungen fest, die erforderlich zu trunk identisch mit vendor/1.1 zu machen, diese Änderungen dann an der angegebenen Arbeitskopie gilt (auch Kofferraum, in diesem Fall).

Ich sollte darauf hinweisen, dass diese Zusammenführung effektiv alles wegblasen wird, das vorher im Stamm war. Wenn Sie also bereits lokale (herstellerunabhängige) Änderungen am Stamm haben, sollten Sie nur die Änderungen zwischen 1 und 2 anwenden.1 und die vorherige Zulieferung:

 
svn co svn://my_project/trunk trunk-wc 
svn merge svn://my_project/vendor/1.0 svn://my_prjoect/vendor/1.1 trunk-wc 

Wenn Stamm vorhanden, aber leer Sie zwei Möglichkeiten haben: den Stamm ersetzen oder eine kleine Schale Schleife schreiben:

den Stamm Ersetzen sieht wie folgt aus:

 
svn rm svn://my_project/trunk 
svn cp svn://my_project/vendor/1.1 svn://my_project/trunk 

die Shell (bash) Nutzung:

 
svn co svn://my_project/trunk trunk 
svn co svn://my_project/vendor/1.1 1.1 
(cd 1.1 
    for x in * ; do 
    svn cp $x ../trunk 
    done 
) 
svn ci trunk 
3

Ich denke, dass was Sie wollen, ist, dass der Inhalt des Kofferraums in der /tags/version-1.0/ Ordner ohne eine zusätzliche /trunk Ordner dort endet. Das ist schlecht: /tags/version-1.0/trunk/stuff. Das ist gut: /tags/version-1.0/stuff.

Um dies zu erhalten ich einen Prozess mit 2 Schritten tun:

svn copy http://localhost/MyProject/trunk http://localhost/MyProject/tags/ 

# now I have /MyProject/tags/trunk 

svn rename http://localhost/MyProject/tags/trunk http://localhost/MyProject/tags/version-1.0 
5

Dieser Link erklärt eine Abhilfe.

http://svn.haxx.se/users/archive-2004-12/1537.shtml

Im Grunde, was sagt es ist, dass, wenn der Zielordner nicht im Repo bestehenden, Sie werden die contencts Ihrer Quellordner im Zielordner erhalten.

Siehe untenstehendes Beispiel. Der Ordner 07-03-2012 existiert nicht in Ihrem Repo. Sobald Sie den folgenden Befehl ausführen, erhalten Sie den Inhalt des HEAD-Ordners in 07-03-2012.

svn cp <URL>/HEAD/ <URL>/branches/07-03-2012 -m "test" 
Verwandte Themen