SVN geri yüklemeden önce silmeyi geri al


135

Bir dizini SVN çalışan bir kopyadan silerseniz, ancak henüz işlemediyseniz, dizini nasıl geri alacağınız açık değildir. Google, "svn undo d" yazdığınızda ortak bir sorgu olarak "svn geri almayı silmeden önce geri" seçeneğini önerir, ancak arama sonuçları yararsızdır.

edit: yıkım 1.4.4 çalışan bir çözüm istiyorum


Bekleyen değişikliklerle sildiğiniz kardeş dizinleri var mı? Eğer öyleyse, daha yüksek bir seviyeden geri dönerken değişiklikleri kaybedebilirsiniz.
Russell

Yanıtlar:


145

svn revert deletedDirectory

İşte belgeler var için svn revertkomuta.


DÜZENLE

Eğer deletedDirectorykullanılarak silindi rmdirve svn rmyapmanız gerekir

svn update deletedDirectory

yerine.


3
Bu yeni olmalı, SVN 1.4.4'te çalışmaz. (Denediğim ilk şey buydu.)
LaC

4
1.4.4 diyor ki, btw: $ svn yardım geri döndürme: Bozulmamış çalışan kopya dosyasını geri yükleyin (çoğu yerel düzenlemeyi geri alın). use: geri döndür PATH ... Not: bu alt komut ağ erişimi gerektirmez ve çakışan durumları çözer. Ancak, kaldırılan dizinleri geri yüklemez.
LaC

1
1.6.6 yardımda aynı metne sahiptir, ancak test ettiğimde benim için çalıştı. Kullanmak olmasaydı o Not svn deletedizini silmek için, onun yerine kullanılarak silindi rmdir, şunları yapmanız gerekir svn update deletedDirectorybunun yerine.
Michael Hackner

Yerel bir svn-ed dizininden bir dosya (svn del) sildim. svn güncellemesi çalışmadı ama svn revert çalıştı. Mac için SynchroSVN kullanıyordum. Ancak, ipuçları için teşekkürler.
karim

5
Bağlantıya göre, svn -R revert komutunu kullanarak tüm dizini tüm içeriklerle geri alabilirsiniz. -v olmadan svn geri döndür sadece içeriği değil, dizini geri yükler.
n13

156

1) yapın

svn revert . --recursive

2) çıktıları gibi hatalar için ayrıştırma

"Failed to revert 'dir1/dir2' -- try updating instead."

3) hata dizinlerinin her biri için svn'yi çağırın:

svn up dir1/dir2

12
Bu en doğru cevap, çok teşekkür ederim, bana çok yardımcı oldun.
greenoldman

1
Bunun dışında her şeyi geri döndürüyor mu? Bunu yapmak istemeyebilirsiniz.
n13

1
SVN'nin silindiğini düşündüğü bir klasörünüz varsa, bu en mantıklıdır. Ben çalışan bir kopyasını kontrol ederken vardı. Bir klasör zaten vardı, bu yüzden çakışmaya yerleştirildi ve teslim alınmadı. Başka bir klasöre bağlantı oluşturuyordu. Yeniden adlandırdım ve svn upkontrol etmeye çalıştım , çatışmayı fark ettim, yaptı svn resolved foove svn statusbana yaklaşık 10 bin dosya olarak işaretlendiğimi söyledi D. svn upve svn revertonları geri almadılar, ama bu sorunu çözdü.
simbabque

6
+1 --recursive, silinen dizinlerin içeriğini geri yüklemeye yardımcı olur.
Melebius

1
Aman Tanrım, akşamımı kurtardın!
ArturOlszak

32

Benim için işe yarayan şey

svn revert --depth infinity deletedDir

Bu benim için harika çalıştı (svn 1.7.10) svn revert deletedDir işi yapamadı. Mükemmel cevap.
rtome

4

Sildiğiniz dizinin üzerindeki bir düzeyden (özyinelemeli) Geri Alma işlemi yapın.


1
Bu, YOL'dan gereğinden fazla değişiklik yapılmasını engelleyecektir.
Michael Hackner

Subversion 1.4.4 ile çalışmıyor (Sadece denedim). svn help revert "bu alt komut ağ erişimi gerektirmez ve çakışan durumları çözer. Ancak kaldırılan dizinleri geri yüklemez." Üzgünüm, sürümü belirtmeliydim. Mac OS X 10.5 ile birlikte gelen 1.4.4.
LaC

4

Tek bir astar haline getirmek için şöyle bir şey deneyebilirsiniz:

svn status | cut -d ' ' -f 8 | xargs svn revert

Adında boşluklar olan bir dizin oluşturabilirim. AFAIK'i 'kesebilir'.
Denis Barmenkov

1

Bulabildiğim en basit çözüm, üst dizini çalışma kopyasından (rm -rf ile, svn delete değil) silmek ve daha sonra büyükbaba veya büyükannede svn güncellemesini çalıştırmak oldu. Örneğin, a / b / c'yi sildiyseniz, rm -rf a / b, cd a, svn up. Bu her şeyi geri getirir. Tabii ki, bu sadece üst dizinde tutmak istediğiniz başka taahhüt edilmemiş değişiklikleriniz yoksa iyi bir çözümdür.

Umarım bu sayfa bir daha bu soruyu google'a getirdiğimde sonuçların üstünde olacak. Birisi elbette daha temiz bir yöntem önermişse daha da iyi olurdu.


Bu, üst öğede bekleyen değişikliklere sahip hiçbir alt dizin bulunmadığını varsayar.
Russell

0

Taahhüt etmeden önce klasörü kaldırabilir ve üst dizini güncelleyebilirsiniz:

rm -r some_dir

svn update some_dir_parent

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.