6 Mart 2013 Çarşamba

svn'de silinen dizini/dosyayı kurtarma

SVN'de tüm işlemlerin kaydı tutulduğu için bir sorun olduğunda geçmişteki kayıtlardan sorunu çözebilirsiniz. En çok karşılaşılan hatalardan biri de yanlışlıkla bir dizini veya dosyayı silmek.

Silenen bir dizin/dosyayı geri getirmek için bir kaç yöntem var.

1. Eski sürmü checkout etme.
Bu en hızlı geri alma yöntemidir. İlgili dosyayı içeren eski bir revizyonu ayrı bir dizini checkout yaparak dosyaları ulaşabilirsiniz. Sonrasında bu silinen dosyaları en güncel revizyonun olduğu dizine taşıyabilirsiniz. Örneğin silinen testdir dizinimiz projemizin 6. revizyonunda oldugunu biliyorsak.
Aşağıdaki komutla bu sürümü checkout edebiliriz.


$ svn co -r 6  http://192.168.1.100/svn/surgate/trunk surgaterev6
A    surgaterev6/test2.txt
A    surgaterev6/test.txt
A    surgaterev6/testdir
A    surgaterev6/testdir/b.txt
A    surgaterev6/testdir/a.txt
Checked out revision 6.


İlgili dizini en güncel sürümün oldugu dizine atalım.

$ cp -pr surgaterev6/testdir surgate-trunk/testdir
$ cd surgate-trunk
$ svn add testdir
$ svn ci

2. Yöntem: Yapılan güncellemeyi geri alma

Yerelde bulunan en güncel proje dizininde iken yapılan işlemi(change) geri alabilirsiniz.
Eğer silme işlemini 8 revizyonda yaptıysanız svn merge ile bu değişikliği geri alabilirsiniz.

$ svn merge http://192.168.1.100/svn/surgate/trunk/   -c -8
--- Reverse-merging r8 into '.':
A    testdir
A    testdir/b.txt
A    testdir/a.txt
--- Recording mergeinfo for reverse merge of r8 into '.':
 U   .
--- Eliding mergeinfo from '.':
 U   .


Not: revizyon numarası verirken 8'in başındaki "-" ye dikkat ediniz.
Bu işlem sonucunda bazı tutarsızlıklar(conflicts) olabilir. bunların elle düzeltilmesi gerekir.