Yanlışlıkla "svn geri dönüşünden" kurtulmanın bir yolu var mı?


96

Bu sabah aşağıdakileri yaparak kendimi ayağımdan vurmayı başardım:

  1. Projemde bir değişiklik üzerinde çalışmaya başladım
  2. Bir grup dosyada bir dizi düzenleme yaptım
  3. Yaklaşımımın tamamen yanlış olduğunu ve yeniden başlamam gerektiğini anladım
  4. projemin en üst seviyesine cd'lendi ve bir "svn - recursive revert" yaptı. yerel sanal alanımı değişiklik öncesi durumuna geri yüklemek için.
  5. Yerel kum havuzumda göze çarpan bir dizi başka değişiklik olduğunu fark ettiğimde dehşet içinde uludu ve hepsini yok ettim. (svn sunucusu geçen Cuma kapalıydı, bu yüzden onları kontrol edemedim ve hafta sonları onları unutmuştum)

Neyse ki bu durumda Cuma günü işten ayrılmadan önce bir "svn diff> temp.txt" yapmıştım ve temp.txt dosyası hala sabit sürücümdeydi, bu yüzden bu dosyayı "yama" içine besleyip kurtarabildim kayıp değişiklikler.

Ama gelecekteki referansım için (yani bir dahaki sefere aynı aptalca hatayı yaptığımda) ... svn'e bir "svn geri dönüşünü" geri almasını söylemenin bir yolu var mı? Svn herhangi bir yerde yerel / kontrol edilmemiş farkların yedeğini tutuyor mu?


34
IIRC TortoiseSVN, geri döndürülen dosyaları geri dönüşüm kutusuna taşır, ancak orijinal SVN komut satırı istemcisinde bu tür nüanslar yoktur.
Dario Solera

1
Dosyayı geri dönüşüm kutusunda bulamıyorum. Şansım mı yok?
dalcantara

5
Geri dönüşüm kutusu ile ilgili en iyi yorum. Bu sadece günümü kurtardı!
OrganicPanda

2
benim de! çok teşekkür ederim. Geri alınan dosya geri dönüşüm kutumda göründü ve geri yüklenebilir.
sladda

1
Bu geri dönüşüm kutusu şeyiyle arka tarafımı kurtardın !!!
Epirocks

Yanıtlar:


80

Hayır, (kesinlikle) HAYIR .

Subversion'a bir dosyayı geri döndürmesi gerektiğini söylerseniz, tüm değişiklikler rüzgarla kaybolur.

Sadece hafızanız onları geri alabilir.

İstisna: Eklediğiniz yeni dosyalar yalnızca "eklendi" durumlarını kaybedecek, ancak dosya bu dizinde kalacak, yalnızca durum bilinmiyor ("?")

Platform / Yazılım istisnası: Windows'ta TortoiseSVN kullanarak, Revert önce dosyaları Geri Dönüşüm Kutusu'na atar ve sonra geri döndürür. Dosyaları kurtarmak için Geri Dönüşüm Kutusu'nu inceleyebilirsiniz.


10
Yukarıdakilere ek: Sürüm kontrolü yalnızca dosyaları gerçekten yürütürseniz size yardımcı olur. Çalışan kopyanızı öldürmenin saatler süren çalışmayı öldüreceği bir konumdaysanız, o zaman yeterince sık taahhütte bulunmuyorsunuz.
myron-semack

1
Kabul edildi ... bu durumda svn sunucusu çalışmıyordu ve bu yüzden hala beklemede olan taahhüt edilmemiş değişikliklerim vardı. : ^ (
Jeremy Friesner

13
Evet!!! İşletim sisteminize ve / veya IDE'nize bağlı olarak iyileşmenin bir yolu vardır - kalp krizi geçirmeden önce aşağıdaki diğer yanıtları okuyun !!
HDave

2
Bu doğru değil, basit bir HAYIR'dan biraz daha karmaşık. Bir kurtarma aracı kullanın veya şanslıysanız dosyalar geri dönüşüm kutusunda.
RaphMclee

1
@RalphMclee: Platforma ve svn istemcisine bağlıdır. TortoiseSVN, geri döndürülen yeni dosyaları geri dönüşüm kutusuna kaydedecektir. Bu sadece bir istisnadır. Ve bir kurtarma aracının dosyalarınızdaki değişiklikleri tutarlı bir şekilde yeniden oluşturabileceğinden şüpheliyim. Hatırlaması çok daha kolay ve nettir: geri dönmek işinizi mahveder, dikkatli kullanın!
Peter Parker

104

Bir çözüm var ... geri dönüşüm kutunuza gidin, orada silinen dosyanın en son sürümünü bulacaksınız. Kaplumbağa geri döndürdüğü her dosyayı geri dönüşüm kutusuna "fırlatıyor".


2
Bu arada, TortoiseSVN'nin geri dönerken bu kadar yavaş görünmesinin nedeni de budur. Bir dosyayı geri dönüşüm kutusuna taşımak, geri dönüşüm kutusu dolu olduğunda çok yavaş bir işlemdir. Bu özelliği "Genel - iletişim kutuları 1" TortoiseSVN ayarlarında devre dışı bırakabilirsiniz.
Wim Coenen

8
Teşekkürler dostum, beni kurtardın! Yanlışlıkla Revert yaptım ve neredeyse 2 haftalık işimi kaybettim. Neyse ki geri dönüşüm kutusunda buldum.
Arie Livshin

2
@ArieLivshin, neden taahhütte bulunmadan 2 hafta çalıştın? Dallar hakkında daha fazla şey öğrenmeniz gerekiyor gibi görünüyor.
JoelFan

Can sıkıcı bir şekilde ankhsvn bunu yapmaz
Phil Hale

Teşekkürler .. Çok yardımcı oldum.
Prem Singh Bist

32

Gerçekten Subversion'a özgü değil, ancak Eclipse ile çalışıyorsanız, yerel tarihte şansınızı deneyebilirsiniz.

Şimdi, biraz daha Subversion'a özgü bir şey: Yaptığınız her değişiklik için bir dal yapmak istemiyorsanız, yerel olarak birkaç trank kontrol edebilirsiniz (trunk-modif-1, trunk-modif-2 .. .). Her "değişiklik" ayrı bir ağaçta yapılır ve yalnızca hangi kontrolün hangi değişikliğe karşılık geldiğinin bir listesini tutmanız gerekir.

Ya da Git'i yerel olarak kullanabilirsiniz ama ben hiç denemedim.


3
Bilginize - sağ tıklama bağlam menüsü "Yerel geçmişten geri yükle" yoluyla yerel geçmişe gidin.
HDave

Eclipse bölümü için, işte daha somut bir cevap: stackoverflow.com/a/18220708/517705
Sk8erPeter

14

Son zamanlarda, SVN'de yeni dosya değişiklikleri (yaklaşık 10) yapmama hatasını yaptım ve hepsi aptalca hatam nedeniyle ortadan kayboldu. Ama beni kurtaran, bağlam menüsündeki pencerenin "Önceki sürümleri geri yükle" seçeneğiydi. Bu bir rahatlama ve alınan ders oldu.


Teşekkür ederim! Bu beni çalışma saatlerini yeniden yapmaktan kurtardı! Pencerelerin bu özelliğini daha önce hiç görmemiştim ama pastırmamı kurtardı!
NibblyPig

Bu şekilde çalışma günlerini kurtardığım için sana borçlu olduğum 6000 doları nereye gönderebilirim? Ders
alındı

Teşekkür ederim, günümü kurtardı.
Opax Web

Böyle bir geri yüklemeyi destekleyen kontrol noktasını kapalı tutuyorum çünkü performansı düşürüyor. Son zamanlarda Eclipse, Geri Al özelliğiyle ilgili bir sorun nedeniyle git arşivi de dahil olmak üzere projelerimden bir klasörü sildi ve onu açmış olmayı diledim. Ancak Recuva adlı bir Windows programı, silinen dosya alanını arayarak beni kurtardı. Tüm dosyalarımı kurtarana kadar etkilenen sürücüye ek içerik eklememeye çok dikkat ettim ve bir hafta önceki en son yedeklememden bu yana değiştirilen her kaynak dosyası bana verdi. İkili dosyalar çoğunlukla kurtarılamaz.
Carl

8

Svn komut satırı istemcisi kullanıyorsanız, dosyaları kurtaramazsınız .

Ancak, svn istemciniz olarak TortoiseSVN kullanıyorsanız, bunları kurtarabilirsiniz. TortoiseSVN onları otomatik olarak Geri Dönüşüm Kutunuza taşıyacaktır. Yanlışlıkla geri döndükten sonra onları oradan geri yükleyebilirsiniz.

Bu, TortoiseSVN'de yapılandırılabilir bir seçenektir. Ayarlar -> İletişim Kutusu 1 -> Geri dönerken geri dönüşüm kutusunu kullan altındadır .

Varsayılan olarak işaretlidir, yani dosyalar geri dönüşüm kutusuna taşınır. İsterseniz (çoğunlukla bunu devre dışı bırakmak istemezsiniz. Bir sebebiniz varsa lütfen bana da bildirin)


1
Harika! ... beni kurtardı
Janani Kumar

6

InteliJ kullanıyorsanız şanslı bir insansınız. Üst menüde, bir Sürüm Kontrolü seçeneğiniz vardır ve bunun altında, o dosyayla yaptığınız tüm işlemler de dahil olmak üzere, seçilen dosyanın tüm geçmişini bulacağınız yerel geçmiş seçeneğini bulacaksınız (güncelleme, uygulama, geri alma).

İyi şanslar Arkde


1
Ve eğer yeni bir dosyaysa, dosyanın kendisi silinecektir. Bu durumda, Proje görünümünden dosyanın bulunduğu klasörü seçin ve ardından 'Yerel Geçmiş'i seçin. IntelliJ günü yine kurtardı.
Nufail

4

Ayrıca .NET kodunuzu (.cs dosyaları vb.) Geri döndürdüyseniz ve geri dönmeden önce uygulamanızı oluşturduysanız, ancak değişiklikleri yaptıktan sonra, kodu görüntülemek için yansıtıcı araçlardan herhangi birini kullanarak montaj dosyasındaki değişiklikleri kurtarabilirsiniz.


3

Eclipse'deki geçmiş tarayıcısında dosyanın yerel değişiklik günlüğünü (Yerel Düzeltmeler) bulduğum için çok şanslıydım. Farklılıkları tek tek inceliyordum ve üzerine yazmadan önce dosya üzerinde birkaç kayıt yapmıştım.


2

Çözümü (Visual Studio + AnkhSVN) geri aldım ve birkaç dosyadaki değişiklikleri kaybettim. Dosyayı geri dönüşüm kutusunda bulamıyorum.

AMA: Kaybeden dosyalarımı Handy Recovery ile kurtardım, yani SVN geri döndüğümde dosyalarımı siliyor.

Geri dönen dosyaları kurtarmak için herhangi bir veri kurtarma yazılımını kullanın (Deneme Handy Recovery gibi )


1

Hayır, SVN bir günlük veya yedek tutmaz (diğer yanıtlarda TortoiseSVN için bir çözüm belirtilmiş olsa da).

Ancak birinin cevaplara göz atması ve OP'nin sorusundaki bu yorumu fark etmemesi durumunda:

"Neyse ki bu durumda Cuma günü işten ayrılmadan önce bir" svn diff> temp.txt "yapmıştım ve temp.txt dosyası hala sabit sürücümdeydi, bu nedenle bu dosyayı" yama "içine besleyip kurtarabildim kayıp değişikliklerim. "

Bir 'svn geri dönüşü' yapmadan ÖNCE 'svn diff' yapmanın yaygın bir paradigma olduğunu düşünüyorum. Bunu yapmayı alışkanlık haline getirirseniz, fark terminale yankılansa bile, kayıp değişikliklerinizi kurtarmak için en az bir olası yolunuz vardır.

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.