2011-09-01 17 views
5
  1. svn remove'i kullanarak bazı metin dosyalarını sildim. Ancak svn diff dosyadaki tüm içeriğin kaldırılması olarak gösterilir. Bu farkın bir yamasını uygulamak yalnızca içeriği değiştirir, dosyayı kaldırmaz.Svn kaldırıldıktan ve svn yeniden adlandırıldıktan sonra geçerli bir yama alın

  2. svn rename kullanarak ikili dosyalar içeren bir dizini yeniden adlandırdım. Normal svn diff'dan bir yama dosyası hiçbir şey yapmaz.

Yukarıdaki bağlantılardaki her iki yöntem de yalnızca dosyalar üzerinde değişiklik yapar. Bir yama uyguladıktan sonra kaldırılmazlar/yeniden adlandırılmazlar. Yukarıdaki değişimler için çalışan bir yama almak mümkün mü?

+0

Düzeltme ekini uyguladığınız içeriği kontrol ettiniz mi? – JVerstry

+0

@JVerstry Sorunuzu tam olarak anlamadım. Svn repo'nun farklı bir kopyasını kontrol ettim ve işe yarayıp yaramadığını test etmek için yamaları uygulamaya çalıştım. – Nufail

+0

Düzeltmeyi uyguladığınızda, bilgiler yalnızca gizli .svn dosyalarına kaydedilir. Ancak, bir dosya sadece bu svn repo'nun farklı kopyasını check-in işleminden sonra silinecektir. – JVerstry

cevap

5

:

-E veya --remove boş-files yamalar uygulandıktan sonra boşalan dosyalar çıkarın. Normalde bu seçenek gereksizdir, çünkü yaması, bir dosyanın yamadan sonra var olup olmadığını belirlemek için üstbilgideki zaman damgalarını deter‐ mayınına göre inceleyebilir. Ancak, giriş bir bağlam farkı değilse veya yama, POSIX'e uyuyorsa, , bu seçenek belirtilmedikçe, yama, boş yama dosyalarını kaldırmaz. Düzeltme eki bir dosyayı kaldırdığında, ayrıca boş ata dizinlerini de kaldırmaya çalışır.

1

bu deneyin:

patch -p0 -E < 1.patch && svn rm `svn st -q | grep ^! | cut -c 9-` 
+0

Teşekkürler. Bu geçici çözüm, 1. sorunu çözüyor. – Nufail

1

Ben OP'ın ikinci konu SVN 1.7 giderilmiştir bir SVN hata nedeniyle düşünüyorum. Bir dizin yapısını değiştirirsiniz (taşır, yeniden adlandırır, siler) ve bunu gerçekleştirirsiniz, ancak svn diff'u kullanırken, yamanın "hiçbir şey yapmaması" gerekir.

Dizinleri silerken bu sorunla karşılaştım ve belirtiler aynıydı, dolayısıyla aynı "root bug" ı deneyimlediğimizi varsayıyorum. Benim için, svn 1.7 güncellemesi onu çözdü, çünkü svn 1.7 farklı olarak farklı efektler (yamalar) üretir.

svn diff'un bazı sürümleri, taşınan/yeniden adlandırılan/silinmiş dosyaları farklılığa sokmaz!

Bak: http://svn.haxx.se/dev/archive-2004-03/0333.shtml. SVN DEV listesinden alınan bu arşivlenmiş e-postalar, devlerin kendilerini, on yıl önce 1.0.1'den önce piyasaya sürülen bu sorunu tanımladıklarını gösteriyor. Eğer ipliği takip ederseniz, o zaman düzeltmek için oldukça kararlı görünüyorlardı, ama 1,6 bile difinden bir şeyler bırakıyordu. 1.7'ye güncellemeliydim.

Temel olarak, eğer svn < 1.7 bir dizinin svn delete 'd olduğunu tespit ederse, bu tekrarlamayacak ve çocukları işlemeyecek, sadece orada duracak ve bu ağacın altına bir şey koymayacaktır. İstediğimiz bu değil, çocukların TÜMÜ için açık bir şekilde kaldırılmasını istiyoruz. Böylelikle yama, diğer cevaplarda da belirtildiği gibi, boş dosyaları ve dizinleri -E ile kaldırabilir. Dosya yamada değilse yama her şeyi yapamaz.

svn'yi kullanma 1.7 Daha önce yaptığım gibi aynı bir değişiklik yaptım ancak silinmiş bir dizinin altındaki her dosya, tüm satırların kaldırılması (boşaltma) işleminde olduğu gibi yamada açıkça belirtildi ve patch/quilt dosya ve klasörleri başarıyla kaldırdı. Davada hareket etmek veya yeniden adlandırmak için benzer bir şey olması gerektiğini düşünüyorum.

GOTCHAS: 1,7'ye yükseltmek, çalışma kopyalarınızı işe yaramaz halde bırakacaktır. Güncellemelerinizi güncellemeden önce yaptığınızdan emin olun. O zaman tekrar her şeyi kontrol etmelisin. Düzenleme: SVN 1.7 istemcisi, çalışma dizinlerinizi tamir olabilir, ancak yine de tekrar ödeme yapmanız gerekmeyebilir. Sadece farkında ol, böylece işini kaybetme.