Check-in kodunda çakışma işaretleyicileri bırakmanın bir gerekçesi var mı?


14

Çatışma belirteçlerini düşünün. yani:

<<<<<<< branch
blah blah this
=======
blah blah that
>>>>>>> HEAD

Beni bu soruyu göndermeye motive eden özel durumda, sorumlu ekip şubemize yukarıdan bir birleşmeyi tamamlamıştı ve bazı durumlarda bunları yorum olarak, yeni olan şeylerle ilgili bir tür belge olarak bırakmıştı. çözüldü. Derlenmiş bir durumda bıraktı, testler geçti, bu yüzden düşündüğünüz kadar kötü değil.

İçgüdüsel olarak, buna gerçekten itiraz ettim, ancak şeytanları kendim savunucusu olarak neden yaptığını görebiliyorum:

  • çünkü birleştirme sonucunda nelerin değiştiğini diğer takım geliştiricilerine vurgular.
  • çünkü belirli kod parçaları konusunda daha uzman olanlar, yorumlarla gösterilen endişeleri giderebilir, böylece tahmin etmek zorunda kalmazlar.
  • çünkü akış yukarı birleştirme doğru bir acıdır ve her şeyi iyi ve tamamen çözme zamanını haklı çıkarmak zor olabilir, bu yüzden bazı yarı-tam FIXME uyarısı gereklidir, bu yüzden neden orijinal çatışmayı bunu belgelemek için bir yorum olarak kullanmıyorsunuz?

İtirazım içgüdüseldi, ama bunu akılcı bir şekilde haklı çıkarmak ya da konumumu daha akıllıca görmek istiyorum. Herkes bana başkalarının bunu yaparken kötü zaman geçirdikleri bazı örnekler ve hatta deneyimler verebilir ve / veya bunun kötü uygulama nedenleri (veya şeytanın savunucusunu oynayabilir ve destekleyebilir).

Kendi acil endişem, ilgili dosyalardan birini düzenlemiş olsaydım, değişiklikleri çekmiş olsaydım, gerçek çatışmalara sahip olsaydım, ama yorumlarda bulunmuş olsaydı açıkça sinir bozucu olurdu. O zaman gerçekten çok dağınık bir dosya olurdu. Neyse ki bu olmadı.


1
Bu hangi sürüm kontrol sistemi?
c69

Bunların yanlışlıkla bırakıldığından emin misiniz? Belki birisi farkları görmeye gitti ve çatışmaları birleştirmeden kurtardı. Bunu SmartSVN ile daha önce gördüm
CamelBlues

1
budala. Üzgünüm, etiketlemedim çünkü gerçek VCS'nin alakalı olduğunu hissetmedim. Kasten birkaç dosyada birkaç dosyada kontrol edildi. Kazayla bir ya da iki kez affedilebileceğine katılıyorum.
Benedict

"Eğer ilgili dosyalardan birini düzenliyor olsaydım, değişiklikleri çektim, gerçek çatışmalar yaşadım, ama yorumlananları da çektim. Sonra gerçekten çok dağınık bir dosya olurdu." Kulağa benzer yorumlar gibi geliyor // MatrixFrog 10/25/2011: Updated this function to fix bug #1234. Eğer böyle şeyler görürsem, bence, "Ne? Bunun için ne git blamevar!"
MatrixFrog

Yanıtlar:


27

Bu kesinlikle yanlış. Değişiklikleri takip etmek sürüm kontrol sisteminin görevidir ve birleştirme sonucunda neyin değiştiğini göstermek diff araçlarının görevidir. Taahhüt günlüğünde ve belki kodda neyin değiştiğini ve nedenini açıklayan bir yorum olmalıdır. Ancak IMHO, çatışma işaretleyicilerini yorum olarak bırakmak, ölü kodu etrafta bırakmakla aynı şeydir.


5

Bazı kod ya da (bir şekilde davanıza benzer) yorum ya da aslında herhangi bir yerde çağrılmayan bir yönteme taşındı benzer bir sorun yaşadım. İnsanların bunu neden yaptıkları sorulduğunda yanıt, hala bazı kod blokları olduğunda biraz daha güvende hissetmeleriydi. En bariz karşı argüman, onların değil VCS işi olmasıdır. Ancak başka bir yönü daha var. Başka biri öğrenirken veya değişiklik yaparken kod okuyorsa, muhtemelen böyle bir yorum ile yan takip edilecektir. Kesinlikle okuyacak ve belki de neden burada olduğunu ve mevcut işiyle ne tür bir korelasyonu olduğunu anlamak için biraz zaman harcayacak. Bir çatışma işareti zaten çözülmüş olan bir çatışmanın belirtisi olduğundan, bu kesinlikle bir zaman kaybıdır.


4

Bence yorumların oradaki koda, geçmişte var olan koda, ne de geçmişte koda olan olaylara veya paralel bir evrende (başka bir dalda) var olan koda başvurması gerektiğini düşünüyorum Geçtiğimiz. İşaretçileri ekip üyelerinizin yaptığı gibi bırakmak en az üç sorun yaratır:

  1. Orijinal kod muhtemelen böyle bir şeydi blah blah nullve hata raporu "Orada null kullanılamaz, bunu ya da bunu ya da herhangi bir şekilde kullanamazsınız" dedi. Böylece iki kişi bağımsız olarak hatayı düzeltti ve düzeltmeler birleştirildiğinde çatışma ortaya çıktı. Şimdi yorum, sorunun ne olduğunu ya da düzeltmenin ne olduğunu değil, sadece geçmişte bir noktada iki farklı düzeltme olduğunu belgeliyor. Bu çok yardımcı değil. Gibi bir yorum //blah blah needs a non-null argumenten azından neyin değiştiğine dair bir gösterge verecektir (ve bu bilgi bile sürüm kontrol sisteminin taahhüt yorumundan daha kolay elde edilebilir).
  2. Birleştirilmiş sürüm orijinal satırlardan birine bile benzemeyebilir. Belki falan filanın bunu almasını istiyorsanız, doğru form, blah blah (this,that)hatta daha karmaşık bir şeydir. Bu durumda, çakışma mesajını yorum olarak bırakmak, kodu daha sonra okumaya çalışan herkesi kesinlikle karıştıracaktır.
  3. Çoğu sürüm kontrol sistemi proje geçmişine erişmenizi sağlar. Örneğin, eclipse (svn ile) bir dosyaya sağ tıklayabilir, "Geçmişi Göster ..." ve ardından "Geçerli ile karşılaştır ..." diyebilir ve farklılıkları vurgulayan bir fark penceresi elde edebilirim. fark vurguları gerçek farklılıkları içeriyorsa, grok için daha kolay değil, yorumlarda bulunmaz.Koddaki her işlevsel olmayan değişiklik, bu farkın okunmasını zorlaştırır.

-1

Check-in kodundaki çakışma işaretleri ne kadar can sıkıcı?

Çok sinir bozucu.


1
Üzgünüm ama bu cevap gerçekten hiçbir şey eklemiyor. En iyi yorum olmalıydı.
Adam Lear
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.