SVN depomdaki düzeltmeleri silmek istiyorum


33

Kod depomdaki son değişiklikler bozulmuş ve uygulamamı dengesizleştirdi. Daha önceki bir revizyona dönmek istiyorum.

Ancak çalışma kopyamda 'geri alma'yı kullanmak istemiyorum; Aslında benim revizyonumu ve repo'mdan önceki birkaç revizyonu silmek istiyorum, böylece repo'mu baş revizyonu olacak daha önceki bir revizyona “geri döndürdüm”. Bunu nasıl yapacağımı bilen var mı?


1
Eski revizyonları gerçekten silemezsiniz, tek yapmanız gereken değişiklikleri tersine çevirmek ve Felix'in dediği gibi bunu taahhüt etmek. İlginç sidenote, Git (yanı sıra diğer sürüm kontrolü çözümleri) aslında izin vermez sen gerçekten silme revizyonları ..
Davr

3
Evet, svnadmin ile SVN deposuna erişmeniz yeterlidir. Aşağıdaki cevaba bakınız.
martin

Davr teknik olarak doğru. Tanımladığınız şey kötü olanlar dışındaki tüm revizyonları atmak, sonra bunu eski reponun üstüne atmaktır. Aklımda bu gerçekten bir revizyon 'silme' ile aynı şey değil.
Sirex

Yanıtlar:


12

Belki bu bağlantı size yardımcı olur:

http://www.sampablokuper.com/2009/03/27/svn-revert-to-revision/

Alıntı:

  1. Çalışma kopyanızın içindeki en üst dizine geçin (çalışma kopyasının tamamını geri almak istediğinizi varsayarak).

  2. svn revertçalışma kopyanızın dosyalarını en son işlediğiniz / teslim aldığınızdaki durumuna geri döndürmek için çalıştırın .

  3. svn status -vÇalışma kopyanızın artık hangi revizyon numarasına karşılık geldiğini görmek için çalıştırın (bu, listedeki en yüksek revizyon numarasıdır svn status -v).

  4. çalıştırmak svn merge -rXX:YYnerede XXbir önceki adımda elde edilen sayıdır ve YYgeri döndürmek istediğiniz revizyon sayısıdır.

  5. Bitti! Bunun muhtemel istisnası, çalışma kopyanızda düzeltme YYyapıldığında var olmayan ve orijinal olarak svn'nin bir şeyleri kaldırmadığı için hala orada olacağıdır. Onlardan kurtulmak istiyorsanız svn del [filename], her birine birer koşun .

  6. Aferin! Şimdi çalışma kopyanızla tüm bu ara düzenlemeler hiç olmamış gibi oynayın. Çabalarınızı vermeye hazır olduğunuzda, her zamanki gibi svn taahhütünü kullanın!


1
Windows Os'ta, seçenek # 4 çalışması svn merge -rXX:YY .Geçerli dizine başvurmak için satırın sonuna bir nokta koymayı unutmayın. Ve TortoiseSVN'de birleştirme işlemini tersine çevirme seçeneği var.
Shantha Kumara

3
Bu aslında “daha ​​baştan revizyon, bu da baş revizyon haline gelecektir” e dönüşmez. Eski revizyonu HEAD yapmaz. Aksine, yeni bir HEAD oluşturur. Martin'in cevabını görün.
Matthew Flaschen

Yanıtı, Shantha'nın takip eden dönemle ilgili yorumlarını içerecek şekilde değiştirdim. Bu aynı * nix'te de aynıdır.
Mike Kormendy

72

Bu benim için çalıştı. HEAD olarak 1234 revizyonuna sahip olduğunuz ve son üç komisyonu geri almak istediğiniz için:

svnadmin create newrepo
svnadmin dump -r 0:1231 repo | svnadmin load newrepo
mv repo oldrepo
mv newrepo repo

12
+1. Soruyu hem anlayan hem de belirli bir cevap veren tek kişisin.
Matthew Flaschen

6
Bu teknik olarak doğru cevap. Bununla birlikte, bunun oldukça karmaşık olmasının yanı sıra, yapılacak tüm kopyaları da geçersiz kılacağına dikkat edilmelidir - bu nedenle repoyu kullanan herkesi de uyarmanız gerekir.
Aralık'ta

1
Çabuk ve kolay ve konuya ve gerçekte posterin istediği şeye.
unc0nnn 'te 11.03 Nisanda

7
Ayrıca, depo UUID'sini yeni depoya da kopyaladığınızdan emin olun (bkz. "Svnadmin setuuid", UUID’den eski depodaki "svn bilgisi" kısmına kopyalama), geçersiz kılınmak.
Bryan Petty

1
Yeni depolarda, dosya izinlerini düzeltmeniz veya kanca / conf dizinlerindeki dosyalara kopyalamanız gerekebilir
AdamS

5

Bunun eski bir soru olduğunu biliyorum, ancak bunun Windows / TortoiseSVN ile nasıl yapıldığını buldum.

Bir yorumun önerdiği gibi, bir düzeltmeyi "silemezsiniz", ancak yapabileceğiniz şey, geri almak istediğiniz revizyonla aynı olan daha güncel bir revizyon yapmaktır.

  1. Düzeltmeyi geri almak istediğiniz dizinin havuzun başlığını kontrol edin.
  2. TortoiseSVN'deki "Günlüğü Göster" görünümünü, geri almak istediğiniz en üst düzey dizin için yükleyin (örn. "Trunk").
  3. Kaldırmak istediğiniz revizyona sağ tıklayın NOT: Bu, geri almak istediğiniz revizyon değil kaldırmak istediğiniz revizyondur.
  4. "Bu revizyondaki değişiklikleri geri al" seçeneğini seçin.
  5. İstemde "Evet" i tıklayın.
  6. Çıkış işlemini normal olarak ancak "HEAD" olarak güncelleyin.
  7. Geri ver onu.

Daha sonra, teslim alınmış olan herkese gidip güncellemeleri ve yeni dosyaları kaldırdıklarından emin olmalarını sağlayacaksınız.

Ayrıca, herkesin bu düzeltmenin ne olduğunu bildiğinden ve açıklamasını güncellediğinden emin olmanız gerekir.


Bunun normal "geri alma" prosedüründen farkı nedir?
Tomer W.

Bir Geri Alma, çalışma kopyanızı yalnızca depodakilere göre değiştirir ... bu, bir raporun BAŞKANI'nın önceki herhangi bir taahhüdün durumunu yansıtmasını sağlar.
Martin

1
Bunun için teşekkürler - Bunu yapmak için kaplumbağa SVN yolu, hatalı bir taahhüdümü geri almak için ihtiyacım olan şeydi :)
Dr. Andrew Burnett-Thompson

Ayrıca Günlük penceresinde " Bu revizyona geri dön " içerik menüsü girişi de vardır .
Uwe Keim

4

Bu amaç için boşaltma / yük kullanabilirsiniz.

Bazı revizyonların yedeğini almak için svnsync'i de kullanabilirsiniz.

Büyük bir depo varsa, zaman alır.


3

Benim için (VisualSVN, 30-HEAD) bu işe yarıyor:

  del C: \ Depolar \ MyRepo \ revs \ 0 \ 30
  del C: \ Depolar \ MyRepo \ revs \ 0 \ 29
  del C: \ Depolar \ MyRepo \ revs \ 0 \ 28
  del C: \ Depolar \ MyRepo \ revprops \ 0 \ 30
  del C: \ Depolar \ MyRepo \ revprops \ 0 \ 29
  del C: \ Depolar \ MyRepo \ revprops \ 0 \ 28
  echo 27> C: \ Depolar \ MyRepo \ db \ current
  


Bu diğer cevaplardan daha iyi nasıl olabilir?
Toto

Çok daha hızlı.
Anton Golikhoff

0

Terminale gidin ve svn deposuna gidin: şimdi yazın

svn güncelleme - r "geri almak istediğiniz revizyon numarası"


2
Süper Kullanıcıya Hoşgeldiniz! Lütfen soruyu tekrar dikkatlice okuyunuz. Yanıtınız yok değil orijinal soruya cevap. OP, "Çalışma
kopyasımda
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.