Yeni bir dağıtılmış projeye başlıyorum. SVN veya Git kullanmalı mıyım ve neden?
Yeni bir dağıtılmış projeye başlıyorum. SVN veya Git kullanmalı mıyım ve neden?
Yanıtlar:
SVN bir repo ve çok sayıda müşteridir. Git, her biri bir kullanıcısı olan çok sayıda müşteri deposuna sahip bir repo. İnsanların işleri harici bir sunucuya zorlamak zorunda kalmadan kendi düzenlemelerini yerel olarak izleyebilecekleri bir noktaya dağıtılmıştır.
SVN, Git'in kendi Git deposuna sahip her bir kullanıcıya dayandığı ve bu depoların değişiklikleri merkezi bir merkeze ittiği daha merkezi olacak şekilde tasarlanmıştır. Bu nedenle Git, bireylere daha iyi yerel sürüm kontrolü sağlar.
Bu arada TortoiseGit , GitExtensions arasında seçim yapabilirsiniz (ve "merkezi" git- deponuzu github'da , kendi istemcisi olan Windows için GitHub'da barındırıyorsanız ).
SVN'den çıkmak istiyorsanız, Bazaar'ı biraz değerlendirmek isteyebilirsiniz . Bu dağıtılmış öğeye sahip yeni nesil sürüm kontrol sistemlerinden biridir. Git gibi POSIX bağımlı değil, bu yüzden yerel Windows yapıları var ve onu destekleyen bazı güçlü açık kaynak markaları var.
Ancak henüz bu tür özelliklere ihtiyacınız olmayabilir. Göz at dağıtılmış VCSes özellikleri, avantajları ve dezavantajları . SVN tekliflerinden daha fazlasına ihtiyacınız varsa birini düşünün. Bunu yapmazsanız, SVN'nin (şu anda) üstün masaüstü entegrasyonuna bağlı kalmak isteyebilirsiniz.
"Git Windows'ta iyi değil" kavramını hiç anlamadım; Sadece Windows altında gelişiyorum ve git ile hiç problem yaşamadım.
Kesinlikle git subversion üzerinde tavsiye ederim; onun sadece çok daha çok yönlü ve yıkım asla gerçekten olamazdı bir şekilde "çevrimdışı geliştirme" sağlar. Akla gelebilecek hemen hemen her platformda mevcut ve muhtemelen kullanacağınızdan daha fazla özelliğe sahip.
İşte o zamandan beri Git vs. SVN (Eylül 2009) hakkında silinen bazı soruların cevaplarının bir kopyası .
Daha iyi? Her zamanki bağlantı olan WhyGitIsBetterThanX dışında , bunlar farklıdır:
biri dallar ve etiketler için ucuz kopyaya dayanan bir Merkezi VCS, diğeri (Git) bir revizyon grafiğine dayanan dağıtılmış bir VCS'dir. Ayrıca bkz . VCS'nin temel kavramları .
Bu ilk bölüm, iki programın (SVN ve Git) temel amacının aynı olduğunu, ancak bunların oldukça farklı uygulandığını iddia eden yanlış bilgilendirilmiş yorumlar üretti. SVN ve Git arasındaki temel farkı
açıklığa kavuşturmak için şunu tekrar yazayım:
SVN, revizyon kontrolünün üçüncü uygulamasıdır : RCS, daha sonra CVS ve son olarak SVN , sürüm verilerinin dizinlerini yönetir. SVN, VCS özellikleri (etiketleme ve birleştirme) sunar, ancak etiketi yalnızca bir dizin kopyasıdır (bir şube gibi, bir etiket dizinindeki herhangi bir şeye dokunmanız "gerekmemesi dışında) ve birleştirme hala karmaşıktır, şu anda meta -data zaten birleştirilenleri hatırlamak için veri eklendi.
Git, şubelerin veri geçmişinin bir parçası olduğu (ve verilerin kendisinin değil) bir DAG ( Yönlendirilmiş Döngüsel Grafik ) tabanlı gerçek bir Sürüm Kontrol Sistemine dönüşen bir dosya içerik yönetimidir (dosyaları birleştirmek için yapılmış bir araçtır) ) ve etiketlerin gerçek bir meta veri olduğu durumlarda.
"Temelde" farklı olmadıklarını söylemek, çünkü aynı şeyi başarabilir, aynı problemi çözebilirsin, ... pek çok seviyede açık yanlıştır.
Yine de o eski (silinmiş) cevaba ilişkin yorumlar ısrar ediyor:
VonC: Uygulamadaki temel farkı (farklılıklar çok temel, ikimiz de bunu açıkça kabul ediyoruz) amaç farklılığı ile karıştırıyorsunuz.
Her ikisi de aynı amaç için kullanılan araçlardır: Bu yüzden daha önce SVN'yi kullanan birçok takımın Git'i lehine başarılı bir şekilde basabildi.
Aynı sorunu çözmedikleri takdirde, bu ikame edilebilirlik mevcut olmazdı.
, cevap verdim:
"ikame edilebilirlik" ... ilginç bir terim ( bilgisayar programlamasında kullanılır ).
Elbette, Git neredeyse hiç SVN'nin bir alt türüdür.
Her ikisinde de aynı teknik özellikleri (etiket, şube, birleştirme) elde edebilirsiniz, ancak Git yolunuza girmez ve aracın kendisini düşünmeden dosyaların içeriğine odaklanmanıza izin vermez .
Kesinlikle (her zaman) sadece SVN'yi Git ile değiştiremezsiniz (bu programın arzu edilen özelliklerinden herhangi birini değiştirmeden (doğruluk, gerçekleştirilen görev, ...) "(bu yukarıda belirtilen yerine getirilebilirlik tanımına referanstır ):
Yine, doğaları temelde farklıdır (bu daha sonra farklı uygulamalara yol açar, ancak mesele bu değildir).
Birisi revizyon kontrolünü dizinler ve dosyalar olarak görür, diğeri sadece dosyanın içeriğini görür (o kadar ki boş dizinler Git'e bile kaydolmaz!).
Genel son hedef aynı olabilir, ancak bunları aynı şekilde kullanamazsınız veya aynı sınıf sınıfını (kapsam veya karmaşıklık) çözemezsiniz.
SVN'nin nadiren alıntılanan 2 temel avantajı:
Büyük dosya desteği. Koda ek olarak, ev dizinimi yönetmek için SVN kullanıyorum. SVN, TrueCrypt dosyalarımı boğmayan tek VCS'dir (dağıtılmış veya dağıtılmamış) (lütfen 500MB + dosyaları etkili bir şekilde işleyen başka bir VCS varsa beni düzeltin). Bunun sebebi fark karşılaştırmalarıdır (bu çok önemli bir noktadır). Rsync kabul edilemez çünkü 2 yönlü değildir.
Kısmi depo (alt dizin) çıkış / iade. Mercurial ve bzr bunu desteklemez ve git'in desteği sınırlıdır. Bu bir takım ortamında kötüdür, ancak ev bilgisayarımdaki başka bir bilgisayarda bir şey kontrol etmek istersem paha biçilmezdir.
Sadece deneyimlerim.
Daha fazla araştırma yaptıktan ve bu bağlantıyı inceledikten sonra: https://git.wiki.kernel.org/articles/g/i/t/GitSvnComparison_cb82.html
(Aşağıda bazı alıntılar):
Tüm bunları okuduktan sonra Git'in bir yol olduğuna ikna oldum (biraz öğrenme eğrisi olmasına rağmen). Git ve SVN'yi Windows platformlarında da kullandım.
Yukarıdakileri okuduktan sonra başkalarının ne söylediğini duymak isterim?
Bir Subversion deposu kurarım. Bu şekilde, bireysel geliştiriciler Subversion istemcilerini mi yoksa Git istemcilerini mi (ile git-svn
) kullanmayı seçebilirler . Kullanmak git-svn
size tam bir Git çözümünün tüm avantajlarını sağlamaz, ancak bireysel geliştiricilere kendi iş akışları üzerinde büyük bir kontrol sağlar.
Git'in Unix ve Mac OS X'te olduğu gibi Windows'ta da iyi çalışmasının nispeten kısa bir zaman olacağına inanıyorum (sizden beri istediniz).
Subversion, Windows entegrasyonu için TortoiseSVN ve Visual Studio entegrasyonu için AnkhSVN gibi Windows için mükemmel araçlara sahiptir.
Komik olan şey: Subversion Repos'ta projeleri barındırıyorum, ancak Git Clone komutu ile bunlara erişiyorum.
Lütfen Google Code Projesi'nde Git ile Geliştir'i okuyun
Google Code Subversion'ı doğal olarak konuşmasına rağmen, geliştirme sırasında Git'i kolayca kullanabilirsiniz. "Git svn" araması bu uygulamanın yaygın olduğunu gösterir ve biz de bunu denemenizi öneririz.
Git'i bir Svn Deposunda kullanmak bana faydalar sağlar:
backup/public
svn depom varSorunuzu gerçekten yanıtlamıyor ancak Dağıtılmış Revizyon Kontrolünün faydalarını istiyorsanız - sizin gibi geliyor - ve Windows kullanıyorsanız, Mercurial'ın Git olarak Mercurial'ın daha iyi Windows desteği olması yerine Mercurial'ı kullanmaktan daha iyi olacağını düşünüyorum . Mercurial'ın bir Mac portu da var.
Ekibiniz zaten cvs veya svn gibi sürüm ve kaynak kontrol yazılımlarına aşina ise, basit ve küçük bir proje için (iddia ettiğiniz gibi), SVN'ye bağlı kalmanızı tavsiye ederim. Svn ile gerçekten rahatım, ancak django'da yaptığım mevcut e-ticaret projesi için git üzerinde çalışmaya karar verdim (git'i svn modunda kullanıyorum, yani itip çektiğim merkezi bir repo ile en az bir başka geliştirici ile ortak çalışma yapmak için). Diğer geliştirici SVN ile rahat ve başkalarının deneyimleri farklı olsa da, ikimiz de bu küçük proje için git'i kucaklamak için gerçekten kötü bir zaman geçiriyoruz. (İkimiz de önemli Linux kullanıcılarıyız, eğer önemliyse.)
Yaptığınız mil değişebilir, elbette.
Kesinlikle svn
, Windows - en iyi ihtimalle - dünyasında ikinci sınıf bir vatandaş olduğundan git
( daha fazla bilgi için bkz. Http://en.wikipedia.org/wiki/Git_(software)#Portability ).
GÜNCELLEME: Bozuk bağlantı için özür dilerim, ama SO'yu parantez içeren URI'lerle çalışmasını sağlamaya çalıştım. [bağlantı düzeltildi. -ed]
Ana nokta Git'in dağıtılmış bir VCS ve Subversion'un merkezileştirilmiş olmasıdır. Dağıtılmış VCS'lerin anlaşılması biraz daha zordur, ancak birçok avantajı vardır. Bu avantajlara ihtiyacınız yoksa Subversion daha iyi bir seçim olabilir.
Başka bir soru araç desteğidir. Hangi VCS kullanmayı planladığınız araçlar tarafından daha iyi desteklenir?
EDIT: Üç yıl önce bu şekilde cevap verdim:
Git şu anda Windows'ta yalnızca Cygwin veya MSYS aracılığıyla çalışıyor . Subversion, Windows'u en başından destekledi. Windows için git-çözümleri sizin için işe yarayabileceğinden, Git'in çoğu geliştiricisi Linux ile çalıştığı ve en başından beri akılda taşınabilirlik olmadığı için sorunlar olabilir. Şu anda Subversion'u Windows altında geliştirme için tercih ederim. Birkaç yıl içinde bu önemsiz olabilir.
Şimdi dünya biraz değişti. Git'in pencerelerde iyi bir uygulaması var. Her ne kadar (bu sistemi artık kullanmıyorum) pencerelerde kapsamlı bir şekilde test etmeme rağmen, tüm büyük VCS'lerin (SVN, Git, Mercurial, Bazaar) şimdi Windows uygulamasının uygun olduğundan eminim. SVN için bu avantaj ortadan kalktı. Diğer noktalar (Merkezi - Dağıtılmış ve takım desteği kontrolü) geçerliliğini korur.
Daha yaygın ve daha iyi bilindiği için SVN'yi tercih ederim.
Sanırım Git Linux kullanıcısı için daha iyi olurdu.
Git henüz Windows altında yerel olarak desteklenmemektedir. Posix sistemleri için optimize edilmiştir. Ancak Cygwin veya MinGW'yi çalıştırmak Git'i başarılı bir şekilde çalıştırmanızı sağlar.
Bugünlerde Git'i SVN'ye tercih ediyorum, ancak CVS, SVN topraklarından gelirseniz eşiği aşmak biraz zaman alıyor.
Muhtemelen Git'i seçerdim çünkü SVN'den çok daha güçlü olduğunu hissediyorum. Benim için harika çalışan ucuz Kod Barındırma hizmetleri var - yedeklemeler veya herhangi bir bakım işi yapmak zorunda değilsiniz - GitHub en açık adaydır.
Bununla birlikte, Visual Studio ve farklı SCM sistemlerinin entegrasyonu hakkında hiçbir şey bilmiyorum. SVN ile entegrasyonun daha iyi olduğunu hayal ediyorum.
SVN'yi uzun zamandır kullandım, ancak Git'i her kullandığımda Git'in çok güçlü, hafif olduğunu ve biraz öğrenme eğrisi olmasına rağmen SVN'den daha iyi olduğunu hissettim.
Belirttiğim, her SVN projesinin, büyüdükçe, ihraç edilmedikçe çok büyük bir proje haline gelmesidir. GIT projesi (Git verileriyle birlikte) çok hafiftir.
SVN'de, acemiden uzmanlara geliştiricilerle uğraştım ve acemiler ve ara ürünler, yeniden kullanmak için başka bir SVN projesinden bir klasörü kopyalarlarsa Dosya çakışmalarını tanıttılar. Oysa Git'te sadece klasörü kopyalarsınız ve çalışır, çünkü Git tüm alt klasörlerinde .git klasörlerini (SVN'nin yaptığı gibi) tanıtmaz.
SVN ile uzun zamandan beri çok uğraştıktan sonra, sonunda geliştiricilerimi ve beni Git'e taşımayı düşünüyorum, çünkü işbirliği yapmak ve işi birleştirmek kolay, ayrıca büyük bir avantaj da yerel bir kopyanın değişikliklerinin yapılabileceği istenir ve daha sonra SVN'den farklı olarak (sunucudaki depoda zaman zaman değişiklikler yapmak zorundayız) tek seferde sunucudaki şubeye itilir.
Git ile gerçekten gitmem gerekip gerekmediğine karar vermeme yardımcı olabilecek biri var mı?
.svn
her alt dizinde bir klasöre ihtiyacı yoktur . Bu, kopyalama hatasını gerçekleşmeden önce "düzeltir".
Aşağıdakilere gelir:
Gelişiminiz doğrusal olacak mı? Eğer öyleyse, Subversion'a sadık kalmalısınız.
Öte yandan, gelişiminiz doğrusal olmayacak, bu da farklı değişiklikler için dallanma oluşturmanız ve daha sonra bu değişiklikleri ana geliştirme hattına (Git ana dal olarak bilinir) geri birleştirmeniz gerektiği anlamına gelir. Sizin için ÇOK daha fazlası.
Bzr'i denedin mi?
Piyasada başka bir şey sevmedikleri için oldukça iyi, kononik (Ubuntu yapan insanlar) bunu yaptı ...
Soruyu genişletebilir ve Git'in MacOS'ta iyi çalışıp çalışmadığını sorabilir miyim?
Yorumları Yanıtla: Haber için teşekkürler, bunu denemek için sabırsızlanıyordum. Evde Mac'ime kuracağım.
YouTube'da bununla ilgili ilginç bir Video var. Linus Torwalds'ın kendisi: Goolge Tech Talk: Linus Torvalds on git
SVN, diğer insanlar tarafından işaret edildiği gibi Windows altında iyi bir seçim gibi görünüyor.
Geliştiricinizin bir kısmı GIT'i denemek isterse, her zaman SVN deposunun bir GIT deposunda yeniden oluşturulduğu GIT-SVN'yi kullanabilir. Daha sonra GIT ile yerel olarak çalışabilmeli ve daha sonra değişikliklerini ana depoda yayınlamak için SVN'yi kullanabilmelidir.
Bir DVCS ile gitmek zorundasınız, kaynak yönetiminde kuantum sıçraması gibi. Şahsen ben Monoton kullanıyorum ve hızlandırılmış geliştirme zaman sonu yok. Windows, Linux ve Mac için kullanıyoruz ve çok kararlı. Hatta platformların her birinde projenin gece yapılarını yapan buildbot'um var.
Dağıtıldığında DVCS genellikle insanların sadece değişiklik yapması ve göndermesi için merkezi bir sunucu oluşturacağınız anlamına gelir.