Bir SVN kasasında yerel değişiklikler nasıl silinir?


197

Açık Kaynak Projesi için inceleme için bir fark göndermek istedim .

SVN (terminal, Ubuntu) kullanarak kodu aldım. Birkaç dosyada küçük düzenlemeler yaptım. Şimdi göndermek istediğim tek bir değişiklik var. Yaptığım değişikliklerin geri kalanı hata ayıklamak içindi ve artık gerekli değil.

Diff kullanarak oluşturduk svn di > ~/os/firstdiff.diff

Yani sorum, Yerel değişikliklerimi nasıl silebilirim?

Bunu yapmanın bir SVN yolu var mı? Değilse, her dosyaya gitmem ve tüm düzenlemelerimi silmem gerekecek. Sonra yeni bir fark üretir ve gönderirim.

Yanıtlar:


254

Sadece svn revertkomutu kullanın, örneğin:

svn revert some_file.php

(Diğer her svn komutu gibi) svnbook kaynağında veya man sayfasında veya hatta komutla iyi belgelenmiştir svn help.


2
Ancak Vinayak, yerel ilgisiz değişikliklerini kendisi için tutmak isteyebilir.
Basile Starynkevitch

2
@BasileStarynkevitch: Soruyu tekrar okudum ve diğer değişikliklerin gerekli olmadığı anlaşılıyor: "" "Yaptığım değişikliklerin geri kalanı temelde hata ayıklamak içindi ve artık gerekli değil." "" :)
Cédric Julien

1
Evet ... ama onları kendisi için daha da uzak tutmak isteyebilir ... (Sorusu her iki şekilde de anlaşılabilir).
Basile Starynkevitch

193

Svn revert komutunu kullanarak tüm değişiklikleri geri almanız gerekir :

  • Bir dosyadaki değişiklikleri geri alma: svn revert foo.c
  • Tüm dosya dizinini geri alma: svn revert --recursive .

1
svn 1.1 referansı google tarafından verilen ilk bağlantı olmasına rağmen biraz eskidir ;)
Cédric Julien

Görünüşe göre dosya adınızdaki bazı karakterler yok sayılabilir. örneğin icon@2x.png. svn geri döndür icon@2x.png. svn diyor 'Simge' atlandı.
Mart'ta topwik

1
Bu en iyi cevap. Kontrol edilmelidir.
rickfoosusa

12
svn revert --recursive .Bana yardımcı olan çok .
Paul Vargas

--recursiveParametre herhangi bir yerel değişikliği geri aldığından ve bu soru kabul edildiğinden, bu cevap kabul edilmelidir .
arueckauer

15

Belirli bir dosyadaki yerel değişiklikleri silmek için:

$ svn revert example_directory/example_file.txt

Belirli bir klasördeki yerel değişiklikleri silmek için:

$ svn revert -R example_directory/

7

Basit svn revertorijinal poster için yeterliydi. Ancak, svn revertdaha genel bir durumda basit bir

  1. Eğer payı ve istediğiniz her iki düzenlemeleri var paylaşımına istemiyoruz olan düzenlemelerde de aynı dosyada ,
  2. var hala kendi özel yararına tutmak ilgilenen olduğunu yerel değişiklikler .

@ ErichBSchulz'un önerisi git add -pçok makul ve böyle bir durumda daha genel olarak uygulanabilir. Cevapta bazı ayrıntılar yoktu. Geçerli dizininizin paylaşılabilir yama yapmak istediğiniz dizin olduğunu varsayarsak, şöyle bir şey yapabilirsiniz:

  1. Alt sürümden farklı bir dizine bozulmamış sürümü kullanıma alma (burada alt dizin kullanarak mevcut olmayan bir dizin adı seçin TMP/).

    $ url=$(svn info . | awk '/^URL/ {print $2}')
    $ svn checkout "$url" TMP
    
  2. Bu bozulmamış svn kasasını temel olarak kullanarak, .svn dizinlerini yok sayarak bir git deposunu başlatın; svn'de her şeyi geçici git deponuza koyun

    $ cd TMP                                                     
    $ git init && echo ".svn/" > .gitignore
    $ git add -A && git commit
    $ cd ..
    
  3. Yeni hazırlanan git veri havuzu meta verilerini orijinal çalışma dizininize kopyalayın; bozulmamış yıkım ödeme dizini gerekli olmadığından, ondan kurtulabilirsiniz. Çalışma dizininiz artık git ve subversion deposudur:

    $ mv TMP/.git .
    $ rm -rf TMP/
    
  4. Artık git add -ptam olarak ne paylaşmak istediğinizi etkileşimli olarak seçmek için güçlü ve kullanışlı bir yöntem olarak kullanabilir ve onları git deponuza teslim edebilirsiniz. Taahhüt için dosya eklemeniz gerekiyorsa, daha git add <file-to-add>önce de yapıngit commit

    $ git add -p                            
    <interactively select (and edit) the chunks you want to share>
    $ git add ${the_list_of_files_not_in_yet_in_svn_you_want_to_add}
    $ git commit
    
  5. Taahhüdünü kullanarak, paylaşmak istediğiniz bir yama hazırlayın. Bu amaçla, git diff HEAD^..HEADya da kullanabilirsiniz git format-patch(ikincisi, yamayı veya birden çok yamayı içeren gönderilecek e-postaları doğrudan hazırlamak için kullanılabilir):

    $ git show -p HEAD > my-mighty-patch.patch
    

Git meta verilerinden kurtulmak için yapmanız yeterli rm -rf .git/. Orijinal çalışma dizini ile saldırıya devam etmeyi planlıyorsanız git, yerel değişikliklerinizi yönetmek için kullanmaya devam edebilirsiniz. Bu durumda muhtemelen nasıl kullanılacağını öğrenme yatırımından faydalanırsınız git svn.

Not: Buna aşina iseniz gitdoğaçlama yapmak oldukça önemsiz bir şeydir. Aksi takdirde bu biraz dağınık görünüyor. Git'i anlamadan kullanılabilecek svn için "etkileşimli kesinleştirme" veya "etkileşimli yama oluşturma" uygulamak için bu adımlardan bir komut dosyası yazarak yaklaşımı genelleştirebilirsiniz.


3
Herhangi bir açıklama yapmadan anonim -1 için çok teşekkür ederim. Her neyse, bu yaklaşımın ne zaman mantıklı olduğunu netleştirerek cevabı geliştirmek için zaman ayırdım.
FooF

2
Genişlediğiniz için çok teşekkürler. Benden +1! Endişelenme. Zor bir kalabalık.
ErichBSchulz

1
Yaşasın için teşekkürler, @ErichBSchulz! Yavaş yavaş dünyaya düşmanlara rağmen yaşamak için daha iyi bir yer yapıyoruz !!! ;-)
FooF

4

Kullanabilirsin

 svn diff important/file1.c important/file2.c > $HOME/os/firstdiff.diff

Farklılığınızı yayınlarken, farklı olduğunuz revizyonu söylemeyi unutmayın.

Diğerlerinin yanıtladığı gibi, svn revertdikkatli bir şekilde kullanabilirsiniz . Gelecekteki çalışmalarınız için yerel değişikliklerinizi korumak isteyip istemediğinize bağlıdır ...


+1 Bu, sorunun en iyi çözümü, ancak bu durumda tüm değişikliklerimden gerçekten kurtulmak istedim. Tabii ki, sürekli revertdeğişikliklerimi yapmak istemezdim . Bu yüzden gelecekte yolunuzu kullanırdım.
Vinayak Garg

3

Bu deponun kök dizinine gidin ve aşağıdaki komutu çalıştırın

svn revert --depth=infinity .

1
svn revert -R .daha kısa olabilir
jesjimher

1

Koymak istediğiniz dosyadaki commit komutunu kullanabilir ve kalan yerel değişiklikleri silmek için svn revert komutunu kullanabilirsiniz

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.