Gereksiz svn: mergeinfo özelliklerini kaldır


136

Depomda bir şeyleri birleştirdiğimde Subversion svn:mergeinfo, birleştirmek istediğim şeylerle tamamen alakasız olan dosyalara birçok özellik eklemek / değiştirmek istiyor .

Bu davranışla ilgili sorular daha önce Stack Overflow'da sorulmuştur:

Yukarıda bahsettiğim konulardan anladığım kadarıyla, veri havuzumdaki birçok dosya svn:mergeinfo, ne zaman olmamalılar üzerinde , açık özelliklere sahip gibi görünüyor . Öneri miktarı azaltmak ve bu özellikleri yalnızca ilgili dosyalara / klasörlere koymaktır.

Peki şimdi sorum: Bu gereksiz özellikleri nasıl kolayca kaldırabilirim? TortoiseSVN kullanıyorum, ancak yüzlerce dosyayı manuel olarak kontrol etme / düzeltme konusunda isteksizim. Bu gereksiz svn:mergeinfoözellikleri kaldırmanın daha kolay bir yolu var mı ?

PS C ++ SVN API kodu aramıyorum .

Yanıtlar:


142

İşte tüm alt ağaç svn: mergeinfo özelliklerini silmenin ancak kök klasöründe silmenin başka bir yolu (bu, dallamanın düzgün çalışması için gereklidir).

Projenin kökünden şunları yapın:

svn propdel svn:mergeinfo -R
svn revert .
svn ci -m "Removed mergeinfo"

57
Veya bunu kök dizininde yapmayın "svn propdel -R svn: mergeinfo ./*"
JeremyWeir

3
"svn propdel -R svn: mergeinfo ./* ./.[^.ülür*" da "dot" / * ix gizli dosyalarınız varsa, muhtemelen soru başına bir Windows kullanıcısı için sorun olmaz.
Peter

3
çıktıları bastırmak hızlandırır: "svn propdel svn: mergeinfo -R> nul" (veya> / dev / null Linux kullanarak)
bebbo

2
@JeremyWeir "Sadece kök dizininde yapma" ile ne demek istiyorsun? O zaman nereden? Bu yorumda çok fazla oyunuz var, ancak alternatifi görmüyorum.
TT.

3
@TT. Fikir sadece tüm berbat birleştirme bilgi olan dir oraya gitmek ve oradan yapmak olduğunu, bu yüzden kök dizini geri almak zorunda değilsiniz. Kökün birleşmesiyle uğraşmak istemezsiniz.
JeremyWeir

15

İşte tüm alt ağaç svn: mergeinfo özelliklerini silmenin bir yolu. Deponuzun kökü içinde çalıştırın:

svn propget svn:mergeinfo --depth=infinity 
    | grep -v "^/"
    | grep -v "^\."   
    | cut -d- -f1 
    | xargs svn propdel svn:mergeinfo

Kolay kopyalama / yapıştırma için hepsi bir satırda:

svn propget svn:mergeinfo --depth=infinity | grep -v "^/" | grep -v "^\." | cut -d- -f1 | xargs svn propdel svn:mergeinfo

Bunun çalıştırılmadan önce hangi dosyaları etkileyeceğini önizlemek için son "propdel" i "propget" olarak değiştirin veya son xargs borusunu tamamen kaldırın.


2
Dosyalardaki tirelerle çalışır: svn propget -R svn: mergeinfo | grep -v "^ /" | grep -v "^ \." | kesim "-d" -f1 | xargs svn propvel svn: mergeinfo
Sincap

12

Bahsedildiği gibi bu konuya :

  • Çoğu boş mergeinfo ("blank"), kaynak öğenin açık bir mergeinfo'sunun olmadığı çalışma kopyalarının / hareketlerinin kopyalanmasından kaynaklanabilir. 1.6 SVN kullanmadığınız sürece propdel kullanmak çözüm olabilir: 1.5.5'ten beri bu WC-WC kopyaları artık hedefte boş birleştirme oluşturmaz
  • önceki bir svn taşıma (yeniden adlandırma) yeniden yapılandırma işlemi de kök dizininde bırakmak yerine, mergeinfo'yu yayabilir
  • Gelecek bir 1.6.2 sürümünde düzeltilecek ve 1.5'te geri taşınacak 3393 vakası tarafından takip edilen potansiyel bir hafıza sorunu var

6

Körlüğe güvenmediğim için svn:merge-info özellik silme için, çalışan bir kopyadaki mevcut durumu analiz etmek ve kök olmayan birleştirme bilgisi özelliklerinden mümkün olduğunca çok sayıda birleştirme düzeltmesini kaldırmak için bir araç uyguladım. İlave insan kontrol ve kontrollerinden sonra, çalışma kopyasındaki değişiklikler yapılabilir.

İşte: svn-clean-mergeinfo

Geliştirilmesi için kullanımıyla ilgili herhangi bir sorunu bildirmekten çekinmeyin.

Subversion 1.10 bu göreve adanmış yeni bir araç sunuyor: svn-mergeinfo-normalizer


2
Bu araç, büyük bir ekipte mükemmel şekilde koordine edilmiş geliştiricilerin oluşturabileceği kısmi alt dizin birleştirmeleriyle oluşturulan türler gibi birleştirme bilgisi özelliklerini birleştirmek için mükemmeldir. Araç, her dalda bulunmayan dosyalarla ilgili bir sorun var gibi görünüyor, dosyada artık bulunmayan dallardaki revizyonları gösteren dosyalarda artık birleştirme bilgisi özellikleri alıyorum.
davenpcj

Mükemmel olmadığına katılıyorum ... bu yüzden "insan kontrolleri ve kontrolleri" hala gerekli. Sizin durumunuzda, birleştirme bilgisi özelliklerinde ilgili olmayan düzeltmeler belirlediyseniz, taahhüt etmeden önce bu düzeltmeleri veya söz konusu dosyalardaki tüm svn: merge-info özelliğini kaldırabilirsiniz. Geliştirmeler için lütfen github kullanın.
Yves Martin

4

Bir süre geçtiğini biliyorum, ama benzer bir problemle karşılaştım. TortoiseSVN 1.6.7 kullanıyorum. Bu özellik, çalışma kopyamın kökünde olduğu gibi oldu. Kökteki özellikleri görüntülediğimde ve svn: mergeinfo'da Kaldır'ı tıklattığımda, yinelemeli olarak kaldırmak isteyip istemediğimi sordu. Bu benim svn: mergeinfo cockups kurtuldu.


Aynı durumdaydım. Benim için çalıştı. Teşekkürler!
andrewd18

2

Mergeinfo özelliklerini toplu olarak kaldırmak istediğinizden eminseniz, aşağıdaki BASH komut dosyasını kullanabilirsiniz.

FILES=`svn status |grep "^ M      " |sed s/" M      "// |tr '\n', ' '`
svn revert $FILES

Değiştirilen dosyaların bir listesini alır, yalnızca değişiklikleri birleştirmek için filtreler, gerçek dosya yolu hariç her şeyi şeritler halinde ayırır, satır başına bir yolu boşlukla ayrılmış bir listeye dönüştürür ve çağrılar bu listeye geri döner.


2
Teşekkürler, ancak benden TortoiseSVN'den bahsetmiş olabileceğiniz gibi, ben bir Windows kullanıcısıyım ve Bash kabuğunu
kullanmıyorum

Aynı şey DOS'ta da mümkün olmalı, ancak muhtemelen aynı derecede değil.
Chase Seibert

1
Bu yalnızca geçerli çalışma dizininde değiştirilmiş mergeinfo'lu dosyaları geri almaz mı? Öyleyse, sorunu ele almaz: mevcut açık mergeinfo. Bunun için propdel yapmanız gerekir.
Dominic Scheirlinck

2
Bu oldukça buggy - adında boşluk olan bir dosya adı var mı? Onun adına glob karakterlerle mi? Her iki durumda da kötü haber. Çıkışı svn durumundan ayrıştırmanın onaylanmış / desteklenen yolu, --xmlbayrak ve bir XML ayrıştırıcı kullanmaktır; metin çıktı biçiminde ileriye uyumluluk garanti edilmediğinden, sürümler arasında başka bir şey değişebilir.
Charles Duffy

2

Mergeinfo özelliklerini körü körüne silmek yerine, "eksik" birleştirmeleri tamamlamak da mümkündür.

Kök klasörden mergeinfo özelliğini kopyalayın ve ardından uygun göreli yol ve tam olarak aynı düzeltme listesi için alt klasörde birleştirme gerçekleştirin. (Yalnızca bu liste ile alt klasörde bulunanlar arasındaki farkları listeleyebilirsiniz, ancak zorunlu değildir.)

Normalde bu birleştirme, gerçek dosyaları değil, yalnızca mergeinfo özelliklerini değiştirmelidir. (Dosyaların değiştirilmesiyle sonuçlanırsa, önceki birleştirmelerden birinin yalnızca kısmi bir birleştirme olması gerekir; bu da yine de sorunlara neden olmuş olabilir.)

Bunu yaptığınızda, ikisinin de tam olarak eşleşmesini sağladıktan sonra, sizin için mergeinfo özelliğini silmeniz gerekir. Bunun tersini de yapmanız gerekebilir: yalnızca alt klasörde bulunan birleştirme revizyonlarını kökte birleştirin (yine, tam listeyi yapıştırabilir ve SVN'nin sizin için farklılıkları bulmasına izin verebilirsiniz).


1

Bir dizin yapısında değişiklik yapmak için bu (yalnızca DOS olmayan 'find') olacaktır:

find . -path "*/.svn" -prune -or -exec svn propdel svn:mergeinfo '{}' \;

1.5 sunucuya bağlı 1.6.12 bir istemci çalıştıran benzer bir sorun var; Orada ise kendi svn ihtiyacı projede bir alt dizin: mergeinfo ama ( "svn: ignore *" ile ./var altında 5 dizinleri dahil) 121 tür girdileri olan biraz uygunsuz görünüyor. Bu nedenle, açıkça gereksiz birleştirme bilgilerini kaldırabilen ve diğer farklılıkları anlatabilen bir (örn. Python) komut dosyasına sahip olmak güzel olurdu ...

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.