kişisel (tek kişilik) projeler için git. Aşırı yükleme?


84

İ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ıldı ve git açık kaynak projeleri ve başkalarının da proje üzerinde çalışacağına inandığım projeler için kullanıldı. Bu çoğunlukla git'in şaşırtıcı çatallanma ve birleştirme yeteneklerinden kaynaklanıyor, herkes kendi dalında çalışabilir; çok kullanışlı.

Şimdi, Goversion'u kişisel projeler için kullanıyorum, çünkü git'in orada pek bir anlamı yok. Biraz fazladan gözüküyor gibi görünüyor. Tek geliştiriciyken merkezileşmiş olsaydım benim için sorun yok (genellikle ev sunucumda); Zaten düzenli yedekler alıyorum. Ben kendi dal oluşturmak için yetenek gerekmez, ana dal olan benim dalı. Evet, SVN dallanma için basit bir desteğe sahiptir, ancak bunun için çok daha güçlü bir desteğin bir anlamı yoktur, sanırım. Birleşme, onunla birlikte bir acı olabilir, ya da en azından benim küçük deneyimimden.

Git'i kişisel projelerde kullanmam için iyi bir neden var mı, yoksa bu sadece basit bir sorumluluk mu?


61
Hayır, kişisel projeler için git ve hg kullanıyorum. Yerel revizyon kontrolüne sahip olmak bir nimettir.
wkl

7
Git, çok sayıda katkıda bulunup bulunmadığına bakılmaksızın, tüm projeler için birçok yönden daha iyidir: git, svn'den çok daha verimli bir şekilde sıkıştırır (ve büyüklük sırası daha hızlıdır!), Git yedekleri önemsiz kılar ve git olmaz Bir başkası katkıda bulunmak isterse engel olun.
Artefact2

4
Kodumu github veya bitbucket'e itmek için sürüm kontrolünü kullanıyorum, benim için yedekleme yapıyor ve belki bir gün insanların gerçekten ilgi duyacağı bir şey yazacağım.
Mahmoud Hossam

8
“Kendi şubemi oluşturma yeteneğine ihtiyacım yok, ana şube şubem.” Birçok insan undo, uygulamalarda nispeten yeni bir özellik olduğu zaman aynı şeyi söyledi . Şimdi herkes başından beri ihtiyaç duyduklarının farkında. Şubeye ihtiyacınız var, sadece bilmiyorsunuz.
Dan Rosenstark

1
@rtperson evet, bunu yapabilirsiniz, ama gerbucket'ten daha çok github'u sevmeme rağmen, aslında daha fazlasını seviyorum.
Mahmoud Hossam

Yanıtlar:


155

Fazla değil. Kişisel projeler için Git ve Mercurial Over Subversion kullanmaya başlamamın ana nedeni, bir depo başlatmanın çok daha kolay olmasıdır.

Yeni bir projeye başlamak ister misiniz?

> git init

BAM! Bir depo sunucusu kurmaya gerek yoktur, ayrıca dallanma ve etiketleri bir alt sürüm deposuna dönüştürmek için bir klasör yapısını kontrol etmenize gerek yoktur.

Projenizi daha sonra paylaşmak sadece bir konudur: git push(uzak bir havuza sahip olmaktan başka). Bunu yıkmadan çabucak yapmaya çalışın!


24
Kabul edilmiş. Git'in bundan daha fazla abartıldığına dair daha fazla yanlış kanıtlanamazdım;)
Anto

7
Steve341: Genellikle tüm kaynak kod projelerini "projeler" adlı bir klasörde tutarım. Her kaynak kod projesi için bir tane olmak üzere tüm depoları burada tutuyorum. Bir ve aynı VCS deposunda birkaç projeyi bir arada tutma ihtiyacım olmadı; Ivy veya Maven gibi bağımlılık yönetim sistemleri bunun için var.
Spoike

3
@ Steve341 Bu şeyleri takip etmek ne kadar zor? Tüm depolarınızı içeren tek bir klasörünüz var. Sisteminizden farklı değil, git sistem kullanırken sisteminizin son derece kötü bir uygulama olduğu gerçeği dışında ...
alternatif

2
@ Steve314:echo 'for dir in projects/*; do cd "$dir"; git push; cd ..; done' > update_all; chmod +x update_all
André Paramés

2
git initve bam! Ah evet ve sonra cp ../the-other-project/.gitignore .ilk taahhütten önce. Bam!
Dan Rosenstark

46

Subversion'u yerel kişisel projeler için kullanmanın önemsiz olduğunu, Git'in ise kararsız olduğunu iddia ediyorum. Git daha az yer kaplar (SVN'nin Git'in nesne anlık görüntülerine karşı verimsiz "revizyonları" konsepti nedeniyle), daha az kurulum gerektirir ( git initbir düzine svnadminkomut ve karşı izinlerin ayarlanması vs.), daha kolay kurulum ( git clone --bare[veya git push originGithub kullanıyorsanız) ya da benzer] ve bitirdiniz) ve kodunuzu yönetmek için daha iyi araçlara sahiptir (dallanma ücretsizdir ve birleştirme daha kolaydır ve daha temizdir). Sadece başka hiç kimsenin sizin deponuzdan bir klonu olmaması, herhangi bir DVCS'nin faydalarının "fazladan" olduğu anlamına gelmez.

Dahası, Git'in dallanma desteğinin SVN'lerden daha az karmaşık olduğunu ve daha fazla ödül aldığını söyleyebilirim.


Sanırım "karmaşık" yerine "güçlü" kullanmalıydım
Anto

3
@Anto: Önemli değil. Yine de temelde aynı şeyi söylerdim: Git'in üstün dallanmasının SVN ile karşılaştırıldığında hiçbir dezavantajı yok.
greyfade

3
Git, kaynak ağacınızı her alt dizindeki izleme dosyalarıyla "kirletmez".
WarrenT

4
@WarrenT kaynak ağacı "kirlilik" svn sürüm 1.7 ve sonrasında yoktur.
12'de

4
Subversion'da bir dosya sistemi havuzu oluşturmak bir komuttur ( svnadmin createartı ilk ödeme veya ithalatı yapmak için), izinleri ayarlamanıza gerek yoktur. Git'in genellikle daha iyi bir araç olduğunu inkar etmiyorum, ama Subversion ile ilgili yanlışlıklar yardımcı olmuyor.
Josh Kelley

34

Asla dallayamayacağınızı düşünmek kendi kodunuzu biraz görmezden gelir. Kendi kodumu birkaç kez dalladım, özellikle de yeni bir yaklaşım deneyimlediğimde henüz tam olarak ikna olmadım. Sonunda özelliği isteyeceksiniz.

Bu uzun zamandır Subversion kullanıcısından geliyor. Tek bir araç üzerinde birleştirmek, hayatınızı kolaylaştıracak gerçekten yardımcı olabilir.


2
Evet, bunun dalların, deneylerin noktası olduğuna inanıyorum. Op'un sorusunu okurken bu benim ilk rezervasyonumdu. Deponuza dallanmadıysanız, kafanızda "dallanma" yaparsınız ve sürüm kontrolü yerinde olduğunda bu sadece anlamsızdır.
Chris

3
Subversion ile şube olabilirsiniz. Ve birleş. Sırala. Aslında, denediğim tek sefer, daha fazla çalışamadığım ve bir şubeden daha önce başaramadığım bir yedeklemeden kurtulmaya yardımcı olamadım, bu yüzden tüm geçmişimi kaybetmeye başladım. yeni bir depo başlatmak ... ... 1.4. 1.5'e (bence - şimdi birkaç yıl önceydi). Muhtemelen dallanma ve birleşme işleri. Denemek için yeterince cesursan. Eğer svn dökümü hakkında bir şey bilseydim, elbette, biraz çaba ile sorunu çözebilirdim.
Steve314

@Chris, istediğim zaman geri düşebileceğim çalışan bir sürümü istiyorum. Bunu etiketlerle başarabileceğinizden emin olun, ancak bir dalın mükemmel bir anlam ifade ettiği zamanlar vardır. Git / mercurial'ın diğer faydalarını da unutmayın.
Berin Loritsch

9

Overkill, "çözüm" nedeniyle teminatlı hasar olduğunda ortaya çıkar. Bir sineği öldürmek için silah kullanılması, merminin başka bir yere gitmesi sonucu oluşan hasar olduğu anlamına gelir. Bu overkill. Bir soruna yol açmayacak kadar güçlü olan bir şeyi kullanmak fazlaca bir şey değildir ve geliştirme sürecinizi kolaylaştırmanıza yardımcı olacaksa iyi bir şey olabilir. Zarar vermez ve iki yerine yalnızca bir yazılım setini güncellemenizi sağlar. Peki neden bir yerine iki sistemle uğraşıyorsun?


Sistem yolunuza girdiyse, fazla mesai (evet, bu tanımla) olabilir. Git'i kişisel projeler için kullanmanın iyi bir fikir olup olmadığını merak ediyorum. Bana özel avantajların neler olduğunu söyler misiniz ? Bu cevap buna değinmiyor. Git'i daha güçlü ve kişisel projeler için çok güçlü bir sistem olarak görüyorum. Buna rağmen, sizin yolunuza çıkmadığı sürece, hiçbir şekilde zarar vermemelidir. Belki de cevabını genişletebilir misin?
Anto

1
Overkill, çözümü uygulamak için harcanan çaba oranının dışında olduğunda da kullanılır. Muhtemelen, yerel projeler için halihazırda subversion kullanıyorsanız, Git'i veya neyin abartılı olduğunu öğrenmek için harcanan çaba. Veya elbette aktarılabilir becerileri geliştirmeye yönelik yararlı bir ders. Şahsen, ben hala yıkım kullanıyorum - bu birkaç kez beni ısırdı, ama sadece küçük izler bıraktı. Git'i öğrenmekle ilgileniyorum, ancak her aramaya başladığımda bulduğum öğreticiler kriptikti ya da Windows için sağlam bir araç elde edemedim ya da her şeyin yolunda görünmesini sağlayan başka bir barikat vardı.
Steve314

7

Git'i tek kişilik projelerim için kullanıyorum ve seviyorum. Daha önce Subversion kullanıyordum ve henüz Git'i kullanmak için bir dezavantaj görmedim. Daha güçlüdür ancak basit şeyleri daha karmaşık hale getirecek şekilde değildir. Gereksiz yere karmaşık / pahalı / yavaş / vb basit şeyler yapma. IMHO, fazla bir şey söylemek için gerekli bir koşuldur. Ayrıca, Github'da, daha önce istediğim bir özelliği eklemek için başkalarının daha önce gerçekleştirdiği tek kişilik projelere izin verdim ve ardından çekme istekleri gönderdim. Projelerime ilgi duyan biri de aynı şeyi yaparsa oldukça havalı olurdum.


7

Ben asla DVCS önce kişisel projeler üzerinde kaynak denetimi kullanılan, bu nedenle kimse karşıt görünümü alarak hayal etmek biraz garip. Sebeplerimden bazıları:

  • Kurulumu ve yıkılması kolaydır. Örneğin, bir meslektaşım geçen hafta birkaç küçük adımda çözdüğüm bir programlama bilmecesi verdi. Çalışmamı sürdürmek için 45 dakika süren bir git repo yaptım, sonra gitti. Böyle bir şeyin ne kadar kolay bir baskı altında olduğunu bilmiyorum ama bunu yapan hiç kimseyi duymadım.
  • Bağlantı kesildi. Benim için çevrimdışı çalışabilmek, bir hobi projesine işten çok daha fazla yarar sağlıyor. Ev güvenlik duvarımda bir delik açmam ya da bir projeyi halka açık bir şekilde barındırmam gerekmiyor. Geçici olarak bir flaş sürücüye veya bir dizüstü bilgisayara bir repo koyabilir ve her şeyi senkronize halde tutabilirim.
  • Her şey colocated. Depoyu ve çalışan ağacı bir arada bulundurmak, işletim sistemi yükseltmeleri gibi şeyleri takip etmek için küçük projeleri kolaylaştırır.
  • Güçlü özellikler Tabii ki, her zaman güce ihtiyacım yok, ama ihtiyacım olduğunda orada ve ihtiyacım olmadığı zaman kaynakları tüketmiyor.

6

git-bisectGirdiinize bağlı olarak taahhütlerde ileri geri gidip verilen bir davranışı ortaya koyan kesin taahhüdü bulmak için gerçekten çok hoş olduğu söylendi .

Bir gün bunu, ne olduğunu çözemediğiniz şeyler için yapmanız gerekecek .


EDIT: Ayrıca, müşterilerin kullandığı eski sürümlerde hata düzeltmeleri yapmanız gerektiğinde dallanma yeteneği çok önemlidir. "Sadece bu küçük şeyi düzeltin, ancak en yeni sürümü istemiyorum çünkü artık tekrar test etmek istemiyorum" i yönetebilmelisiniz.


2

Bu, kendi kodunuzu geliştirmekle ilgili ne kadar ciddi olmak istediğinize bağlıdır. Eğer inşa ettiğiniz şey, örneğin sadece güncel sürüme sahip olacak basit bir kütüphane (ya da doğru olduğu sürece), şahsen sadece kişisel olarak Dropbox gibi temel bir yedekleme seçeneğini kullanırdı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ü vardır.

Bununla birlikte, örneğin Production ve Dev şubelerini korumanız gerekirse, git kesinlikle harika bir araçtır - ve svn'den çok daha hızlıdır. Ancak verileri yalnızca yerel olarak saklarsanız, sabit sürücü arızası riskine dikkat edin.


1
Evet, kişisel projeler için DropBox kullanıyorum. Sürüm, gerçek bir VCS kadar sofistike değildi, ancak boş zamanlarımda yaptığım daha küçük projeler için gayet iyi ve hiç dikkat gerektirmiyor (örneğin, hiçbir taahhüt yok, dosyalar üzerinde çalıştıkça güncelleme
yapıyorlar

oh ve tesadüfen oyunlar geliştirdiğim için projelerim çok sayıda ikili dosyaya (resim dosyaları, ses klipleri vb.) sahip olma eğilimindedir ve çoğu sürüm kontrol sistemi gerçekten sadece kaynak kod için tasarlanmıştır.
33'te jhocking

Git sadece ikili dosyalar ile iyi çalışıyor, farklar sadece daha az ilginç. Neyse ki git'i farklılaştırmak tam olarak kilitli değil - sevdiğiniz bir ikili dif aracı bulursanız, onu git ile kolayca kullanabilirsiniz (komut satırından)
Chris Moschini

Git'in ikili dosyaları sürümlendirmek için çok fazla alan boşa harcadığı söylendi, ancak bana söylenenler yanlış olabilir. Temel olarak, çoğu ikili varlığın (tüm ikili dosyaların değil, bir oyuna giren görüntülerin ve seslerin) her sürümde yeniden biriktirilmesi gerektiği ve Git'in sabit diskinizi yerel depoya doldurması gerektiği söylendi.
00'da jhocking

İkili dosyaları sürümlemek istemiyorsanız, sadece israf. Onları sürümlemeniz gerekiyorsa, sürüm geçmişi israf olmaz. Sanırım yanlışlıkla ikili dosyaları izlerken sürüm geçmişini bozmuşlar. git.wiki.kernel.org/index.php/GitSvnComparsion
Chris

2

Her zaman, her zaman, her zaman herhangi bir geliştirme projesi için bir sürüm kontrol sistemi kullanırdım . Büyük veya küçük gerçekten önemli değil. Evde bir tür yeni teknoloji ile oynuyorsam, hayatımı kolaylaştırmak için küçük bir yardımcı yazıp ya da büyük ve dağınık bir ekipte profesyonelce gelişsem - her zaman bir sürüm kontrol sisteminin beni desteklemesini isterdim.

Elbette, küçük kişisel projeler için çoğu zaman özelliklerin çoğunu kullanmayacaksınız, ancak git deposu (hatta yerel bir Subversion deposu) kurmak önemli değil, o yüzden devam edin! Ve bilmeden önce, "kahretsin, geçen cuma X dosyasının içeriği neydi?" Sürüm kontrolü olmadan - iyi şanslar ;-)

Bu yüzden, git veya SVN kullanıyor olmanız gerçekten önemli değil - kişisel olarak SVN'den git gitgide daha fazla şey taşımaya başlıyorum, ancak asıl şey sürüm kontrolünü kullanmak - küçük şeyler için bile.


1

Sadece kimseden bahsetmediği için: kişisel projeler için, darcs gerçekten iyidir ve basit sürüm kontrolü yapmak için git'ten daha az sorumludur. Büyük projeler için hızlı değil, ama o zaman Subversion!


1
Bu, ne kadar iyi tanıdığın ile ilgili. Hiç kullanmadım ama gitmeyi çok kullandım. Bana göre git çok dümdüz, ama bahse girerim ki ben darcs kullanıyor olsaydım başımı kaşıyorum.
Sam,

1
Zaten git delisi kullanıcı arayüzünde ustalaştıysanız, Darcs bir çakal olurdu.
wlangstroth

1
Lütfen darcs'ın neden küçük projeler için daha iyi olduğunu ve sonra gitmeyi açıklayabilir misiniz?
shabunc,

0

Yaptığımız şeyin deney olduğunu anlamak, güçlü bir zihinsel paradigma kayması olabilir. Bunu desteklemek için ucuz / kolay bir araca sahip olmak, kısmen, kötü sonuçlandığında herhangi bir denemeyi geri alma yeteneğinizi geliştirdiğinden, ileriye gitme yeteneğinizi geliştirir.

Birçok geliştirici der ki, kodumu kopyalarım. Ancak bu kopyaların yönetilmesi ve karışıklık yaratması zorlaşır. Birden çok kopyaya sahipsiniz ve hangi kopyaya neyin kopyalandığını hatırlayamıyorsunuz ve daha sonra bunları silmek için ne zaman güvenli olduğunu bulmaya çalışın.

Tüm bunlar, deney birden fazla dosyada koordineli değişiklikler gerektirdiğinde daha da değerli hale gelir. Yalnız bir proje olduğunda Git'i kullanmak daha da basitleşiyor.

Yalnız bir projede kullanmam gerekip gerekmediğini merak etmek yerine, bunu daha önce keşfetmediğim bir utanç olduğunu düşünüyorum.


Tasarımcının bu konudaki görüşleri için Linus on Git'i YouTube'da izleyin (~ 70 dakika)
WarrenT
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.