Subversion / TortoiseSVN'de silinmiş bir klasörü nasıl "geri alabilirim"?


97

Yalnızca belirli bir etiketi silmeyi amaçladığımız Subversion depomuzdan 'etiketler' klasörünü yanlışlıkla sildik. 'Etiketler' klasörünü geri almanın en kolay yolu nedir?

Müşterimiz olarak TortoiseSVN kullanıyoruz ve repo tarayıcısına gidip günlüğü gösterdiğimde, çalışma kopyanızdaki benzer bir iletişim kutusunda görebileceğinize benzer şekilde "bu revizyondan değişiklikleri geri al" gibi bir şey olacağını düşündüm. Ama orada böyle bir emir yok ...

Yanıtlar:


117

Silinen klasörü önceki bir revizyondan geri kopyalamanız yeterlidir.

Depo Tarayıcısında, bir revizyona klasörünüzün hala var olduğunu göstermek için HEAD (sağ üst köşede) etiketli düğmeyi tıklayın, ardından bu klasörü sağ tıklayın ve "Şuraya kopyala ..." seçeneğini seçin ve oraya yolu girin klasörün yeniden oluşturulmasını istiyor (muhtemelen metin kutusunda zaten bulunan yolla aynı).


4
Harika ipucu, teşekkürler. Bir TortoiseSVN aldı - bu "kopyala ..." iletişim kutusunda yolu "example.com/svn/tags" yerine "etiketler1" e değiştirmem ve ardından Tamam düğmesinin etkinleştirilmesi için geri dönmem gerekiyordu.
Borek Bernard

2
Bu, etiketler için uygun olabilir, ancak geçmişi kaybedeceğiniz için diğer klasörlerin
silinmesini

3
Tarihi saklıyor, sadece yaptı.
acdcjunior

günlüğü görüntülerken sadece "Kopyalamada / yeniden adlandırmada durdur" seçeneğinin işaretini kaldırdığınızdan emin olun, aksi takdirde TortoiseSVN geri yükleme işleminizden önce geçmişi göstermez (tabii ki) ...
Oli

Tamamen işe yaradı. Zamanımın çoğunu kurtardım. Teşekkürler :)
dgupta3091

78

komut satırı meraklıları için:

  • önce silme işleminizin gerçekleştiği revizyon numarasını bulun:

    svn log -v http://svnserver/path/to/folderContainingDeletedFolder
    

dizinin 999 revizyonunda silindiğini bulduğunuzu söyleyin (btw: svn repo tarayıcısıyla revizyon numarasını bulmanız daha kolay olabilir)

  • klasörü revizyon eksi 1'den kopyala

    svn copy http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder@998 http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder -m "undeleted folder"
    

voilà bitirdiniz!

senin durumunda bu şunlar olabilir:

    svn copy http://svnserver/project/tags@998 http://svnserver/project/tags -m "undeleted folder"

1
Teşekkürler..çok zaman kazandırdı
Dharani Kumar

Bu az önce pastırmamı kurtardı!
axiopisty

"Svn copy" yaklaşımının aslında tüm geçmişi koruduğunu ve klasörler için yinelemeli olarak çalışarak klasörü ve tüm alt öğeleri geri yüklediğini doğrulamak istedim.
WallStProg

11

Bu cevapların çoğu bir dereceye kadar işe yarayacak, ancak doğru cevap Daniel'in. Ters birleştirme yapın. Bu şekilde sürüm geçmişini tutarsınız.

svn merge -r R1:R2

burada R1, bulunduğunuz revizyon ve R2, silinen dosya / klasörü içeren revizyondur.


1
Ters birleştirmede, R2 ondan önceki revizyon olacak şekilde, R1, geri döndürmek istediğiniz revizyon olmalıdır.
arleslie

2
İle herhangi bir geçmişi kaybetmezsiniz svn copy.
maxschlepzig

Komut satırı meraklıları olmayan bizler için bkz: tortoisesvn.net/docs/nightly/TortoiseSVN_en/…
Pascal

2
Bu, silinen tüm dosyaları / klasörleri geri getirmez mi? Bu, yalnızca belirli bir silinmiş klasörü geri yüklemek istiyorsam ancak diğer silinmiş klasörleri geri yüklemek istemiyorsam çalışır mı?
OJ7

8

Ters birleştirme yapmanız gerekecek .

Bunun nasıl yapılacağına ilişkin ayrıntılar (ve SVN ile isteyebileceğiniz veya yapmanız gereken hemen hemen her şey) için resmi kitap çevrimiçi olarak mevcuttur .


3

Bu revizyondan sonra benim için çalışan raudi'nin cevabını takip edin.

Bazı svn istemcileri, aşağıdaki gibi klasörden sonra @ kullanmak yerine -r revizyon parametresi kullanılarak belirtilen revizyon numarasına ihtiyaç duyabilir:

svn copy svn://svnserver/project/tags svn://svnserver/project/tags **-r 998** -m "undeleted folder"

Hala var olan bir klasörden geri yüklüyorsanız, o -r <revision>zaman çalışacaktır. Ancak, klasörü doğrudan geri yüklemeye çalışıyorsanız kullanmanız gerekir @<revision>. Aksi takdirde size dosyanın bulunamadığını söyleyecektir.
arleslie

2

Git Repository Browser, silinen klasörün bulunduğu repositoryana klasöre sağ tıkla . Şimdi, ana klasörün ve silme işlemini gerçekleştirdiğiniz önceki revizyonu seçin. Bir listeniz olacak ve revizyon bilgilerinden klasöre sağ tıklayıp seçim yapacaksınız .Show LogUpdate to this Revision

Bitirdiniz


Anlıyorum, Günlüğü Göster iletişim kutusunda değil, ana depo tarayıcı penceresindeydi. Yine de, ben bu sorunu doğrudan sunucuda düzeltmek isterken, bu komut yerel çalışma kopyamı güncellemeye çalışacak (her biri binlerce dosya içeren yüzlerce etiketi kontrol etmenin tam olarak istediğim şey olmadığını hayal edebilirsiniz. yapmak).
Borek Bernard

Benim için çalıştı. Bağlam menüsü seçeneği (sağ tıklamada) "Bu revizyondaki değişiklikleri geri al" dır ve değişiklikleri ters birleştirir.
hsg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.