Not: Güncel soruya verilen cevap için "EDIT" bölümüne bakınız.
Her şeyden önce, Joel Spolsky tarafından Subversion Re-education okuyun . Sanırım sorularınızın çoğu orada cevaplandırılacak.
Başka bir öneri, Linus Torvalds'ın Git'teki konuşması: http://www.youtube.com/watch?v=4XpnKHJAok8 . Bu diğeri, sorularınızın çoğuna da cevap verebilir ve oldukça eğlencelidir.
BTW, oldukça komik bulduğum bir şey: orjinal subversion yaratıcılarından ikisi olan Brian Fitzpatrick ve Ben Collins-Sussman bile, bir google konuşmasında, "subversion'un mercurial (ve genel olarak DVCS'ler) inferior olduğu anlamına geldiği için üzgünüm" dedi.
Şimdi, IMO ve genel olarak, takım dinamikleri, herhangi bir DVCS ile daha doğal bir şekilde gelişiyor ve olağanüstü bir avantaj, çevrimdışı olarak çalışabilmenizdir, çünkü aşağıdakileri ima eder:
- Daha hızlı zaman anlamına gelen bir sunucuya ve bağlantıya bağlı değilsiniz.
- Sadece giriş yapabilmek için internet erişimi (veya VPN) alabileceğiniz yerlerin kölesi olmamak.
- Herkes yalnızca sunucuyu değil, her şeyi (dosyalar, tarihçe) yedekler. Yani herkes sunucu olabilir .
- Başkalarının kodunu bozmadan ihtiyaç duyuyorsanız zorunlu olarak taahhütte bulunabilirsiniz . Komisyonlar yereldir. Taahhüt ederken birbirinizin ayak parmaklarına basmıyorsunuz. Başkalarının yapısını veya çevrelerini sadece taahhüt ederek bozmazsınız.
- "Erişim izni" olmayan kişiler (DVCS’de taahhüt etmek kod yüklemek anlamına gelmediğinden) taahhüt verebilirler, katkı payını azaltıp, değişikliklerini bir bütünleştirici olarak almaya karar verebilirsiniz.
- Bir DVCS bunu zorunlu kıldığından doğal iletişimi pekiştirebilir ... yıkılmasında, yerine ne yaptığınızı, iletişimi zorlayan, ancak çalışmanızı engellediğiniz şeyleri yaparsınız.
- Katkıda bulunanlar bir araya gelerek kendi birleşmelerini gerçekleştirebilir, bu da sonuçta bütünleştiriciler için daha az iş anlamına gelir.
- Katkıda bulunanlar, başkalarını etkilemeden kendi şubelerine sahip olabilirler (ancak gerektiğinde bunları paylaşabiliyorlar).
Puanlarınız hakkında:
- DVCSland'da birleşme cehennemi yoktur; ele alınması gerekmez. Bir sonraki noktaya bakınız .
- DVCS’de, herkes bir "dalı" temsil eder, yani değişiklikler her çekildiğinde birleşme vardır. Adlandırılmış dallar başka bir şeydir.
- İsterseniz sürekli entegrasyon kullanmaya devam edebilirsiniz. Gerekli olmasa da IMHO, neden karmaşıklık ekliyor ?, testinizi kültürünüzün / politikanızın bir parçası olarak yapın.
- Mercurial bazı şeylerde daha hızlıdır, git ise bazı şeylerde daha hızlıdır. Genel olarak DVCS'lere değil, özel uygulamalarına AFAIK.
- Sadece siz değil, herkes her zaman tam projeye sahip olacak. Dağıtılan şeyin yerel olarak işlem yapabildiğiniz / güncelleyebildiğinizle ilgili olması gerekir, bilgisayarınızın dışından paylaşma / alma işlemi itme / çekme olarak adlandırılır.
- Yine, Subversion Re-education bölümünü okuyun. DVCS'ler daha kolay ve daha doğaldır, ancak farklıdırlar, cvs / svn === tüm sürümlerin temeli olduğunu düşünmeye çalışmayın.
DVCS'lere geçişin ön plana çıkmasına yardımcı olmak için Joomla projesine bazı dökümantasyonlarda katkıda bulundum ve burada merkezileştirilmiş ve dağıtılmış olanları göstermek için bazı diyagramlar çizdim .
Merkezi
Genel uygulamada dağıtılmış
Sonuna kadar dağıtılmış
Şemada gördüğünüz gibi hala bir "merkezi depo" var ve bu merkezileştirilmiş hayranların en sevdiği argümanlardan biri: "hala merkezileşiyorsun" ve hayır, "merkezileşmiş" depo sadece sen depolu olduğundan hayır hepsi hemfikirdir (örneğin resmi bir github repo), fakat bu ihtiyaç duyduğunuzda değişebilir.
Şimdi, bu, DVCS'leri kullanan açık kaynaklı projeler (örneğin büyük işbirliğine sahip bir proje) için tipik iş akışıdır:
Bitbucket.org biraz mercurial eşdeğeri bir github olduğunu, sınırsız alana sahip sınırsız özel depoları olduğunu biliyorum, ekibiniz beşten küçükse ücretsiz kullanabilirsiniz.
Kendinizi bir DVCS kullanmaya ikna etmenin en iyi yolu bir DVCS denemek, svn / cvs kullanan her deneyimli DVCS geliştiricisi size buna değer olduğunu ve her zaman onsuz nasıl yaşadıklarını bilmediklerini söyleyecektir.
DÜZENLEME : İkinci düzenlemenizi cevaplamak için, bir DVCS ile farklı bir iş akışına sahip olduğunuzu yineleyebilirim, en iyi uygulamalar nedeniyle denememek için neden aramamanızı tavsiye ederim , insanlar OOP olmadığını iddia ediyorlar gibi hissettiriyor. gerekli çünkü karmaşık tasarım kalıplarını XYZ paradigmasıyla her zaman yaptıkları şeyle başa çıkabiliyorlar; Yine de yararlanabilirsin.
Deneyin, "özel bir dalda" çalışmanın aslında daha iyi bir seçenek olduğunu göreceksiniz. Sonuncunun neden doğru olduğunu anlatabileceğim sebeplerden biri , uygun gördükten sonra daha doğal bir şekilde çalışıp çalışmaya başlamana izin verme korkusu kaybetmen .
"Cehennemi birleştirmek" ile ilgili olarak, "deneme yapmadıkça" diyorsunuz, " aynı anda yenilenmiş v2.0'da çalışarak + bakım yapma + çalışmayı deneseniz bile" diyorum . Daha önce de söylediğim gibi, cehennemi birleştirmek yok, çünkü:
- Taahhüt ettiğiniz her zaman adsız bir dal oluşturur ve değişiklikleriniz diğer kişilerin değişiklikleriyle her karşılaştığında, doğal bir birleşme meydana gelir.
- DVCS'ler her bir taahhüt için daha fazla meta veri topladığından, birleşme sırasında daha az çatışma ortaya çıkar ... böylece "akıllı bir birleştirme" bile diyebilirsiniz.
- Birleştirme çatışmalarına çarptığınızda, kullanabileceğiniz budur:
Ayrıca, proje büyüklüğü önemli değil, yıkılmaya başladığımda aslında tek başıma çalışırken faydaları görüyordum, her şey sadece doğru geldi. Changesets (a revizyon, ancak kod temeli durumundan izole bir taahhüt içeren belirli dosyalar için değişikliklerin belirli seti tam olarak değil), size dosyaların belirli bir gruba yaptıklarını yaparak ne demek istediğini görselleştirmek izin tüm kod tabanı değil.
Değişikliklerin nasıl işlediğiyle ve performansın artırılmasıyla ilgili olarak. Bunu vermek istediğim bir örnekle göstermeye çalışacağım: mootools projesi, github ağ grafiğinde gösterilen svn 'den proje geçişi .
Önce
Sonra
Gördüğünüz şey, geliştiricilerin, başkalarının kodlarını kırma korkusu olmadan, kendi işlerine odaklanmalarını sağlamaktır; itme / çekme işleminden sonra başkalarının kodunu kırma konusunda endişe duyuyorlar (DVCS'ler: ilk önce kabul et, sonra it / çek, ardından güncelleme ) ancak birleşme burada daha akıllı olduğu için, çoğu zaman yapmazlar ... bir birleşme çatışması olsa bile (nadir görülür), sadece 5 dakika ya da daha az bir şeyi tamir etmek için harcarsınız.
Sana tavsiyem, mercurial / git'i nasıl kullanacağını bilen birini aramak ve ona uygulamalı olarak anlatmasını söylemektir. Masaüstlerimizle ve bitbucket hesaplarımızla mercurial kullanırken bazı arkadaşlarla komut satırında yaklaşık yarım saat harcayarak, nasıl birleştirileceğini gösteren, hatta zaman zaman çok saçma bir şekilde nasıl düzelteceklerini görmek için çatışmalar üreterek gösterebildim. Onları bir DVCS'nin gerçek gücü.
Son olarak, eğer Windows millet ile çalışıyorsanız git + github yerine mercurial + bitbucket kullanmanızı öneririm. Mercurial ayrıca biraz daha basittir, ancak git daha karmaşık depo yönetimi için daha güçlüdür (örn. Git rebase ).
Bazı önerilen ek okumalar: