Biz Subversion Geeks'iz ve Mercurial'ın faydalarını bilmek istiyoruz [kapalı]


22

Okudum ben bir Subversion geek'im, neden Mercurial, Git veya başka bir DVCS'yi göz önünde bulundurmalıyım .

İlgili bir takip sorum var. Bu soruyu okudum ve önerilen linkleri ve videoları okudum ve faydalarını görüyorum ama insanların hakkında konuştukları genel zihinsel düşünceleri göremiyorum.

Ekibimiz 60 projeden oluşan büyük bir kod tabanlı çalışan 8-10 geliştiricidir. Subversion kullanıyoruz ve ana bir bagajımız var. Bir geliştirici yeni bir Fogbugz vakası başlattığında, bir svn dalı oluştururlar, dalda işi yaparlar ve bittiğinde gövdeye geri dönerler. Zaman zaman şubede uzun süre kalabilirler ve değişiklikleri almak için gövdeyi şubeyle birleştirebilirler.

Linus'un bir şube yaratıp tekrar yapamayan insanlar hakkında konuşmasını izlediğimde, bu biz değiliz. Muhtemelen haftada 50-100 şube açıyoruz. En büyük zorluk birleşme ama biz de bu konuda oldukça başarılı olduk. Şube kökü yerine sisbugz davası & check-in ile birleşme eğilimindeyim.

Hiçbir zaman uzaktan çalışmaz ve şubelerden asla dal ayırmayız. Kod tabanının bu bölümünde çalışan tek kişi sizseniz, bagajla birleştirme sorunsuz gider. Başka biri aynı kod bölümünü değiştirmişse, birleştirme dağınık hale gelebilir ve biraz ameliyat yapmanız gerekebilir. Çatışmalar çatışıyor, kodu anlayacak kadar akıllı olmadıkça, herhangi bir sistemin çoğu zaman bunu nasıl doğru yapabileceğini anlamıyorum.

Bir dal oluşturduktan sonra 60k + dosyalarının takibi biraz zaman alır ancak bu, kullandığımız herhangi bir kaynak kontrol sisteminde sorun olabilir.

Bizim için çok yardımcı olacağını görmediğimiz herhangi bir DVCS'nin bir faydası var mı?


Neredeyse SVN'yi zaten bir DVCS olarak kullanıyorsunuz (dallara gelince). Mercurial'in SVN ile yapabileceği hemen hemen her şeyi yapabildiğinizden eminim (ve tersi); O zaman soru, hangisinin sizin için özel bir senaryo için kullanımı daha kolay ve daha uygun olmasıdır? Bence buna değer olsun ya da olmasın, Mercurial'ı birazcık kendiniz görmek için denemeniz gerekecek
Cameron

Mercurial hayranıyım ve açıkça SVN'nin özelliklerinin bir üstünü sunuyor, ancak bu ekstra özelliklerin yalnızca küçük bir azınlık proje için gerçekten yararlı olduğu söyleniyor. Muhtemelen ihtiyacın yok, hayatını değiştirmeyecek, ama daha fazla özellik kazanacak ve hiçbir şey kaybetmeyeceksin, neden olmasın?
jiggy

Hg Init'i kontrol ettin mi? Joel Spolsky tarafından yazılmış bir Mercurial öğretici. Subversion kullanıcıları için bir bölümle başlar, ancak aksi takdirde DVCS hakkında hiçbir şey bilmemenizi bekler.
Barry Brown

Yanıtlar:


11

Sorunuzu tekrarlamak için, "Yalnızca DVCS'yi merkezi bir şekilde kullanmayı planlıyorsak, bunun yararları nedir?" Bu şekilde sorduğun zaman sormaz. VCS'de görev başına bir dal çok yaygındır. Bunu düşünürseniz, bir gün için gövdeden bağımsız olarak değişen bir geliştiricinin makinesinde kaynak kodun yerel bir çalışma kopyasına sahip olması, hiç kimse bunu söylemese bile bir daldır. Bununla iş akışınız arasındaki tek fark, bu şubelere merkezi sunucuda da kalıcı bir isim vermenizdir. Bu Linus ve diğerlerinin hakkında konuştuğu türden bir dallanma değil.

DVCS'yi anlamak, düşünmede temel bir değişiklik gerektirir. Kendinize, istediğiniz kişiyle paylaşılan, dilediğiniz sayıda şubeyle ne yapacağınızı ve sadece onlarla ne yapabileceğinizi sormalısınız. Bu, sadece kendiniz tarafından görülen dalları içerir.

İmkanlar sonsuzdur. Sadece bir örnek için, bir arayüzün diğer tarafında çalışan iki kişi nasıl olur? Düzenli olarak kod paylaşmaları gerekiyor, ancak henüz herkesle paylaşacak kadar kararlı değil. Kendi aralarında paylaşacakları bir dal oluşturabilir, sonra hazır olduklarında tekrar merkezi depoya birleştirebilirler.

Orta düzeyde yerel taahhütlerde bulunabilme becerisi hepsine kendi başına değer. Bu sadece kendin için deneyimlemek zorundasın.

Repo'nuzun yerel olması ile kazanılan hız, hepsine de tek başına değer. Evet, ilk klon 60k dosya deposu için herhangi bir VCS'de kaçınılmaz olarak yavaş olacaktır, ancak bir kere sahip olduğunuzda, yeni bir dalı kontrol etmek bir DVCS ile daha hızlıdır.


2
1! Ayrıca, mercurial'a adil ve kapsamlı bir deneme yaparsanız geri dönmek istemediğinize eminim.
Pete

1
“İstediğiniz kişiyle paylaşılan dilediğiniz sayıda şubeyle ne yapacağınızı kendinize sormalısınız, sadece bir tanesi“ ... ”bir arayüzün diğer tarafında çalışan iki kişi? Her biriyle kod paylaşmalılar. Diğerleri düzenli, ancak henüz herkesle paylaşacak kadar istikrarlı değiller. Kendi aralarında paylaşacakları bir şube yaratabiliyorlar, sonra hazır olduklarında merkezi depoya yeniden birleştirebiliyorlar. ” Şimdi bunların hepsinin yıkılmasıyla birlikte var.
Matt

@Matt, o zaman işin kuraldan çok istisna olduğu için şanslısın. Çoğu şirket, merkezi sunucunun sınırlı kaynağı üzerinde şube oluşturma konusunda çok katı kurallara sahiptir, bu nedenle insanlar geçici nedenlerle onları oluşturmayı düşünmezler.
Karl Bielefeldt

3
Bu yanıtın, orijinal posterin zaten SVN'yi, çoğu SVN kullanıcısının uygun olduğunu düşündüğünden daha DVCS iş akışına daha yakın bir şekilde çalışmaya zorladığını gerçeğinin eksik olduğunu düşünüyorum. Aslında , DVCS zihniyetine zaten sahipler, bu nedenle düşünmede temel bir değişiklik gerekli değil.
Mark Booth

İyi nokta @ Mark. Böyle küçük bir takımda, daha büyük takımlar için normal kuralların çoğu pencereden çıkar. Hala hız nedeniyle buna değer olduğunu düşünüyorum.
Karl Bielefeldt

1

Özel durumunuz için DVCS'ye geçmenin bir faydası yok. Mevcut sisteminizden memnunsunuz, ihtiyacınız olan her şeyi yapıyor, neden geçiş yapmalısınız? SVN hala aktif bir Açık Kaynak projesidir ve tüm büyük IDE'ler ve geliştirme araçları ile hg veya git'ten daha iyi, daha olgun entegrasyonlara sahiptir. Ekibinizin büyüklüğü ve proje sayısı göz önüne alındığında, mevcut durumun iyi çalışması için gerçekten yeni bir araca geçmek için zaman ayırmak ister misiniz?

DVCS olmadan çalışamayan geliştiricilere sahipseniz, onları hg veya git için svn ağ geçitlerine yönlendirin. Onlara svn deposundaki girişlerinin, ekibin geri kalanının kullandığı her türlü prosedür ve işlemi yerine getirmesi gerektiğine açıkça dikkat edin. Bu yaklaşımın bir başka avantajı, geçitleri zaten kullandığını söylemeden gerçek DVCS zealotlarının artık dolaptan çıkabileceğini söylemektir.


Değişmek için zaman ayırmak istiyor muyuz? Hayır, özellikle de son 2 yılda sadece svn'ye geçtiğimizde değil. Yorumlarınız için teşekkürler.
Matt

1

Bana göre zaten birçok insanın DVCS kullanmaya başladıktan sonra benimsemiş olduğu iş akışına çok benzeyen bir iş akışı kullanıyorsunuz.

Sizce, bir DVCS, SVN'ye göre aşağıdaki önemli avantajlara sahip olacaktır:

  • Repolarınızı kopyaladığınızda yerel olarak birçok işlem yapılabilir.
    • Depo günlüğüne bakmak svn sunucusuna dokunmak zorunda değildir, bu yüzden inanılmaz derecede hızlı olabilir.
    • Benzer şekilde, dalları değiştirmek sunucuya erişim gerektirmez, yerel klonlar da gerektirmez.
  • Şubeler tarih boyunca birbirinden ayrı yollar olduğundan, havuzunuz, herkesin oluşturduğu her dalda dağınık değildir (yalnızca gerçekten SVN'de yayın şubeleri vardır, ancak branchesdizinin hala ilgili olmayan birçok alt dizini vardır).
    • Git'te, bir dal tekrar birleştirilip ref silindiğinde, orada bile olduğunu asla bilemezsiniz.
    • Mercurial size seçim var ya (ki bu durumda o ebediyen her Changeset içine kodlanmış oluyor) bir şube adlandırma ya da sadece sessizce edecek isimsiz (topolojik) şube oluşturma birleştirme o zaman tarihe mergeiçine d arka default( trunk)
  • SVN'de şubelerin dalları yararlı olamayacak kadar belirsizdir. İçinde gitve hgonlar sadece kurs için eşit.
  • DVCS'nin yazılım geliştirmenin bir DAG olduğunu , yani birleştiğinizde, birden fazla ebeveyni olan bir değişiklik setiyle sonuçlandığını anlayın . SVN (en azından kullandığım sürüm) bunu gerçekten anlamıyor.

Bu son noktada, diyorsun ki

Çatışmalar çatışıyor, herhangi bir sistemin, kodu anlayacak kadar akıllı olmadığı sürece nasıl doğru bir şekilde elde edebileceğini anlamıyorum.

Kullanarak geçiş olarak hgkullanarak münhasıran svntek başına ve daha sonra gitsvnda birleştirmeleri olması benim deneyim oldu çok serbest basit ve sorunsuz hgve gitsvnonlar ile olduğundan daha svn. İle birleşmeler svn(en azından kullandığımız sürüm), manuel olarak çözülmesi gereken önemli ölçüde daha fazla çakışma oluşturur.

Birleşmelerin SVN'de daha zor olmasının nedenlerinden biri, farklı olan her satır için yalnızca iki seçenek sunmasıdır.

  • Birleştirdiğiniz daldaki metin
  • dalda birleştirdiğiniz metin

DVCS’den gelen birleşimler tipik olarak size üçüncü bir seçenek

  • Birleştirdiğiniz her iki dalın ortak atalarından gelen metin

Bunun ne kadar yararlı olduğunu hafife almayın, size değişiklikler için basit bir iki yönlü farkın sağlayabileceğinden çok daha iyi bir bağlam sağlar.

Sonuçta, denemenizi öneririm. Gibi araçlar sayesinde gitsvnve hgsubversion, hatta mevcut SVN repo ile onları deneyebilirsiniz .

Klonu ilk başta oluşturmak kraliyet PItA'sıdır, ancak bunu bir kez yaptıktan sonra, mevcut CVCS'nizle birlikte bir DVCS'nin gücünden faydalanırsınız.


1
SVN de bahsettiğiniz durumda bir çatışma çıkarmaz. Sadece ikisini de aynı çizgileri değiştirdiğinizde belirir. Birleştirme genellikle dosya isimleri / hamleleriyle daha fazla problem yaratır ya da svn içine ekleme / silme işlevi görür, çünkü dizin değişikliklerini iyi bir şekilde birleştirmez. SVN birleştirme size bu 2'den daha fazla seçenek sunar, genellikle her iki değişiklik kümesini de saklamak istediğinizde, her ikisini de silmek yerine "onlarınkini kullan, sonra kullan" kullanın!
gbjbaanb

@gbjbaanb - Bulduğum şey bu değildi, bu yüzden SVN deneyimimi nitelendirdim at least the version I've used. Benim anlayış svn son sürümü olmasıdır gelmez ortak ataları hakkında anlıyorum ama bunun hiçbir deneyimi var ve aynı sorunlarla svn eski sürümlerini çalıştıran orada birçok sunucu vardır şüpheli.
Mark Booth,

Bu arada, ben hg(ve neredeyse kesinlikle git, ama hiç denemedim) ile üç sınıflı bir dosya alabilir, her biri bir sınıfla üç dosyaya bölebilirsiniz, daha sonra bir dal ile yapılan değişiklikler arasında birleştirme yapabilirsiniz. 'Birleşik' dosya ve ayrı dosyalara sahip dallar gibi bireysel sınıflarda yapılan değişiklikler doğru dosyalara uygulanır. Saf sihir. * 8 ')
Mark Booth

1
gbjbaanb doğru; SVN tarif ettiğiniz senaryoda bir çatışma olmaz. Bunu kendinize göstermek oldukça kolaydır.
Jeremy,

@Jeremy @gbjaanb - Düzenlenen bölüm sizin için daha iyi çalışıyor mu? Birleştirmelerin nasıl svnçalışması gerektiğine dair sizinle tartışmayacağım , onunla kendi deneyimim var, svnkomut satırında ve Eclipse altındaki SVNKit ile ilgili güncellemelerim var. (Kolayca söyleyemem 'Bu değişikliklerin ikisini de bu sırayla istiyorum).
Mark Booth

0

Böyle bir geçişten sonra fark ettiğim önemli bir değişiklik var: Şubeleri çok daha sık değiştiriyorum ve Subversion ile karşılayabileceğimden daha sık bağlıyorum. Örneğin, bir dizi halinde düzenlenmiş çok sayıda küçük işlevsellik dalı vardır ve her birine bit ekleyerek ayları harcayabilirim, hepsini sürekli değişen bir gövdeye sırayla yeniden dizebilirim. İşlevsellik dallarının birleştirildiği sıranın yeniden düzenlenmesi önemsizdir.

Ama aslında, aslında Subversion'dan uzaklaşmadım. Sadece yerel svn müşterim olarak git kullanıyorum.

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.