SVN, dosya iki dala eklendiğinde yeni ağaç çakışmalarını çözme


95

Her iki dala bir dosyanın eklendiği (ve daha sonra bu ayrı dallarda çalışıldığı) birkaç dalı birleştirirken (SVN 1.6.1 kullanarak) yeni ağaç çatışmalarından birini alıyorum:

      C foo.txt
  >   local obstruction, incoming add upon merge

Her iki daldaki değişikliklere ihtiyacım var, ancak ağaç çatışması bana olağan .working, .merge-left ve .merge-right dosyalarını vermiyor - bu, çatışmanın doğası gereği anlaşılabilir. Bu çatışmalardan epeyce var ve her dalda aynı dosyanın silinmesinin meydana geldiği, ancak çözülmesi basit.

Bu sorunu nasıl çözebilirim? SVN redbean kitabı (1.6 için) bu durumu kapsamaz.

Yanıtlar:


40

"Tree Conflict" tasarım belgesinin eski bir sürümünde (2009) bahsedildiği gibi :

Sürümü belirlenmiş dosya ekleme işleminden XFAIL çakışması

Bu test, mevcut sürümü belirlenmiş bir dosyaya geçmiş olmadan dosya eklemesi getiren bir birleştirme yapar .
Bu, local obstruction, incoming add upon mergeçeşitlilik dosyasında bir ağaç çatışması olmalıdır . R35341'deki sabit beklentiler.

(Bu arada ClearCase'de buna "kötü ikizler" de denir):
bir dosya iki farklı dalda iki kez oluşturulur (burada iki kez "eklenir"), iki farklı öğe için ancak aynı adla iki farklı geçmiş oluşturulur.

Teorik çözüm, bu dosyaları (harici bir diff aracı ile) hedef dalda manuel olarak birleştirmektir ' B2'.

Hala kaynak dal üzerinde çalışıyorsanız, ideal senaryo, o dosyayı kaynak daldan kaldırmak, bu dosyayı görünür kılmak için B1yeniden ile birleştirmektir (daha sonra aynı öğe üzerinde çalışacaksınız). Birleştirmeler yalnızca ile arasında gerçekleştiği için geri birleştirme mümkün değilse , her bir birleştirme için el ile birleştirme gerekli olacaktır .B2B1B1
B1B2B1->B2


2
"Ağaç çatışması" tasarım dokümanı bağlantı
bozuldu

4
İşin komik yanı, eklenen dosyaların ikisi de aynı olsa bile, yine de çelişkili olarak görünmeleri. Bu gerçekten bir çatışma olarak işaretlenmemelidir.
SantiBailors

1
@SantiBailors Çok komik şu anda ölüyorum. Eski dostum için ölüyorum git ...
Kış

164

Bunun için bir çözüm öneren bir gönderi buldum . Çalıştırmak üzere:

svn resolve --accept working <YourPath>

bu, yerel sürüm dosyalarını Tamam olarak talep edecektir.
Tek dosya veya tüm proje katalogları için çalıştırabilirsiniz.


2
Teşekkürler, bu aynı zamanda çözer: C foo.txt> yerel ekleme, güncelleme üzerine gelen ekleme
lazysoundsystem

5
teşekkürler benim için de çalıştı ama bunu yapmak zorundaydım: svn
resolver --acceptfILENAME

5
evet bir dosya adına ihtiyacınız var. Kabul eder. (mevcut dizin). Ayrıca bunu yinelemeli olarak yapmam gerekiyordu, böylece: "svn resol --accept work --recursive." Çalışma kopya lehine giderir her şey (! Bunu yaparken çatışmaları çözerken tehlikeli Sen her zaman olduğu gibi, uzakta başka insanların değişiklikleri üfleme olabilir)
Harry Ahşap

Ağaçla çakışan tüm dosyaları listelemek için oluşturduğum bir takma ad kullanıyorum: alias mtc='stat | awk "BEGIN { FS=\" \" } /^.{6}C/ { print \$NF }"' O zaman bunu çözümleme komutunun argümanı olarak kullanabilirim, şöyle: svn resolve --accept working $(mtc)
Earl Jenkins

1
Aslında kaynağı da belirtmeniz gerekiyor, örneğin: svn resolve --accept working path/index.html
Tomasz Kuter

9

Ya gelen değişiklikler sizin istediğiniz değişikliklerse? Svn çözümlemesini çalıştıramıyorum - onlarınkini tam olarak kabul et

svn çözümleme - tabanı kabul et


4
Sanırım soruyu yanlış anladım. 'taban', gerçekten, 'svn çözme' kullanılırken 'tam onlarınkine' eşdeğerdir, ancak sorununuzu çözmez. Bunun yerine yaptığım şey onu iki kısma bölmekti: 1) Yerel çakışan dizinimi (veya dosyamı) sil, 2) Birleştir. Bu, çakışma olmadan çalışmalı ve 'gelen değişiklikler istediğiniz gibi' olduğundan, silinen öğeler umurumda değil
Gabriel FT Gomes

3

Yukarıdaki user619330'un tavsiyelerine uymaya çalışırken kendimi iyice sıkıştırmayı başardım. Durum şuydu: (1): İlk şubem olan şube1 üzerinde çalışırken bazı dosyalar eklemiştim; (2) Daha fazla geliştirme için yeni bir şube oluşturdum, şubeyi2, onu gövdeden ayırdım ve sonra değişikliklerimi şube1'den birleştirdim (3) Bir iş arkadaşım modlarımı şube1'den kendi şubesine kopyaladı, daha fazla mod ekledi, ve sonra gövdeye geri birleştirildi; (4) Şimdi ana hattaki en son değişiklikleri mevcut çalışma şubem olan şube2 ile birleştirmek istedim. Bu svn 1.6.17 ile.

Birleştirme işleminde yeni dosyalarla ağaç çakışmaları vardı ve yeni sürümün farklı oldukları ana hattan olmasını istedim, bu nedenle, branch2'nin temiz bir kopyasından, çakışan dosyaları bir svn sildim, bu branch2 değişikliklerini yaptım (böylece geçici bir Branch2 sürümünün söz konusu dosyalar olmadan) ve sonra gövdeden birleştirmemi yaptı. Bunu yaptım çünkü geçmişin ana versiyonla eşleşmesini istedim, böylece daha sonra bagaja geri dönmeye çalışırken daha fazla sorun yaşamazdım. Birleştirme iyi gitti, dosyaların ana sürümünü aldım, svn st tamam gösteriyor ve sonra değişiklikleri gerçekleştirmeye çalışırken, daha önce yaptığım silme ile birleştirmeden ekleme arasında daha fazla ağaç çakışmasına rastladım. Bir svn çatışmaları benim çalışma kopyam lehine çözdü (artık dosyaların gövde versiyonuna sahipti) ve onu işlemeye başladım.

Hayır. Branch2'nin başka bir kopyasının güncellenmesi, dosyaların eski sürümüyle sonuçlandı (ön gövde birleştirme). Şimdi, Branch2'nin iki farklı çalışma kopyasına sahibim, sözde aynı sürüme güncellenmiş, dosyaların iki farklı sürümüyle ve her ikisi de tamamen güncel olduklarını söylüyor! Branch2'nin temiz bir kopyasını kontrol etmek, dosyaların eski (ön bagaj) sürümüyle sonuçlandı. Bunları ana hat sürümüne manuel olarak güncellerim ve değişiklikleri uygularım, ilk çalışma kopyama geri dönüyorum (gövde değişikliklerini orijinal olarak göndermiştim), güncellemeye çalışıyorum ve şimdi söz konusu dosyalarda bir sağlama toplamı hatası alıyorum. Söz konusu dizini uçurun, güncelleme yoluyla yeni bir sürüm edinin ve sonunda gövde değişiklikleriyle birlikte branch2'nin iyi bir sürümüne sahip olacağım. Umuyorum. Uyarı geliştirici.

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.