İki sürüm kontrol sistemini biliyorum ve kullanıyorum: Subversion ve git. Subversion, şu an itibariyle tek geliştirici olduğum kişisel projeler için kullanılıyor ve git ise açık kaynaklı projeler ve başkalarının da proje üzerinde çalışacağına inandığım projeler için kullanılıyor. Bu çoğunlukla git'in herkesin kendi dalında çalışabileceği inanılmaz çatal ve birleştirme yeteneklerinden kaynaklanmaktadır; çok kullanışlı.
Subversion'u kişisel projeler için kullanıyorum, çünkü git orada pek bir anlam ifade etmiyor. Biraz aşırıya kaçmış gibi görünüyor. Tek geliştirici olduğumda (genellikle ev sunucumda) merkezi ise benim için sorun yok; Zaten düzenli olarak yedek alıyorum. Kendi şubemi, ana şubeyi yapma yeteneğine ihtiyacım yok is şubem. Evet, SVN'nin dallanma için basit bir desteği var, ama bunun için çok daha güçlü bir destek anlamsız. Birleşme, onunla bir acı olabilir veya en azından benim küçük deneyimimden olabilir.
Git'i kişisel projelerde kullanmamın iyi bir nedeni var mı, yoksa sadece aşırıya kaçmak mı?
Aşırı dolu değil. Kişisel projeler için Git ve Mercurial Over Subversion'ı kullanmaya başlamamın temel nedeni, bir depo başlatmanın çok daha kolay olmasıdır.
Yeni bir proje başlatmak ister misiniz?
> git init
BAM! Bir Subversion deposuna dallamayı ve etiketleri desteklemek için bir havuz sunucusu kurmaya veya klasör yapısını kontrol etmeye gerek yok.
Projenizi daha sonra paylaşmak sadece aşağıdakilerle ilgilidir:
git Push (uzak bir depoya sahip olmak dışında). Subversion ile bunu hızlı bir şekilde yapmaya çalışın!
Subversion'u yerel kişisel projeler için kullanmanın aşırı olduğunu, ancak Git'in kesinlikle olmadığını iddia ediyorum. Git daha az yer kaplar (SVN'nin Git'in nesne anlık görüntülerine göre verimsiz "revizyonları" kavramı nedeniyle) daha az kurulum gerektirir (
git init'e karşı bir düzine
svnadmin komutları ve izinleri ayarlama vb.), daha kolay yedeklenir (
git clone --bare [veya
git Push Origin Github veya benzeri kullanıyorsanız] ve işiniz bittiğinde) ve kodunuzu yönetmek için daha iyi araçlara sahiptir (dallanma ücretsizdir ve birleştirme daha kolay ve daha temizdir). Başka hiç kimse deponuzun bir klonuna sahip olmaması, herhangi bir DVCS'nin faydalarının "aşırı" olduğu anlamına gelmez.
Dahası, Git'in dallanma desteğinin SVN'lerden daha az karmaşık olduğunu ve daha büyük ödüllerle olduğunu söyleyebilirim.
Asla kendi kodunuzu dallamayacağınızı düşünmek biraz görmezdir. Kendi kodumu birkaç kez dalladım, özellikle yeni bir yaklaşımı denerken henüz tamamen ikna olmadım. Sonunda bu özelliği isteyeceksiniz.
Bu uzun zamandır Subversion kullanıcısından geliyor. Tek bir araç üzerinde birleştirmek hayatınızı kolaylaştırabilir.
Aşırı kullanım, "çözüm" ün neden olduğu teminat hasarı için ayrılmıştır. Sinek öldürmek için silah kullanmak, merminin başka yere gitmesinden kaynaklanan hasar olduğu anlamına gelir. Aşırı dolu. Bir soruna neden olmayan, gerekenden daha güçlü bir şey kullanmak aşırıya kaçmaz ve geliştirme sürecinizi kolaylaştırmanıza yardımcı olursa iyi bir şey olabilir. Zarar vermez ve iki yerine yalnızca bir yazılım setini güncellemenize izin verir. Öyleyse neden bir yerine iki sistemle uğraşasınız ki?
Git'i tek kişilik projelerim için kullanıyorum ve çok seviyorum. Daha önce Subversion kullanıyordum ve Git'i kullanmanın bir dezavantajını görmedim. Daha güçlü ancak basit şeyleri daha karmaşık hale getirecek bir şekilde değil. Basit şeyleri gereksiz yere karmaşık/pahalı/yavaş/vb. IMHO, aşırı bir şeyi çağırmak için gerekli bir koşuldur. Ayrıca, Github'da diğer insanların daha önce tek kişilik projelerine istediğim bir özelliği eklemesi için çatalladım ve daha sonra onlara çekme istekleri gönderdim. Projelerimle ilgilenen biri de aynı şeyi yapsaydı oldukça havalı bulurdum.
Ben asla DVCS'den önce kişisel projelerde kaynak kontrolü kullandım, bu yüzden birisinin zıt görüşü aldığını hayal etmek biraz garip. Nedenlerimden bazıları:
Bana söylendi
git-bisect, girdinize bağlı olarak komisyonlarda ileri geri gidip belirli bir davranışı ortaya çıkaran kesin taahhüdü bulmak için gerçekten güzel.
Sen olacak ne olduğunu anlayamadığın şeyler için bunu bir gün yapmak zorundasın.
EDIT: Ayrıca, müşterilerin kullandığı eski sürümlerinde hata düzeltmeleri yapmak zorunda olduğunuzda şube yeteneği çok önemlidir. "Sadece bu küçük şeyi düzeltin ama en yeni sürümü istemiyorum çünkü şimdi tekrar tekrar test etmek istemiyorum".
Bu, kendi kodunuzu sürümlendirme konusunda ne kadar ciddi olmak istediğinize bağlıdır. Oluşturduğunuz şey, örneğin yalnızca geçerli sürüme sahip olacak basit bir kütüphane ise (veya bu doğru olduğu sürece), kişisel olarak sadece Dropbox gibi temel bir yedekleme seçeneği kullanırım. Tüm kodunuzu kaybederseniz, web'den kurtarabilirsiniz ve gerçekten aptalca bir şey yaparsanız Dropbox'ın 30 günlük bir sürümü yedeği vardır.
Ancak, örneğin Üretim ve Geliştirme dallarını sürdürmeniz gerekiyorsa, git kesinlikle harika bir araçtır - ve svn'den çok daha hızlı bir heck. Verileri yalnızca yerel olarak depolarsanız, sabit sürücü arızası riskine dikkat edin.
Her zaman, her zaman, her zaman herhangi tür geliştirme projesi için bir sürüm kontrol sistemi kullanırdım. Büyük ya da küçük gerçekten önemli değil. İster evde bir çeşit yeni teknoloji ile oynuyor, hayatımı kolaylaştırmak için küçük bir yardımcı yazıyor, ister büyük ve dağıtılmış bir ekipte profesyonel olarak gelişiyor olun - her zaman beni desteklemek için bir sürüm kontrol sistemi isterim.
Tabii, çoğu zaman küçük kişisel projeler için özelliklerin çoğunu kullanmayacaksınız, ancak bir git deposu (veya yerel bir Subversion deposu) kurmak önemli değil, bu yüzden devam edin! Ve bilmeden önce, "lanet olsun, geçen cuma X dosyasının içeriği neydi?" Sürüm kontrolü olmadan - iyi şanslar ;-)
Yani, git veya SVN kullanmanız gerçekten önemli değil - kişisel olarak SVN'den git'e gittikçe daha fazla şey taşımaya başlıyorum, ancak asıl şey sürüm kontrolünü kullanmaktır - küçük şeyler için bile.
Sadece kimse bundan bahsetmediği için: kişisel projeler için darcs gerçekten iyi ve basit sürüm kontrolü yapmak için git'ten daha az dahil. Daha büyük projeler için o kadar hızlı değil, ama sonra Subversion da değil!
Yaptığımız şeyin deneme olduğunu anlamak güçlü bir zihinsel paradigma değişimi olabilir. Bunu desteklemek için ucuz/kolay bir araca sahip olmak, kısmen ileriye doğru hareket etme yeteneğinizi geliştirir, çünkü zayıf olduğu zaman herhangi bir denemeden çıkma yeteneğinizi artırır.
Birçok geliştirici der ki, ben sadece kodumu kopyalarım. Ancak bu kopyaların yönetilmesi zorlaşır ve sonuç olarak dağınık olur. Birden fazla kopyanız var ve hangisinin ne için olduğunu hatırlayamıyorsunuz ve bunları silmenin güvenli olduğunu anlamaya çalışınız.
Deneme birden fazla dosyada koordineli değişiklikler gerektirdiğinde tüm bunlar daha da değerli hale gelir. Ve Git'i kullanarak solo bir pfoject olduğunda daha da basitleşir.
Yalnız bir projede kullanmam gerekip gerekmediğini merak etmek yerine, şimdi bunu daha önce keşfetmediğim bir utanç olduğunu düşünüyorum.