SVN Git'ten daha iyi ne yapar? [kapalı]


293

Programcı araçlar üzerindeki tartışmaların çoğunluğunun kişisel tercihlere (kullanıcı tarafından) veya tasarım vurgusuna , yani tasarımı belirli kullanım durumlarına göre (araç üreticisi tarafından) optimize etmesine şüphe yok . Metin editörleri muhtemelen en belirgin örneğidir - iş ve kodlarına Windows üzerinde çalışan bir kodlayıcı Haskell evde Mac'te, çapraz platform ve derleyici entegrasyonu değerleri ve böylece seçer Emacs üzerinde TextMate vb

Yeni tanıtılan bir teknolojinin, mevcut seçeneklerden gerçekten ve gözle görülür şekilde üstün olması daha az yaygındır.

Aslında sürüm kontrol sistemleri (VCS), özellikle merkezi VCS ( CVS ve SVN ), dağıtılmış VCS'ye ( Git ve Mercurial ) mı?

SVN'yi yaklaşık beş yıl kullandım ve şu anda çalıştığım yerde SVN kullanılıyor. Üç yıldan biraz daha az bir süre önce, tüm kişisel projelerim için Git'e (ve GitHub) geçtim.

Git Subversion'un bir çok avantajını düşünebilirim (ve çoğu için merkezi VCS'ye dağıtılmış olan avantajların özetidir), ancak bir kontra örneğini düşünemiyorum - bazı görevler (her zamanki programcılarda ortaya çıkmaktadır) iş akışı) bu Subversion Git'ten daha iyi sonuç veriyor.

Bundan çıkardığım tek sonuç hiçbir veriye sahip olmadığımdır - Git'in daha iyi olması vs.

Benim tahminim, bu tür karşı örneklerin var olduğu, dolayısıyla bu sorudur.


3
@jokoon: Neye göre verimli? Yerel Ethernet işlemlerine kıyasla hızlı Ethernet bile yavaş olduğundan kesinlikle hız yok.
maaartinus


4
Her zaman Git'in aşırı saygın olduğunu düşündüm. Bu bir tuhaflıktır ve programcılar bu düşünceye karşı çıkan birçok karşıtlığa rağmen, tuhaflıklara karşı geçirimsiz değildir. Bu dünyadaki herkes gibi, herkes de yeni parlak oyuncağı (Git) istiyor . Git iyi olabilir - veya bazı insanlar için bile harika - ama nesnel olarak düşünürken SVN'den daha iyi olmamıştı .
777,

3
SVN'nin hala kullanımı iyi olduğunu düşündüm, öğrenme eğrisi GIT'den sonra iyidir.
Cheung

5
Bu soru yakın zamanda öncelikle görüş temelli olarak bekletildi. Bu sınıflandırma yanlıştır; Sorunun uzun süre açık olduğunu unutmayın; DVCS'nin erdemleri hakkında pek çok soru olduğu ve sorunun daha iyi olup olmadığını sormadığı (görüş) ama daha iyi ne yaptığını . Farklılıklar görüş değil, genel ürünün olup olmadığı - bu çok zor (ancak bu sorunun amacı değil).
Eamon Nerbonne

Yanıtlar:


207

Yıkılma merkezi bir depo

Pek çok insan hızın ve çoklu kopyaların bariz yararları için havuzlar dağıtmak isteyecek olsa da, merkezi bir havuzun daha fazla istendiği durumlar vardır. Örneğin, kimsenin erişmesini istemediğiniz kritik bir kod parçanız varsa, muhtemelen Git'in altına koymak istemezsiniz. Birçok şirket kodlarını merkezi tutmak istemektedir ve (sanırım) tüm (ciddi) hükümet projeleri merkezi depoları altındadır.

Yıkılma geleneksel bilgeliktir

Bu, birçok insanın (özellikle yöneticiler ve patronlar) versiyonları numaralandırmanın ve gelişimini beyninde kodlanmış zaman boyunca “tek bir hat” olarak görmenin olağan yoluna sahip olduğunu söylemek içindir. Alınma ama Git'in özgürlüğünü yutması kolay değil. Git kitaplarının ilk bölümü, tüm geleneksel idealleri zihninizden boşaltmanızı ve yeniden başlamanızı söyler.

Subversion bir şekilde yapar, başka bir şey yapmaz

SVN, bir sürüm kontrol sistemidir. It has bir işini yapmak için bir yol ve herkes bunu aynı şekilde yapar. Dönemi. Bu, SVN'den diğer merkezi VCS'ye / dan diğerine geçişi kolaylaştırır. Git saf bir VCS bile DEĞİL - dosya sistemi, farklı durumlarda depoları nasıl kuracağınız konusunda birçok topolojiye sahip - ve herhangi bir standart yok. Bu, birini seçmeyi zorlaştırır.

Diğer avantajlar:

  • SVN boş dizinleri destekliyor
  • SVN daha iyi Windows desteğine sahip
  • SVN bir alt ağacı kontrol edebilir / klonlayabilir
  • SVN, svn lockbirleştirilmesi zor dosyalar için kullanışlı olan özel erişim kontrolünü destekler
  • SVN, ikili dosyaları ve büyük dosyaları daha kolay destekler (ve eski sürümlerin her yere kopyalanması gerekmez).
  • Bir taahhüt eklemek önemli ölçüde daha az adım içerir, çünkü herhangi bir çekme / gönderme yoktur ve yerel değişiklikleriniz her zaman dolaylı olarak yeniden oluşturulur svn update.

55
"Subversion bunu bir şekilde yapıyor" - Ben de şu anki işime başlayana kadar öyle düşündüm. Şu anki işimde, güven sorunu olmadığını iddia eden patronum, sunucuyu kilitlenmesi gerekecek şekilde yapılandırdı. Sistemimizde birleşme olmaz. Dosyalar depoya kilitlendi ve hiç kimse bunları kilitsiz olarak yazamaz. Yukarıdan aşağıya kontrol, anayasaları talep edenler için kesinlikle svn'nin gitmekten daha iyi bir şey yapması gerektiği.
Dan Ray

14
Merkezi deponun bir avantajı yedekleme kolaylığıdır. Teslim edilen tüm kodlar tek bir yerde ise ve o yerin yerinde yedeklemesi varsa, ofisiniz yandığında her şeyi kaybetmezsiniz. Bir DVCS ile, geliştiricinin makinelerinin şirket dışı yedeklemelerini yapmazsanız, tesis dışında yedeklenen sunucuya gönderilmeyen her şeyi kaybedersiniz.
Paul Tomblin 30:11

94
Git neden merkezi bir şekilde kullanılamıyor? Sadece bir tane merkezi havuza sahip olun, ve devleriniz ödeme yaptıkları gibi klonlayıp çekip itebilir ve güncelleyebilir ve taahhüt edebilir.
David Thornley 30:11

29
@PaulTomblin - İş akışına bağlı olarak Git daha iyi yedeklemeler sağlayabilir . Örneğin, özel github repoları kullanıyoruz ve kodları sık sık dallara ayırmak için zorluyorum. Eğer iş arkadaşlarım bunu yaparsa git fetch origin, her birinin Github'un sağladığı yedeklemeyle birlikte kodumun bir yedeği vardır. (Birleştirilmiş şubeleri düzenli olarak hem yerel hem de Github'ta budayız.)
Nathan Long

52
Merkezin büyük şirketler veya devlet işleri için daha güvenli olduğunu ima ediyor gibi görünüyorsunuz. Bu sadece doğru değil. Bilgisayarınızda kodun bir kopyası varsa, kodun bir kopyası sizde olur. Merkezi bir sunucudan mı yoksa DVCS deposu tutan merkezi bir dosya sisteminden mi geldiği önemli değil.
John Fisher

131

Git'teki Subversion'un bir yararı, Subversion'un yalnızca alt ağaçları kontrol etmesine izin vermesi olabilir . Git ile tüm depo bir birimdir, yalnızca tümünü ya da hiçbirini elde edebilirsiniz. Modüler kodla, Git alt modüllerine kıyasla bu oldukça iyi olabilir. (Git alt modülleri de belli ki yerini alırken)

Ve küçük bir avantaj: Subversion, boş dizinleri izleyebilir. Git dosya içeriğini izler, böylece herhangi bir dosya içermeyen bir dizin görünmez.


11
Alt ağaçlarla çalışmak, IMNO'nun SVN'nin GIT'ye göre sahip olduğu tek şey. Alınan nokta, boş dizinler güzeldir ancak gerekli değildir (ve çevresinde çalışılabilir). Git alt modülleri ve git alt ağacının kafa karıştırıcıları daha az kafa karıştırıcı olsaydı, birçok insanı GİT'e göç etmekten alıkoyacak hiçbir şey olmazdı. Bazı insanların bahsettiği diğer avantajlar (geliştirici) zihniyetine indirgeniyor. Örneğin, yukarıdan aşağıya ihtiyacınız varsa, sorun değil. Senin için hiç işim olmazdı.
Till

3
Bunların
SVN'nin

1
Neden komik - Yeni sistemler eski sistemlerden öğrenir. RCS'nin git üzerinden üzerinde bir avantajı bile var: Tarih dosyaları kolayca elle düzenlenebilir ve dosya başına dallar olabilir. Ancak eolution, özelliklerin kaybolduğunu içerir ...
johannes

3
Bu sebepten dolayı GIT üzerinden SVN kullanan bir oyun şirketini duydum - GB büyüklüğündeki bir depodan bahsettiğinizde, aniden önemli hale geliyor!
James

18
Git 1.8.0 sürümünden itibaren, şimdi git subtreetam olarak bunu gerçekleştirmek için komutu kullanabilirsiniz . Son yıkılma avantajı tozu ısırıyor :) Detaylar burada: github.com/gitster/git/blob/… Not: Bu bir github projesine bir bağlantı olmasına rağmen, git- subtree şimdi çekirdek git dağıtımının bir parçası.
Carl

51

Üç tane düşünebilirim. İlk olarak, özellikle geliştiriciler için, grok, biraz daha kolaydır. Kavramsal olarak DCVS seçeneklerinden daha basittir . İkincisi vadedir, özellikle Windows'ta TortoiseSVN . Kaplumbağa Hg olsa hızlı yetişiyor. Üçüncüsü, canavarın doğası - sadece ağacın herhangi bir seviyesinden şeyleri kontrol edebileceğiniz bir dosya sisteminin görüntüsü - bazı senaryolarda oldukça kullanışlı olabilir - düzinelerce geniş çapta farklı konfigürasyon dosyalarını yayınlamak gibi onlarca depo içermeyen sunucular.

Bu, tüm gelişmeyi Mercurial'a aktarmadığımız anlamına gelmez.


25
Grok yapmak daha kolay olmak önemli bir avantaj, çünkü kullanılması daha olası. SVN, sürüm kontrolü olmadan kesinlikle daha iyidir ve eğer birisi eski yollar hakkında inatçıysa, belki SVN onlar için en iyi seçimdir.
jhocking

12
@jhocking: SVN'yi sevmiyorum, ancak birisi bana "Bu yeni DVCS şeylerini sevmiyorum, bu yüzden CVS ile kalacağım" deyince, o zaman kesinlikle tavsiye edeceğim : bu en azından kolay yol kısmen aklı başında VCS ;-)
Joachim Sauer

4
@jhocking Yeni yollar her durum için her zaman en iyisi değildir. NASA'nın eski hikayesini 0 g ile yazabilecek bir kalem geliştirmek için milyonlarca dolar harcadığı aklıma getiriyor. Öte yandan kozmonotlar kalemlerle yapılır. Bazen eski yollar daha iyidir, HEMEN ŞİMDİ ÇIKARIN!
maple_shaft

25
@maple_shaft ve bazen değiller. snopes.com/business/genius/spacepen.asp
Peter Taylor

3
Kolayca grokked son derece subjektiftir ve büyük ölçüde yeni bilgiyi zaten bildiklerinize nasıl uydurmaya çalıştığınıza dayanır. Aynı zamanda, öğrenme kaynağınızın ne olduğu konusunda çok büyük farklar yaratır. Erkek sayfalarına geçeceksen iyi şanslar. Zaten onu harcayan iyi bir öğretmen tarafından öğretiliyorsanız, yaptırdınız. Git'i YouTube'da birkaç iyi video izledikten sonra çok anlamlı buldum. Anlayışınızı, onu basit çekirdeğe kadar damıtılmış birinden alırsanız, o zaman anlaşılması gereken her şey daha kolaydır.
WarrenT

32
  • SVN depoları, bir yöneticinin ve yöneticinin bakış açısından daha yönetilebilirdir ( ACL + doğrulama yöntemleri + hotcopy + mirrors + dump)
  • SVN *-kancaların uygulanması ve desteklenmesi daha kolaydır
  • svn:external alt modüllerden daha fazla güce ve esnekliğe sahiptir
  • Dosya sistemi tabanlı depo ağaçlarının kullanımı yalnızca mantıksal olarak ayrılan monolitik havuzlardan daha kolaydır
  • SVN daha farklı müşteri araçlarına sahip
  • SVN, Git'inkinden çok daha iyi, üçüncü tarafların kullanabileceği web ön yüzlerine sahip
  • SVN beyninizi kırmaz

23
Beynini kırmaz mı? SVN'deki şubeleri kolayca çakışmalarla nasıl birleştireceğimi öğretmek ister misiniz?
WarrenT

4
"Daha iyi" araçlar / ön uçlar, hareketli bir hedef. Araçlar her iki tarafta da gelişir. Hiçbirimiz bundan birkaç yıl sonra hangi araçların kullanılacağını bilmiyoruz. 10 ay önceki bu değerlendirme zaman içinde kolayca değişebilir ve şimdi bayat olabilir. Önemli cevaplar görmeyi tercih ederim.
WarrenT

6
Ağaç çatışmaları? Kontrol. Tüm seçeneklere evet mi hayır mı? Hayır. Svn çıldırmak için tasarlanmıştır. Temiz çalışan kopya komutu? Hayır. Geri döndürme işlemi, söz konusu dosyaları temizleyemez.
Warren P,

1
Her şeyi silmek ve tekrar kontrol etmek, geri çevrilmemiş dosyaları temizler.
jgmjgm

Son fikrini seviyorum, Git beynimi kırdı: '(
Luke

24

Bunu başkasının cevabı üzerine bir yorum olarak yazdım, ama sanırım kendi başına bir cevap olmayı hak ediyor.

Şirketimin SVN için dikkatlice seçtiği yapılandırma, içeriği düzenlemek için dosya düzeyinde kilitleme gerektiriyor ve hiçbir zaman birleştirme kullanmıyor. Sonuç olarak, birçok geliştirici kilitler için mücadele eder ve bu büyük bir darboğaz olabilir ve asla bir birleşme çatışması olasılığı yoktur.

SVN kesinlikle yukarıdan aşağıya yönetim kontrolünü Git'ten daha iyi yapıyor. Skunkworks'ümde Git'e (izin yerine affetmek istiyor) göçüm, yöneticilerimden hepimizin köle olduğumuz herhangi bir yazılım tarafından uygulanan merkezi ana kontrol sunucusunun olmadığı düşüncesiyle dehşete düştüm.


Merkeziyet efsane meselesi değil gerçek. Kimse beni hiçbir şeyi değiştirmekten alıkoyamaz. Bir cvcs ile beni merkezi olarak bir şeyleri değiştirmekten alıkoyabilirler. DVD'de de aynı şey var. CVCT'deki kelime kelimesi, taahhüt ve itme ile ilgilidir.
Warren P,

@ JonathanHenson: Torvalds'ın SVN'den nefret etmesinin tek nedeni bu değil . SVN merkezileştirilebilir ve daha iyi bir CVS olabilir, ancak bu iyi bir yazılım değildir. Torvalds CVS / SVN'den nefret ediyor, çünkü merkezileştirilmiş değiller ama onların kötü niyetli bir yazılım olduğunu düşünüyor. Haklı olsun ya da olmasın karar vermek size kalmış ancak hem Linux (hem de Android) muazzam başarısını görmüş - milyarlarca cihaza dayanıyor - ve Git - ki bu dünyayı fırtınadan alıyor - Ona katılmadan önce iki kere düşün. Torvalds’ın Git’te Google’da yıllar önce verdiği ders şaşırtıcı.
Cedric Martin

lol. Yöneticiniz çok korkmuş durumda, uygun bir yedekleme sistemi yok. Sadece "ama DVCS'sinin bir kopyası olacak," uçmuyor - biliyorum, son yerimde gittiğini gördüğümde, kelimenin tam anlamıyla bazı depoların kopyaları yoktu. Dikkat edin, kilitleme bazı durumlar için iyi olabilir ve git bu konuda başarısız olabilir - görüntüler veya diğer ikili dosyalar için sihirli bir birleştirme aracınız yoksa. git sadece gerçekten metin dosyaları için çalışıyor.
gbjbaanb

22

Sebeplerim:

  • vade - hem sunucu hem de araçlar (örneğin TortoiseSVN)
  • basitlik - daha az adım dahil, bir taahhüt bir taahhüttür. Git ve Mercurial gibi DVCS, taahhüt etmeyi ve ardından ittirmeyi içerir.
  • İkili kullanım - SVN, ikili çalıştırılabilir dosyaları ve görüntüleri Git / Hg'den daha iyi kullanır. Özellikle .NET projelerinde kullanışlıdır, çünkü inşa ile ilgili araçları kaynak kontrolünde kontrol etmeyi seviyorum.
  • numaralandırma - SVN, sadece rakamları kullanarak okunabilir bir taahhüt numaralandırma düzenine sahiptir - revizyon numaralarını izlemek daha kolaydır. Git ve Hg bunu oldukça farklı yapar.

1
"numaralandırma şemasını taahhüt et" yalnızca kanuni gövdeleriniz varsa mümkündür. Aksi halde hangisi büyük numaralandırmayı alır?

1
Svn içindeki rakamları + 1'le Bu numara eşsiz. Bu sayıyı app-versionnumber xx.yy.zz.12882'nin bir parçası olarak kullanmak için araçlar vardır; burada 12882 svn sürüm numarasıdır. Bir üretim sorunu varsa, sürüm numarasını isteyebilirsiniz ve yazılımın oluşturulduğu yer olan tam svn revizyonuna sahip olabilirsiniz
k3b

22

İyi bilgi aradığınızı takdir ediyorum, ancak bu tür bir soru sormaya davet ediyor: "Git'in çok kazandığını düşünüyorum ve suxorz svn!" cevapları.

Git ve şahsen Git'i küçük ekibim için biraz fazla buldum. Coğrafi olarak dağılmış büyük bir dağınık ekip veya takım grubu için harika olacak gibi görünüyordu. Git'in yararlarını çok iyi anlıyorum ama bence kaynak kontrolü beni geceleri ayakta tutan bir şey değil.

Ben bir geyik avcısıyım ve arkadaşlarımla dışarı çıktıklarında dişlere silahlanıyorlar, cephane ve yüksek teknolojili teçhizatla dolular. Tek bir tüfek, yedi kurşun ve bir de bıçakla görünüyorum. Yedi turdan fazlasına ihtiyacım olursa, o zaman yanlış bir şey yapıyorum ve ben de herkes gibi yapıyorum.

Yapmaya çalıştığım nokta, orta ve küçük ölçekli projeler üzerinde çalışan küçük bir ekipseniz ve zaten SVN ile aşina iseniz, onu kullanın. CVS veya (titreme) SourceSafe'den kesinlikle daha iyidir ve bir havuz oluşturmak beş dakikadan fazla sürmüyor. Git bazen fazlaca olabilir.


3
Gerçekten mi? Öyleyse fosiline bir göz atmanı öneririm .
Spencer Rathbun 30:11

7
En ufak bir tartışma ihtimaliyle alarmı çalmayalım. Önemli konular genellikle en tartışmalı olanı ve güçlü görüşlere neden olma ihtimali yüksektir. Bu nedenle, "Bu tür bir soru" önemlidir ve sınır dışı bir cevap verme olasılığı, gönderilmemesi makul değildir. Bu sitedeki kullanıcıların yetişkin olduğunu varsayıyorum. Benim Q'mun ifade edilme şekli, tarafsız olmasaydı, o zaman yıkılma insanlarına karşı saygılıydı - Q'uma cevap veren cevaplar, tersine gitmenin aleyhte olanı değil, git üzerindeki avantajlarından bahsetmek zorunda kalacak.
Doug

@SpencerRathbun, Teşekkürler! Buna bir göz atmam gerekecek. Svn'yi sevmediğim için çok fazla değil.
maple_shaft

10
@Spencer - Aksine, her ikisinin de kullanıcısı olarak gitve çok fazla olduğunu düşünen herkese mercurialhg öneririm . TortoiseHg olacağını çok kullanılan herkese tanıdık TortoiseSVN (hatta Windows üzerinde aynı Explorer bindirmeleri paylaşır). Kesinlikle VSS'den çok daha kolay ve bir hg repo kurmak, ilk durumu onaylamak ve paylaşılan bir sürücüye klonlamak birkaç saniyeden uzun sürerse şaşırırdım. git
Mark Booth

@MarkBooth Orijinal soruda belirtildiği gibi, bunun bir istek ve ihtiyaç meselesi olduğunu düşünüyorum. Şu andaki iş yerimde oraya gitmeden önce bir depo yoktu. Birbirine sarılmasını istediğim, hepsinin veya çoğunun hepsine sahip olan, kullanımı kolay , delta yerine her şeyi tutan ve birden fazla makinede 1 veya 2 kişilik ekipler için dağıtılmış bir işe ihtiyacım vardı.
Spencer Rathbun

20

Bunların hepsi görecelidir ve maple_shaft'ın dediği gibi biri sizin için çalışıyorsa değişmeyin!

Ancak gerçekten bir şey istiyorsanız , tasarımcılar, web programcıları ve benzerleri için belki daha iyi olduğunu söyleyebilirim - görüntüleri ve ikili dosyaları biraz daha iyi ele alır.


2
SVN onları daha iyi nasıl idare ediyor? Git her dosyayı bir BLOB olarak görür.
WarrenT

4
@WarrenT iş akışları nedeniyle, git ile birlikte dallanıyor ve birleşiyorsunuz (veya neden kullanmıyorsunuz) ve ikili dosyaları gerçekçi bir şekilde birleştiremiyorsunuz. Bu nedenle, SVN'deki ikili dosyalara genellikle "needs lock" özelliğini koyarsınız.
gbjbaanb

1
Bazı ikili dosyalar (teorik olarak) örneğin ODT belgesi gibi birleştirilebilir.
Donal Fellows,

18

Kullanılabilirlik. Bu gerçekten Subversion'un esası değil, aksine TortoiseSVN 'dir. TortoiseGit var, ancak TortoiseSVN ile eşleşmek için hala çok uzun bir yolu var.

Git'in SVN'den daha iyisini yaptığını sorarsanız GitHub'a cevap veririm . Üçüncü taraf araçların bu kadar büyük bir fark yaratması ne kadar komik.


1
Assembla ( listedeki herhangi bir desteklenen SCM - SVN için) github'dan daha iyidir, bence
Lazy Badger

Ayrıca smartgit, GitXL, vb. şimdi, git kullanımını daha da kolaylaştıran programlar var
wirrbel

@LazyBadger, Hiç duymadım.
Pacerier

16

Ne zaman şube ve birleştirme gerekmez (ile, SVN TortoiseSVN Windows üzerinde) anlamak ve kullanımı çok kolaydır. Git, dallanma / birleşmeyi kolaylaştırmaya çalıştığı için basit durumlar için aşırı karmaşıktır.

(Çok sayıda küçük projenin iyi yönetilmesi durumunda dallanması gerekmez. Git karmaşık durumlara yöneliktir, bu nedenle çoğu Git belgesi dallanma ve birleştirme gibi karmaşık işlemler yapmanız gerektiğini varsayar.)


8
gitDallanma ve birleştirme kullanmak karmaşık işlem değildir. Dalları tek kişilik bir projede bile kullanıyorum, hatta birden fazla versiyon için gereklilik olmasa bile. Çalışmayı sürdürmek, şu anda bir dalda devam edemezsiniz, başka bir çözümü denemenin daha iyi olabileceğini öğrendiğinizde dallanma ... Ancak, bunu gitöğrenmenin biraz daha zor olduğunu kabul ediyorum .
maaartinus

Eski versiyonlarda hata düzeltmeleri yapmanız gerektiğinde dallanma ve birleştirme gerekir.

1
Neden insanlar mercurial'ın svn veya git'ten daha kolay olduğu fikrini düşünmüyorlar?
Warren P,

Bunun bir kısmı, SVN'nin yakın zamana kadar çok yüksek bir maliyet olmadan dallanmayı ve birleşmeyi desteklemediği için, programcının birisinin üzerinde çalıştığı şeyi değiştirmeye devam etmek istediklerinde yöneticilere daha fazla ayağa kalkmasına izin vermiş olduğunu düşünüyorum. Bir araç bir şirketin politikaları dahilinde çalışmak zorundadır ve ayrıca bir şirketin politikalarını şekillendirmeye yardımcı olur.
Ian

14

Büyükbabam Windows XP bilgisayarında SVN kullanabilirdi ama Git'i kullanmakta zorlandı. Belki de bu, TortoiseGit'e göre TortoiseSVN'nin bir başarısıdır , ancak Git'in doğası gereği daha güçlü ve dolayısıyla daha karmaşık olduğu ve bunun aynı düzeye indirilmesi anlamsız olacağı kanısındayım.

Artık büyükbabam için hiç önemi yok, çünkü geç saatlerden beri herhangi bir programlama yapmadı. Ancak, bir zamanlar grafik sanatçılarımızın kaynak kontrolümüzü de kullandığı bir takımdaydım.

Ve onlar sadece aletlerinin çalışmasını bekleyen insanlar (ben de öyleyim, ama başarısızlık durumunda çalışmalarını sağlamak için gerçekçi bir şansım var) ve sezgisel olmaları. DVCS ile anlaşmaları için oldukça çaba sarf etmesi gerçeğinden ayrı olarak, kazanılacak çok az şey vardı. Ve takımdaki sadece iki programcı ile, SVN'e bağlı kalmamız bizim için bir anlam ifade etti.


git, sürüm kontrolüne daha "felsefi" bir yaklaşımdır. Eğer bir "yedek" ve dağıtım aracı var daha sert zaman olarak bir VCS kullanmak isteyenler Yani vb kaydedilmesini semantik, dalları, düşünmeye başlamak, ama git çok daha zor değil
wirrbel

11

İşyerinde iki nedenden dolayı geliştiricileri SVN'den herhangi bir DVCS'ye geçiremedim :

  • Kısmi ödeme (proje ağacındaki farklı derinliklerden yalnızca üç klasör gibi)
  • Dosya kilitleme (ikili format raporları)

8
  • Bir 'svn taahhüdü' yaparken güvenlik duygusu. Taahhütler sunucuya gittiği için, yaptıklarımı yaptıktan sonra değişikliklerimi silecek yapabileceğim bir hata oluşmaz. Git'te, yerel bir emirdir, ittiğim zamana kadar başıboş bir 'rm -rf' olur ve her şey biter.
  • Taahhütler onaylandı. Git'te varsayılan olarak herkes olarak iş yaptığımı söyleyebilirim.
  • Günlük kullanım için öğrenmek için daha az komut. 'svn ödeme', 'svn' ve 'svn taahhüdü' sizi oldukça uzağa götürecektir.
  • Paylaşılan çıkışlar çok daha iyi çalışır. Taahhüt ettiğinizde, sizden kullanıcı adınızı / şifrenizi sorar, belirli komut satırı argümanlarını iletmeyi hatırlamanız gerekmez. Bazen işte bazı projelerin ortak svn ödemeli ortak bir makinemiz var. Birisi "Bob'a bu makinede bakabilir misin?" Diyebilir ve yapabilir ve değişiklik yapmadan kullanıcı olarak değişiklik yapabilir.
  • Havuz düzeni. Bir şemsiye projeye ve alt projelere sahip olabilir ve ne zaman kontrol edeceğinizi seçebilirsiniz.
  • Revizyon numaraları, tamsayıları artırıyor.
  • Merkezi depo iş akışı için tasarlanmıştır.

Kimlik doğrulama sorunu için +1. Git taahhütlerinin imzalanması gerekiyor ve imzaların kontrol edilmesi gerekiyor ki bu da zor.
Hıristiyan

6

Diğer insanlar da oldukça iyi cevaplar verdiler, peki ya İzinler? SSH üzerinden Subversion kullanarak, sunucunuzda SVN için ayrı bir hesap oluşturabilirsiniz. Farklı geliştiricilere, havuzun farklı bölümlerine farklı erişim izni verilebilir. GIT bunu yapabilir mi? Sanırım, gitolit var, ama bana göre esnek ya da sağlam görünmüyor, ne de gerçekten kullanan birini tanımıyorum.


2
Diğerleri de "yukarıdan aşağıya yönetim kontrolü" nden bahsetti. Bu benim ortamım için kilit bir unsur - bazı kullanıcı gruplarında salt okunur olması veya hatta okunmaması için kilitlenmesi gereken depo alanlarımız var. Ayrıca, işaret edebileceğimiz tek bir yere sahip olmamız ve "bu yetkili ana kopyadır, eğer kopyanız burada olanla eşleşmiyorsa resmi değildir" diyebiliriz.
alroc

1
Proje liderinin mübarek deposu ve teğmenler kimi taahhüt edebileceğini kontrol ediyor Http-auth etkin sunucuda yayınlanan Git repo (svn aynı apache modüllerini kullanarak) kimlik doğrulaması yapar ve kimin neyi klonlayabileceğini / kontrol edebileceğini söyler. Tabii, dizin izinleri başına svn kadar ayrıntılı değil, ama bana göre gerçek ihtiyaçtan çok mikro yönetim gibi görünüyor.
Hubert Kario

@HubertKario - bu, "En iyi programcıların zamanlarını başkalarının kodlarını kontrol ederek mi geçiriyorlar?" Sorusunu gündeme getiriyor. Aslında, bu sorunun cevabını çok merak ediyorum, buraya gönderdim: programmers.stackexchange.com/questions/181817/…
GlenPeterson

5

Hız. Bazen büyük bir git deposunu klonlamak 10 veya 15 dakika sürerken, benzer büyüklükteki bir çöküş deposu da kontrol etmek için birkaç dakika sürebilir.


6
Ancak ödeme / klonlama nadir görülen bir işlemdir. Çoğu senaryoda, git, yıkılmadan daha hızlıdır.
rds

5
git clone --depth=1tarihi
önemsemiyorsanız

4

Bunu yorum yerine bir cevap olarak gönderiyorum.

DVCS'nin şu an oldukça trendde olduğunu itiraf ediyorum, fakat nedenini anlatmaya çalışacağım.

DVCS daha iyi çünkü tıpkı birçok insanın dediği gibi, "bu en başından beri çalışmamız gereken şeydi". Doğru, SVN ile eski haline getirdiğiniz şeyleri DVCS ile yapabilirsiniz, böylece SVN'yi eski kılar.

Ancak, her yazılım projesi göründüğü kadar iyi değildir:

  • Uzun vadeli projenin DVCS'den yararlandığı çok şey var, çünkü daha az ek yük kullanıyor, daha iyi yönetim sağlıyor (dallanma vb.) Ve google code ve github gibi ev sahipleri tarafından büyük ölçüde destekleniyor.

  • Bu projeler tek değildir, dış dünyadan veya internetten yardım almadan şirketlerde geliştirilen başka tür projeler de vardır: her şey dahili olarak ve genellikle kısa vadede yapılır. İyi bir örnek: bir video oyunu. Kod hızla gelişir.

İkinci durumda, geliştiricilerin DVCS'nin sunabileceği dallanma veya karmaşık özelliklere gerçekten ihtiyacı yok, sadece kaynak kodunu ve varlıklarını paylaşmak istiyorlar. Yaptıkları kodun tekrar kullanılması muhtemel değildir, çünkü bir son tarih vardır. Birkaç nedenden dolayı DVCS yerine SVN'ye güveniyorlar:

  • Geliştiricilerin şirkete ait makineleri var ve bu hızla değişebilir. Bir repo yapılandırmak zaman kaybıdır.
  • Bu adamlar kendi makinelerine sahip değilse, projenin aynı kaynak kodunda / kısmında çalışıyor olma ihtimalleri daha düşüktür. Artı, merkezi veri için bir tane.
  • ağ hızları ve büyük para, SVN ile her şeyin üstesinden gelen merkezi bir sunucunun kullanımına izin verir, kötü bir uygulamadır ancak yedekleme yapılır.
  • SVN, yanlış yol olsa bile, kullanımı daha basittir : yedeklilik olmadan eşler üzerindeki dosyaları senkronize etmek basit bir sorun değildir ve "her zaman mükemmel olmasını istiyorsanız" doğru şekilde yapın ".

Oyun endüstrisi makinesini ve SVN'nin nasıl zaman kazandıracağını düşünün; insanlar bu projeler üzerinde çok daha fazla iletişim kuruyorlar çünkü oyunlar tekrarlayan programlama ve uyarlanabilir kodlar hakkında: kodlaması zor bir şey yok, ama doğru şekilde yapılması gerekiyor, asap. Programcılar işe alınır, rollerini kodlarlar, derlerler, biraz test ederler, işlerler, tamamlarlar, oyun testçileri geri kalanıyla ilgilenir.

DVCS internet ve çok karmaşık bir proje için üretilmiştir. SVN küçük, kısa vadeli, sıkı ekip projeleri içindir. SVN'den çok şey öğrenmenize gerek yok, aptal bir farkla neredeyse bir FTP.


Oyun endüstrisi örneğini açıklayabilir misiniz?
johnny

3

Subversion ve Git, kalkınma ve işbirliğine yönelik özel (ve çok farklı) yaklaşımları teşvik ediyor. Bazı kuruluşlar Git'ten daha fazla yararlanırken, diğerleri de kuruluşlarına ve kültürlerine bağlı olarak Subversion'dan daha fazla yararlanacaktır.

Git ve Mercurial, oldukça yetenekli profesyonel programcıların dağıtılmış ve gevşek organize ekipleri için mükemmeldir. Bu popüler DVCS araçlarının her ikisi de (nispeten) kararlı arayüzlere sahip yayınlanmış kütüphaneler aracılığıyla gerçekleştirilen geliştiriciler arasında yeniden kullanımıyla küçük depoları teşvik eder.

Diğer taraftan, yıkım, geliştiriciler arasında daha fazla iletişim ve günlük gelişim faaliyetleri üzerinde daha fazla bir derece kurumsal kontrol derecesi ile daha merkezi ve sıkı bir şekilde birleştirilmiş bir yönetim yapısını teşvik eder. Bu daha kompakt bir şekilde organize olmuş ekipler içerisinde, geliştiriciler arasındaki yeniden kullanım, (nispeten) dengesiz arayüzleri olan yayınlanmamış kütüphaneler aracılığıyla gerçekleşme eğilimindedir. TortoiseSVN aynı zamanda Subversion'un profesyonel programcı olmayan üyelerle çok disiplinli takımları desteklemesine de izin verir (örneğin, sistem mühendisleri, algoritmalar mühendisleri veya diğer konu uzmanları).

Ekibiniz ya evden ya da birçok farklı uluslararası siteden çalışan üyelerle ya da çok az yüz yüze iletişim ile yalnız ve sessizce çalışmayı tercih ediyorlarsa, Git veya Mercurial gibi bir DVCS iyi olacaktır. kültürel uyum.

Öte yandan, ekibiniz gelişmekte olan aktif bir "ekip" yaklaşımı ve havada yüz yüze iletişim kurabilen tek bir sitede bulunuyorsa, SVN olabilir. Daha iyi kültürel uyum, özellikle çok sayıda disiplinlerarası ekibiniz varsa.

Elbette, Git ve Hg'yi (oldukları gibi güçlü ve esnek) ne istersen hemen hemen yapacak şekilde yapılandırmak mümkündür, ancak kesinlikle daha fazla iş vardır ve özellikle ekip üyeleri için kullanımı kesinlikle daha zordur. doğal olarak, herhangi bir sürüm kontrolü kullanmaya meyilli değildir .

Son olarak, Svn altında "sıcak" kütüphane geliştirmeyi kullanan (CI ve test odaklı bir yaklaşımla) işlevselliği paylaşmanın, daha dağınık ve gevşek bir şekilde birleştirilmiş bir ekiple elde edilmesi zor bir koordineli gelişim hızına izin verdiğini de biliyorum.



1

Şu anda sürüm kontrolünde iki ana eğilim var; Dağıtım ve Entegrasyon .

Git ademi merkeziyetçilikte harika.

SVN, onunla bütünleşen birçok araç içeriyor. SVN sunucunuzu ayarlamak, genel olarak bir düzeltme yaptığınızda, check-in yorumundaki hata numarasından bahsettiğiniz ve otomatik olarak bunu ancak "test etme" durumuna ayarlayan ve atanan test cihazına gerekli olduklarını bildiren bir sistemdir. ona bak. Ardından bir sürümü etiketleyebilir ve bu sürümde düzeltilen tüm hataların bir listesini alabilirsiniz.

SVN ile bunu yapan araçlar olgun ve her gün kullanılıyor.


-1

Subversion'da, işlem tamamlandıktan ve ittikten sonra günlük iletilerini ("taahhüt mesajları" olarak da bilinir) düzenleyebilirsiniz. Pratik kullanımların çoğu için, git dahil merkezi olmayan sistemlerde tasarım yapmak imkansızdır. Elbette, git'te "git commit --amend" i yapabilirsiniz, ancak bu, taahhüdünüz başka bir yere itildikten sonra size yardımcı olmaz. SVN’de, günlük mesajını düzenlerken, bunu herkesin paylaştığı merkezi depoda yapıyorsunuz, böylece herkes düzenlemeyi alacak ve revizyonun tanımlayıcısı değişmeden.

Olaydan sonra günlük mesajlarını düzenlemek genellikle çok yararlıdır. Bir günlük mesajındaki bir hatayı veya bir ihmali düzeltmenin yanı sıra, gelecekteki bir taahhüte atıfta bulunmak için bir günlük mesajını güncelleme gibi şeyler yapmanıza olanak tanır (örneğin, bir hatayı düzelten veya mevcut revizyonda sunulan çalışmayı tamamlayan revizyon gibi) .

Bu arada, bilgi kaybı tehlikesi yoktur. Revprop-değişim ve revprop-değişim sonrası kancalar, gerçekten endişelendiyseniz eski mesajların geçmişini kaydedebilir veya günlük mesajı farkıyla birlikte e-postalar gönderebilir (bu daha yaygındır). denetim izi.


1
bu aynı zamanda git yapmak için basittir; örneğin, git --amend; Bunu yapmanın başka bir yolu da git reset - soft HEAD ^ 'dır, sadece geri döner, ancak dizini değiştirmez, böylece mesajını düzenleyebilir / yeniden yazabilirsiniz.
Doug

Selam Doug. Evet, yerel deponuz için yapabilirsiniz, ancak değişikliği başka bir yere ittikten sonra - "git commit --amend" size çok yardımcı olmaz. SVN'de, merkezi bir sunucu kavramı olduğundan tam olarak merkezi sunucudaki günlük mesajını düzenleyebilirsiniz. "Merkeziyetçi sistemlerde tasarımla imkansız" derken demek istediğim de buydu. Bunu daha net hale getirmek için cevabımı düzenleyeceğim.
Karl Fogel 17:13

1
"Tarihle dolaşabildiğiniz" iddiasıyla bir özellik olduğunu seviyorum . Kasıtlı olmasa, bunun bir hata olduğunu düşünürdüm.
cHao
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.