2008-11-04 17 views
21

, Bunu genelde:SVN'de, bir dizinin yalnızca alt dizinlerini başka bir dizine nasıl kopyalarım? Komut satırından Via

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

Bu kopyalar sadece içindekileri altına için another_folder a_folder. SVN'de aynı şeyi yapmam gerek ama bunu çözemiyorum. Her zaman bu ile bitirmek: Bunu denediğinizde

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

SVN bile kusar:

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

O yok diyor.

DÜZENLEME:

Bu muhtemelen yardımcı olacaktır. Projem için dizin yapısı aşağıdaki gibidir: Ben aslında 1.1 klasörü kopyalamadan bagaja satıcı altında 1.1 içeriğini almak gerekir

my_project 
    /branches 
    /tags 
    /trunk 
    /vendor 
    /1.1 

.

cevap

8

svn birleştirme kullanmayı düşündünüz mü?

böyle bir repo Verilen:

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

kullanımı bu komutları foo ve çubuk dizinleri birleştirmek için:

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

Çok ama çok yakınız:

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

İlk argümandan /*'u bırakın. gövde zaten var çünkü

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

, bu yüzden ile bitirmek istiyorum:

19

kesinlikle keşfettim gibi, zaten var olan bir hedef dizine kopyalama çalışmayacaktır

Birleştirme birleştirme, birleştirme izleme başlatıldı 1.5 önce subversion içinde satıcı 1.1 etiketi geçmişi tutmadığı talihsiz bir özelliği vardır. Umursamazsın.

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

bu birleştirme okumak için en iyi yolu: Önce de (verilen çalışma kopyasına o değişiklikleri ardından, vendor/1.1 için trunk özdeş hale getirmek için gerekli değişiklikleri belirlemek Bu durumda birleştirme doğru çözüm olacaktır bagajda, bu durumda).

Bu birleşimin, daha önce gövdede bulunan herhangi bir şeyi etkin bir şekilde havaya uçuracağını belirtmeliyim. Yani, zaten bagajda yerel (satıcı olmayan) değişiklikler varsa, sadece 1 arasındaki değişiklikleri uygulamak isteyeceksiniz.1 ve önceki satıcı damla: gövde var, ancak iki seçeneğin var boş

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

ise: gövde yerine, ya da biraz kabuk döngü yazma: gövde değiştirilmesi

şuna benzer:

:

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

kabuk (bash) yararlanan

 
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

Bence istediğin, gövde içeriğinin,klasöründe, orada fazladan bir /trunk klasörü bulunmadan bitmesidir. Yani bu kötü: /tags/version-1.0/trunk/stuff. Bu iyi: /tags/version-1.0/stuff.

Ben 2 adımlı bir işlem yapmak bu almak için:

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

Bu bağlantı, bir geçici çözüm açıklıyor.

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

Temelde ne diyor hedef klasör repo mevcut değilse, hedef klasörde kaynak klasörün contencts alacak olmasıdır.

Örneğe bakın. 07-03-2012 klasörü repo'nuzda yok. Aşağıdaki komutu çalıştırdıktan sonra, 07-03-2012'de HEAD klasörünün içeriğini alacaksınız.

svn cp <URL>/HEAD/ <URL>/branches/07-03-2012 -m "test" 
İlgili konular