GIT - Perforce - İki VCS girecek… biri ayrılacak [kapalı]


85

Bu yüzden işyerinde GIT sattırma sürecindeyim. İhtiyacım olan ilk şey, herkesi GIT'in halihazırda yapmaya alıştıkları şeyde daha iyi olduğuna ikna etmek. Şu anda Perforce kullanıyoruz. Benzer bir satış yapan başka kimse var mı? Herhangi bir iyi bağlantı / tavsiye?

En büyük kazançlardan biri, ağ ile bağlantısı kesilmiş olarak onunla çalışabilmemizdir. Bir başka kazanç IMO, ekleme / ödeme işlemlerinin işlenme şeklidir. Daha fazla puan açığız! Ayrıca toplamda yaklaşık 10-20 geliştiricimiz var.

Yanıtlar:


75

Perl 5 yorumlayıcı kaynak kodu şu anda Perforce'dan git'e dönüştürme sürecinden geçiyor. Belki Sam Vilain'in git-p4rawithalatçısı ilgileniyordur.

Her durumda, her merkezi VCS üzerinde sahip olacağınız en büyük kazançlardan biri ve en çok dağıtılanlar da ham, kabaran hızdır . Tüm proje geçmişinin elinizin altında, sadece bir saniyenin kesirleri kadar uzakta, deneyimleyene kadar ne kadar özgürleştirici olduğunu hayal edemezsiniz. Her bir kesinleştirme için tam bir fark içeren tüm proje geçmişinin bir commit günlüğünü oluşturmak bile bir saniyenin kesirleri ile ölçülebilir. Git o kadar hızlı ki şapkan uçacak. Ağ üzerinden gidip gelmek zorunda olan VCS'lerin, bir Gigabit Ethernet bağlantısı üzerinden bile rekabet etme şansı yoktur.

Ayrıca git, taahhütler yaparken dikkatli bir şekilde seçici olmayı çok kolaylaştırır, böylece çalışma kopyanızdaki (hatta tek bir dosyadaki) değişikliklerin birden fazla işleme ve ihtiyacınız olursa farklı dallara yayılmasına izin verir. Bu, çalışırken daha az zihinsel not almanıza olanak tanır - işinizi o kadar dikkatli planlamanıza, hangi değişiklikleri yapacağınıza önceden karar vermenize ve başka herhangi bir şeyi ertelemenize gerek yoktur. İstediğiniz değişiklikleri, başınıza geldiklerinde yapabilirsiniz ve yine de, taahhüt etme zamanı geldiğinde - neredeyse her zaman oldukça kolay bir şekilde - çözebilirsiniz. Zula burada çok yardımcı olabilir.

Buldum ki, bu gerçeklerin doğal olarak git kullanmadan öncesine göre çok daha fazla odaklanmış taahhütler yapmama neden olduğunu gördüm. Bu da geçmişinizi genel olarak daha kullanışlı hale getirmekle kalmaz, aynı zamanda gibi katma değerli araçlar için özellikle yararlıdır git bisect.

Eminim şu anda düşünemeyeceğim daha çok şey vardır. Ekibinizi git üzerinden satma önerisiyle ilgili bir sorun, yukarıda ima ettiğim gibi, birçok avantajın birbiriyle ilişkili olması ve birbirini etkilemesidir, öyle ki, git'in özelliklerinin ve faydalarının bir listesine basitçe bakmak ve bunların nasıl olduğunu anlamak zordur. iş akışınızı değiştirecek ve hangi değişikliklerin iyi niyetli iyileştirmeler olacağı. Bunu hesaba katmanız ve ayrıca açıkça belirtmeniz gerekir.


İddiaya göre p4sandbox , p4'e bazı çevrimdışı yetenekler sağlar. Yine de gitmeyi seviyorum. :)
Dominic Mitchell

13
Git 'çevrimdışı yetenekler' sağlamaz , çevrimdışıdır. Kablo üzerinden veri gönderdiğiniz tek şey, başlangıç ​​noktasına taahhütleri gönderdiğinizde veya diğer alt depolardan değişiklikleri aldığınızda olur.
Evan Plaice

2
"Git o kadar hızlı ki şapkanız uçup gidecek" diye bayılırım :) İkili dosyaları teslim etmeye başladığınızda bunun doğru olmadığı tek şey. büyük depolar gitte zahmetlidir.
v.oddou

1
Ne yazık ki doğru. Git'in çalışma şekli dosyaları okumaya ve bir şekilde onları farklılaştırmaya bağlıdır, bu nedenle bunların makul boyutta ve iyi farklılık gösterebilmeleri gerekir. O zaman son derece hızlı olacaktır (yüzlerce işlem için anlık tam fark geçmişi örneğinde olduğu gibi). Büyük lekelerle mi? O kadar değil…
Aristotle Pagaltzis

84

İş yerinde Perforce kullanıyorum. Ayrıca Git kullanıyorum çünkü kod üzerinde çalışırken ve sunucuya bağlanamadığımda hala bir çeşit sürüm kontrolü istiyorum. Hayır, çevrimdışı çalışmayı uzlaştırmak aynı şey değil. Git'in büyük bir fayda olduğunu bulduğum yer:

  1. Dallanma hızı - git en fazla birkaç saniye sürer.
  2. Çatışmalar - P4Merge'in otomatik kararı, bir kez bir haftalık işi mahvetti. O zamandan beri, birleşirken elle çözmeyi tercih ederim. Git bana bir çatışmayı sorduğunda, bu aslında bir çatışmadır. Geri kalan zamanlarda git sorunları doğru bir şekilde çözer ve ben yığınla zaman kazandırırım.
  3. Birleşmeleri takip etmek - Diğer iki şubeden sürekli olarak birleşme alan bir şubeniz varsa, bunun performansla ne kadar baş ağrısı olabileceğini bilirsiniz. Git ile baş ağrısı en aza indirilir, çünkü git'teki bir birleştirmenin sonucu aslında atalarının kim olduğunu bilen yeni bir işlemdir.
  4. İzinler - Bir dosya üzerinde kaç kez çalışmayı denediğimi unuttum, ancak Perforce'da teslim alınmadığı için yapamadım. Çevrimdışı XCode (veya sağlam bir Perforce SCM eklentisine sahip olmayan herhangi bir düzenleyici) ile çalıştıysanız, bunun ne kadar rahatsız edici olabileceğini bilirsiniz. Git ile bunun için endişelenmeme gerek yok. Değişikliklerimi yaparım. Git beni durdurmuyor ve arka planda izliyor.
  5. Ana ağacı düzenli tutmak - Git ile taahhütlerimi sıralayabilir ve geçmişin güzel ve düzenli görünmesi için kodu düzenleyebilirim. Hiçbiri "önceki iade işleminin bir parçası olması gerektiği için bu dosyayı iade etme" çöplüğünün hiçbiri. Böyle taahhütleri eziyorum çünkü kimseye yardım etmiyorlar.
  6. Stashing - p4 shelve komutunu kullanmak için perforce sunucunuzun 2010.1 veya daha yeni bir sürümü olması gerekir.
  7. Yamalar oluşturma - Git'te yapmak çok kolay. Komut satırı kullanmadan Perforce'da mümkün olup olmadığını bilmiyorum.
  8. GUI'den yamaları postalamak - yine, git burada kazanır.
  9. Disk alanı - Performansla, her dal bir kopyadır. Bu, kaynak ağacınız çok büyükse, disk alanınızın hızla tüketileceği anlamına gelir. Bu, inşa etmeye başladıktan sonra ek alanı saymaz. Neden dallar ve disk alanı arasında bir bağlantı var? Git ile 100 şubeye sahip olabilirsiniz ve bir seferde yalnızca bir şube var olabilir. Özellikle aynı anda iki sürüm üzerinde çalışmak istiyorsanız, klonlayabilir, işinizi yapabilir ve ardından hiçbir şey kaybetmeden bir klondan kurtulabilirsiniz.
  10. XCode4'teyseniz, performans desteği düşürülmüştür ve git desteği artık yerleşiktir. Benim yaptığım gibi çapraz platform çalışması yaparsanız, bu çok önemli. Visual Studio ile git uzantılarını kullanabilirsiniz. Performans ile, her iki işletim sisteminde de eşit derecede kötüdür. Pekala, belki biraz daha mac için şimdi sahnede XCode4 ile.
  11. Hatalı check-in'i (veya git bisect kuralları) bulma - Bir hatanın nerede ortaya çıktığını anlamak için perforce ile ikili arama yapmayı hiç denediniz mi? Oldukça güçlük, değil mi? Ortadaki diğer dallardan entegrasyonlar olduğunda daha da güçlük çeker. Neden? Çünkü bu tür görevler için otomasyon yoktur. Yapmak için kendi aracınızı yazmanız gerekir ve genellikle zamanınız olmaz. Git ile, ona başlangıç ​​noktalarını ("iyi" ve "kötü" nokta) verirsiniz ve aramayı sizin için otomatikleştirir. Daha da iyisi, derleme ve test sürecini otomatikleştirebilen bir komut dosyanız varsa, git'i komut dosyasına bağlayabilirsiniz ve iade bulma işleminin tamamı otomatik hale gelir. Olması gereken bu.
  12. Yeniden düzenleyicilerdeki değişiklikleri izleme - BigClass'ı SmallClass1 ve SmallClass2'ye bölmeyi deneyin. Perforce için, BigClass artık var olmaktan çıktı ve iki yeni sınıf (SmallClass1 ve SmallClass2 kaynak ağacına katıldı). Perforce için, BigClass ile SmallClass1 ve SmallClass2 arasında bir ilişki yoktur. Öte yandan Git, BigClass'ın% x'inin artık SmallClass1'de ve BigClass'ın% y'sinin SmallClass2'de olduğunu ve BigClass'ın varlığının sona erdiğini bilecek kadar akıllıdır. Şimdi, birden çok daldaki değişiklikleri gözden geçiren birinin bakış açısından, bana hangi yaklaşımı daha yararlı bulacağınızı söylüyorsunuz - Git ya da Perforce. Şahsen ben Git'in yaklaşımını tercih ediyorum çünkü koddaki gerçek değişikliği daha doğru yansıtıyor. Git bunu yapabilir çünkü dosyanın kendisini değil dosyanın içindeki içeriği izler.
  13. Merkezileştirilmiş veya dağıtılmış: Git , performans merkezileştirilmişken bir DVCS sistemidir. Merkezi bir VCS daha sonra dağıtılamaz, ancak bir DVCS (özellikle git) merkezileştirilebilir. İşletmenin ihtiyaç duyduğu bir şeyse, git'e çok ince taneli erişim denetimi ekleyen birkaç ürün var. Kişisel olarak, uzun vadede bana daha fazla esneklik sağlayan bir sistemle giderdim.
  14. Dal eşlemeleri: Perforce'da dallanma doğru yapmak istiyorsanız, bir dal eşlemesi oluşturmanız gerekir. Bunun nedenleri var, ancak bunlar Perforce'un bir dalı nasıl kavramsallaştırdığına bağlı. Bir geliştirici veya ekip olarak bu, iş akışında hiç verimli bulmadığım bir adım daha anlamına geliyor.
  15. Ekipler arasında iş paylaşımı: Perforce ile bir gönderimi bölemezsiniz. A Takımı, B özelliği üzerinde A özelliği üzerinde çalışıyor. Takım B, B özelliği üzerinde çalışıyor. Takım C, hata düzeltmeleri üzerinde çalışıyor. Şimdi, Takım A ve B'nin özelliklerini uygulamak için bir grup hatayı düzeltmesi gerekiyor. Tek şey, değişikliklerini gerçekleştirirken çok disiplinli değillerdi (muhtemelen son teslim tarihine kadar acele ettikleri için) ve bu nedenle, "hata düzeltmeleri", sürüm kontrolü konusunda yeni şeyler de içeren daha büyük gönderilerin parçalarıdır. şubeler endişeli. Ancak, Takım C şu anda bir puan yayınlıyor ve diğer takımlardan hata düzeltmelerini almak istiyor. Takım C, Git kullanıyor olsalardı, diğer takımların ilgili değişikliklerini seçebilir, onları bölebilir ve kısmen uygulanan herhangi bir özellik sunma endişesi duymadan yalnızca ihtiyaç duydukları şeyleri alabilir. Perforce ile,
  16. Değişen platform - Gelecekte hangi nedenle olursa olsun, tercih ettiğiniz platformu değiştirmeye karar verirseniz, Perforce ile, Perforce.com'un merhametine ve seçtiğiniz platform için araçların mevcudiyetine bağlıdır.
  17. Gelecekteki şaşırtıcı kaynak kontrol motoru X'e geçiş - Kaynak kontrolü için kullandığınız şeyi değiştirmeye karar verirseniz, kaynak kontrol geçmişinizi Perforce'dan çıkarmak ve onu yeni sistem X'e taşımak bir kabus olacak, çünkü bu kapalı kaynak ve en iyisidir Yapabileceğiniz şey tahmin etmektir - neden bahsettiğimi anlamak için Google for Perforce'dan Git'e geçiş. En azından açık kaynağı olan Git ile, bu yüzden içerdiği birçok varsayımı ortadan kaldırır.

Bu benim 2 sentim. Perforce'un savunmasında, müşteri destek kurallarını ve Hızlandırılmış Görüntü İzleme araçlarını söylemeliyim. Git ile hızlandırılmış görünümü nasıl elde edeceğimi bilmiyorum. Ancak kolaylık ve kazanılan zaman için git ile her gün giderdim.


2
re # 6 (zula): p4 rafa kaldır, bu yeni.
Trey

Teşekkürler. Cevabımı güncelledim :)
Carl

8
Perforce ve Git arasındaki en büyük fark, gerekli zihin setidir. Merkezi bir VCS mağazası işletiyorsanız, git gerçekten zor bir satış olacaktır, çünkü sizin, ekibinizin ve işletmenin sürüm kontrolü hakkında düşünme şeklini değiştirmeyi gerektirir. Başka bir deyişle git, teknik olarak Perforce'dan daha yetenekli olan mükemmel ve verimli bir araçtır. İşin zor kısmı insanları ikna etmek :)
Carl

1
Ben Perforce'a aşığım. Bu
gönderiyi okumak

2
@KlausCPH En azından Perforce'den ayrıldığınızda bir ayrılık konuşması hazırlamak zorunda kalmayacaksınız :)
Carl

46

Perforce'dan geçiş yapmak beni çok ikna etmemi ister. Kullandığım iki şirkette fazlasıyla yeterliydi. Her ikisi de farklı ofislere sahip şirketti, ancak ofisler bol altyapı ile kurulmuştu, bu nedenle ayrık / bağlantısız özelliklere sahip olmaya gerek yoktu.

Kaç geliştiriciden bahsediyorsun?

Gerçek soru şudur: Kuruluşunuzun ihtiyaçlarını karşılamayan, git'in sağlayabileceği performans nedir? Ve benzer şekilde, git'in performansa kıyasla hangi zayıf yönleri var? Buna kendin cevap veremezsen, burada sormanın faydası olmaz. Şirketiniz için bir iş vakası bulmanız gerekiyor. (Örneğin, belki de daha düşük toplam sahip olma maliyetiyle (bu, ara öğrenme aşaması için üretkenlik kaybı, daha yüksek yönetici maliyetleri (en azından başlangıçta), vb.)

Bence zorlu bir satış yapmaktasınız - perforce, değiştirmeye çalışmak için oldukça iyi bir şey. Pvc'leri veya güvenliğini başlatmaya çalışıyorsanız, hiç akıllıca değil.


18
Git'in dikkat çekici özellik setinin dik bir öğrenme eğrisi pahasına geldiğini ekleyeceğim. (Perforce'u hiç bu kadar sezgisel
bulmamış olsam

1
Harika cevap Tim. Justin - patronun neden satıldı? Elbette bunu yapmak için Tim'in sorusunu ele almış olmalısın? Gerekçeyle ben de ilgilenirim.
Greg Whitfield

4
Ticari bir ortamda Perforce için ödeme yapmanız gerekiyor ve ben her zaman Perforce'un kullanımını sarsıcı buluyorum. Ve gerçekten gördüğüm tek güç, büyük ikili blobları idare etmede iyi olmasıdır.
Calyth

2
@Justin: "Sadece temel özellikleri kullanacağız" nedenine dikkat edin. Git ile daha gelişmiş şeyleri kullanmaya başlayacaksınız. Neden olmasın? Bisect hemen akla geliyor. Rebase ve cherry-pick yapın.
Carl

3
Aslında, "Bunu sohbete taşımak istemediğinizden emin misiniz" sorusu gelir gelmez sona eren yorumlarda alakalı bir konuşma yapmamız, birisinin sonunda bu sorunun aslında SO için uygun olmadığını fark etmesine neden oldu. Esasen neden bir sistemin diğerinden "daha iyi" olduğunu soruyor ve onunla birlikte pek çok ateşli tartışmaya davet ediyor.
Adam Parkin

15

Bence / post değiştirme sırasında insanları mutlu tutmak açısından, erken geçilmesi gereken şeylerden biri, yerel bir şubenin Git'te ne kadar özel olabileceği ve onlara hata yapmaları için ne kadar özgürlük tanıyacağıdır. Hepsini mevcut koddan birkaç özel dalı klonlayın ve ardından deneyler yaparak oraya gidin. Bazı dosyaları yeniden adlandırın, öğeleri teslim edin, başka bir daldan gelen şeyleri birleştirin, geçmişi geri sarın, bir değişiklik kümesini diğerinin üzerine yeniden sıralayın, vb. Yerel olarak en kötü kazalarının bile meslektaşları için hiçbir sonucu olmadığını gösterin. İstediğiniz şey, geliştiricilerin kendilerini güvende hissettikleri, böylece daha hızlı öğrenebilecekleri (Git'in önemli olan dik bir öğrenme eğrisine sahip olduğu için) ve sonunda geliştiriciler olarak daha etkili olmaları için bir durumdur.

Merkezi bir araç öğrenmeye çalışırken, belli ki, depodaki diğer kullanıcılar için sorunlara neden olan bazı saçmalıklar yapmaktan endişeleneceksiniz. Utanma korkusu tek başına insanları denemekten caydırmak için yeterlidir. Özel bir "eğitim" havuzuna sahip olmak bile yardımcı olmuyor çünkü geliştiriciler, üretim sisteminde eğitim sırasında hiç görmedikleri bir durumla kaçınılmaz olarak karşılaşacaklar ve bu yüzden endişelenmeye geri dönecekler.

Ancak Git'in dağınık yapısı bunu ortadan kaldırır. Yerel bir şubede herhangi bir deneyi deneyebilirsiniz ve çok yanlış giderse, sadece dalı bir kenara atın ve kimsenin bilmesine gerek yok. Herhangi bir şeyin yerel bir dalını oluşturabildiğiniz için, gerçek canlı depoda gördüğünüz bir sorunu kopyalayabilirsiniz, ancak "yapıyı bozma" veya başka bir şekilde kendinizi aptal yerine koyma tehlikesi yoktur. Kesinlikle her şeyi kontrol edebilirsiniz, yaptığınız anda, işleri küçük paketlere ayırmaya çalışmak yok. Yani sadece bugün dört saat harcadığınız iki büyük kod değişikliği değil, aynı zamanda yarı yolda hatırladığınız o yapı düzeltmesi ve bir iş arkadaşınıza bir şeyi açıklarken bulduğunuz dokümantasyondaki yazım hatası vb. Ve proje yön değiştirdiği için büyük değişiklikler terk edilirse,


Merkezi bir sistemin özel şubesine de sahip olmamanız için hiçbir neden yok. DVCS'ler bazen birleştirmede daha iyi sonuç verir, ancak özel şube uzak depoda mevcut olmadığı için, yalnızca sizin için uzak depoda bulunan bir şube oluşturamayacağınız anlamına gelmez.
Billy ONeal

2
Bu yorum teknik olarak doğrudur, ancak bu, asıl noktayı kaçırıyor. Revizyon kontrol sistemleri sosyal bir araçtır. Sosyal olarak paylaşılan sunucuda üzerinde adınızın bulunduğu şube "özel" değildir ve paylaşılır. Evet, ACL'ler ve her ne varsa bile. Teknik farklılıklar da var (tabii ki git özel şubem ben eve giderken kullanılıyor, İnternet yok / güvenilmez) ama bunlar sosyal farkın yardımcıları.
tialaramex

2
Performanslı özel bir şube, berbat. Git'te şubeler yaratma ve arasında geçiş yapma kolaylığı performans ile karşılaştırılamaz. Zaten ne kadar özel bir perforce "özel" şubesi. Yerel tutmuyorsunuz. Tamamen ağ erişimine bağımlısınız.
Erik Engheim

9

Beni kişisel olarak satan emir ikiye böldü . Bu özelliğin şu an için başka bir sürüm kontrol sisteminde mevcut olduğunu düşünmüyorum.

Bununla birlikte, insanlar kaynak kontrolü için bir GUI istemcisine alışkınlarsa, git'ten etkilenmeyeceklerdir. Şu anda tam özellikli tek istemci komut satırıdır.


1
Adalet için (Hg üzerinden git'i seçtim), Mercurial'in de ikiye bölme kabiliyetine sahip olduğuna dikkat edilmelidir - açıkça yüklemeniz gereken bir eklenti olarak gönderilse de.
Aristotle Pagaltzis

2
darcs git öncesinden beri "trackdown" a sahiptir. Kuşkusuz ilk versiyonlar oldukça kabaydı.
wnoise

2
UI ile ilgili - OSX'te GitX mükemmel.
Antony Stubbs

4
SourceTree ayrıca güzel bir yerel osx istemcisidir. Edinildikten sonra serbest kaldı. Bir süredir kullanıyorum ve hoşuma gidiyor. SourceTree'yi kullanmadan önce çoğunlukla komutanlık görevindeydim.
Prakash Nadar

1
Git deneyimime göre, onu etkili bir şekilde kullanmak için gerçekten hem komut satırına hem de grafik istemciye ihtiyacınız var. Komut satırına ihtiyacınız var çünkü bir GUI'ye yerleştirilmesi kolay olmayan çok fazla güç var ve GUI'ye (veya en azından git log --graph) ihtiyacınız var çünkü Git revizyon geçmişleri doğrusal olmama ve resim olmadan görselleştirilmesi zor olma eğilimindedir. GitX ve SourceTree'yi GUI'ler olarak kullanıyorum, ancak gitk (şimdi Git ile birlikte geliyor) bir tutam içinde geçirilebilir.
Marnen Laibow-Koser

9

Kişiler hangi Perforce özelliklerini kullanıyor?

  • Tek bir makinede birden çok çalışma alanı
  • Numaralı değişiklik listeleri
  • Geliştirici dalları
  • IDE ile entegrasyon (Visual Studio, Eclipse, SlickEdit, ...)
  • Birçok yapı varyantı
  • Bileşik çalışma alanları
  • Bazı düzeltmeleri entegre ederken diğerlerini değil
  • vb

Soruyorum çünkü eğer herkes komut satırından alıp koyuyorsa, git bunu kapsıyor ve diğer tüm RTS de öyle.


2
"Tek makinede birden çok çalışma alanı" nın ne anlama geldiğinden emin değilim - diğer VCS'ler sadece bir çalışma alanı konseptine sahip değiller, bu yüzden gerçekten de Perforce için bir özellik olarak lanse edilemez. Diğerleri mantıklı geliyor.
Billy ONeal

Çoklu çalışma alanı örneği: İstemci A, yalnızca A dosyalarının geliştirme ve yayın sürümlerine ve 1.52 sürümünde dahili araçların bir alt kümesine sahiptir; İstemci B'de yalnızca geliştirme ve yayınlama B dosyalarının yanı sıra hem geliştirici hem de sürüm 1.52 olmak üzere farklı ancak birbiriyle çakışan dahili araçlar alt kümesi bulunur. Geliştirici her ikisi üzerinde aynı anda çalışıyor ve hangi arızaların olduğunu görmek için değiştirilen dahili araçları A'ya görünür kılmayı seçebilir.
Thomas L Holaday

6
@Tomas: Neden ... Sadece iki kez kontrol ettirmiyorsun? Perforce'un bir "özellik" olarak sahip olması gerekir, çünkü aksi halde ortam değişkenlerinin doğru ayarlandığından, kayıt defteri girişlerinin doğru olduğundan vb. Emin olmak zorunda olduğu için garipleşir.
Arafangion

@Arafangion, iki kez kontrol etmenin dosyaların kümeler oluşturmak için seçmeli olarak gösterilmesini nasıl kolaylaştırdığı açık değil.
Thomas L Holaday

6

Görünüşe göre GitHub artık şirketlere git eğitim kursları sunuyor . Blog gönderilerini bununla ilgili olarak aktarın :

Geçtiğimiz haftalarda birkaç kez Google kampüsüne gittim, Git'te Android'lerin eğitilmesine yardımcı oldum. Shawn Pearce benden (onu Git ve EGit / JGit ihtişamından tanıyor olabilirsiniz - Junio ​​şehir dışındayken bakımı devralan kahramandır), Andriod üzerinde çalışan Google mühendislerini geçiş sürecinde eğitmesine yardım etmesini istedi. Perforce'dan Git'e , böylece Android kitlelerle paylaşılabilir. Bunu yapmaktan çok mutlu olduğumu söyleyebilirim.

[…]

Logical Awesome, artık tüm şirketlere bu tür özel eğitim hizmetini resmi olarak sunuyor . Git'e geçmeyi düşünüyorsanız, kuruluşunuza eğitim ve planlama konusunda yardımcı olabiliriz.

Vurgu benim.


4

Perforce'u uzun süredir kullanıyorum ve son zamanlarda GIT'i de kullanmaya başladım. İşte benim "objektif" görüşüm:

Performans özellikleri:

  1. GUI araçları daha zengin özelliklere sahip gibi görünüyor (ör. Hızlandırılmış görünüm, Revizyon grafiği)
  2. Kafa revizyonuna senkronize edilirken hız (tüm geçmişin aktarılması için ek yük yok)
  3. Eclipse / Visual Studio Entegrasyonu gerçekten güzel
  4. Değişiklik Listesi başına bir dalda birden fazla özellik geliştirebilirsiniz (Bunun GIT'ye göre bir avantaj olup olmadığından hala% 100 emin değilim)
  5. Diğer geliştiricilerin ne yaptığını - ne tür dosyaları kontrol ettiklerini "gözetleyebilirsiniz.

GIT özellikleri:

  1. GIT komut satırının Perforce'tan çok daha basit olduğuna dair izlenimler edindim (init / clone, add, commit. Karmaşık Çalışma Alanlarının konfigürasyonu yok)
  2. Bir satın alma işleminden sonra proje geçmişine erişirken hız (eşitleme sırasında tüm geçmişi kopyalamanın bir maliyeti vardır)
  3. Çevrimdışı mod (geliştiriciler erişilemez P4 sunucusunun onları kodlamasını yasaklayacağından şikayet etmeyecektir)
  4. Yeni bir dal oluşturmak çok daha hızlı
  5. "Ana" GIT sunucusu, çok sayıda TBayt depolamaya ihtiyaç duymaz çünkü her geliştirici kendi yerel sanal alanına sahip olabilir.
  6. GIT Açık Kaynaktır - Lisans ücreti yoktur
  7. Şirketiniz de OpenSource projelerine katkıda bulunuyorsa, yamaları paylaşmak GIT ile çok daha kolay

Genel olarak Açık Kaynaklı / Dağıtılmış projeler için GIT'i her zaman tavsiye ederim çünkü daha çok bir P2P uygulaması gibidir ve herkes geliştirmeye katılabilir. Örneğin, Perforce ile uzaktan geliştirme yaparken 4GB Projeleri 1Mbps üzerinden haftada bir kez senkronize ettiğimi hatırlıyorum. Bu nedenle çok fazla zaman boşa gitti. Ayrıca bunu yapmak için VPN kurmamız gerekiyordu.

Küçük bir şirketiniz varsa ve P4 sunucusu her zaman açık olacaksa Perforce'un da çok iyi bir seçenek olduğunu söyleyebilirim.


Git özelliği # 1, en iyi ihtimalle şüpheli bir iddiadır. Belki Git kurulumda kazanır, ancak günlük kullanım oldukça beceriksizdir (genellikle basit bir görevi gerçekleştirmek için birden fazla komut gerektirir)
Adam Parkin

1
@AdamParkin Komut satırından hangi görevleri beceriksiz buluyorsunuz? (Mümkün olduğunca GUI'leri kullanıyorum, ancak
Git'in

1
@AdamParkin Evet, komut satırını kullanmanın kolaylığı estetik yönden, bu nedenle en azından özneldir. Kişisel olarak Git'in Komut satırını Perforce'unkinden daha basit bulmamın nedeni, Perforce'da depo dosyalarıyla çalışmaya başlamadan önce çalışma alanları ve ortam değişkenleri (P4USER vb.) Kurmanız gerektiğidir, tek bir "git clone" ile karşılaştırıldığında komut. Elbette Perforce'da bulunmayan bazı gelişmiş git Komutları vardır (örn. Yerel tarihi yeniden yazmak) ve bunlar, düzenli Perforce kullanıcıları için "roket bilimi" gibi görünebilir.
user389238

Ben kullanmadım ama bana öyle geliyor ki, değişim setlerini yönetmek sadece fakir bir adam dalı, çünkü gittiğinizde özellik şubelerinizi ezebilir veya ustaya yeniden yükleyebilirsiniz.
Ryan The Leach

4

Bir süredir Git kullanıyorduk, yakın zamanda Git sunucumuzun sabit diski çöktü ve son durumuna geri dönemedik. Birkaç günlük duruma geri dönmeyi başardık. Sunucu yedeklendiğinde. Takımdaki herkes değişikliklerini çekti / itti ve işte, sunucu mevcut durumuna geri döndü.


3
Linus, @ Google'a Git hakkında verdiği bir konuşmada, herkesin Linux çekirdeğinin klonunun tam bir yedeği olduğu için nasıl yedekleme yapmadığından bahsediyor. Aslında gerçekten iyi bir nokta.
Adam Parkin

Bu her anlamda doğrudur, her kapanış bir "yedek" tir, ancak git birçok durumda hala "merkezi dağıtılmış" bir araç olarak kullanılmaktadır. yani, dallanma avantajları eklenmiş SVN gibi. Organizasyon her zaman sahip oldukları her şeyin yedeklenmesini ister.
Prakash Nadar

3

Perforce ve git (ve en çok bahsedilen) arasındaki önemli bir fark, büyük ikili dosyaların ilgili işlemeleridir.

Örneğin, bir video oyunu geliştirme şirketindeki bir çalışanın blogunda olduğu gibi: http://corearchitecture.blogspot.com/2011/09/git-vs-perforce-from-game-development.html

Bununla birlikte, önemli olan, git ve perforce arasındaki hız farkının, dokümantasyondan şimdiye kadar inşa edilmiş her ikiliye kadar her şeyi içeren devasa bir 6gb deponuz olduğunda (ve son olarak, oh evet! Gerçek kaynak geçmişi) genellikle büyük şirketlerin Perforce çalıştırma eğiliminde oldukları ve bu nedenle tüm önemli işlemleri bodrumdaki devasa sunucu bankasına aktarmak için kurdular.

Perforce'un bu önemli avantajı, yalnızca Perforce ile hiçbir ilgisi olmayan bir faktörden, onu işleten şirketin söz konusu sunucu bankasını karşılayabileceği gerçeğinden kaynaklanıyor.

Ve sonuçta, Perforce ve git farklı ürünlerdir. Git, yalnızca bir VCS olacak şekilde tasarlandı ve bunu Perforce'den çok daha iyi yapıyor (daha fazla özelliğe sahip olması ve özellikle başka birinin sözleriyle kullanımı daha kolay olması, Perforce'da dallanma, açık kalp ameliyat, sadece uzmanlar tarafından yapılmalıdır: P) ( http://stevehanov.ca/blog/index.php?id=50 )

Perforce kazancını kullanan şirketlerin diğer avantajları, yalnızca Perforce yalnızca bir VCS olmadığından, aynı zamanda bir dosya sunucusundan ve derlemelerin performansını test etmek için bir dizi başka özelliğe sahip olduğu için geldi.

Son olarak: Git açık kaynak kodlu ve önyüklemesi çok daha esnek olduğundan, önemli işlemleri merkezi bir sunucuya yükleyerek pahalı donanım yığınlarını çalıştırmak için git'e yama uygulamak o kadar zor olmaz.


3

Sanırım GIT'in kazandığını bildiğim tek şey, tüm dosyalarda "satır sonlarını koruma" yeteneği, perforce ise bunları Unix, Dos / Windows veya MacOS9 formatına ("\ n", "\ r \ n "veya" \ r).

Windows ortamında veya karma bir işletim sistemi ortamında Unix betikleri yazıyorsanız, bu gerçek bir acıdır. Kuralın dosya başına uzantı temelinde belirlenmesi bile mümkün değildir. Örneğin, .sh, .bash, .unix dosyalarını Unix formatına ve .ccp, .bat veya .com dosyalarını Dos / Windows formatına dönüştürür.

GIT'de (bunun varsayılan mı, bir seçenek mi yoksa tek seçenek mi olduğundan emin değilim) "satır sonlarını koruyacak" şekilde ayarlayabilirsiniz. Bu, bir dosyanın satır sonlarını manuel olarak değiştirebileceğiniz anlamına gelir ve ardından GIT bu formatı olduğu gibi bırakır. Bu bana bir şeyler yapmanın ideal yolu gibi görünüyor ve bunun neden Perforce ile bir seçenek olmadığını anlamıyorum.

Bu davranışı elde etmenin tek yolu, dosyaları ikili olarak işaretlemektir. Gördüğüm kadarıyla, bu eksik bir özelliği geçici olarak çözmek için çirkin bir hack olurdu. Tüm komut dosyalarında, vb. Yapmak zorunda kalmanın sıkıcı olmasının yanı sıra, muhtemelen çoğu fark, vb. De kırılacaktır.

Şu anda kararlaştırdığımız "çözüm", Unix ortamlarına her konuşlandırıldıklarında betiklerden tüm şaryo dönüşlerini kaldırmak için bir sed komutu çalıştırmaktır. Bu da ideal değil, özellikle bazıları WAR dosyalarının içinde konuşlandırıldığından ve sed hattının paket açıldığında yeniden çalıştırılması gerektiğinden.

Bu sadece GIT'e büyük bir avantaj sağladığını düşündüğüm ve yukarıda bahsedildiğini düşünmediğim bir şey.

DÜZENLEME: Perforce'u biraz daha uzun süre kullandıktan sonra, birkaç yorum daha eklemek istiyorum:

A) Perforce'da gerçekten özlediğim bir şey, değiştirilen, kaldırılan ve eklenen dosyalar dahil olmak üzere açık ve örnek bir farktır. Bu git diffkomutla GIT'de kullanılabilir , ancak Perforce'da dosyaların değişiklikleri kaydedilmeden önce teslim alınması gerekir ve ana düzenleyicileriniz (Eclipse gibi) dosyaları düzenlediğinizde otomatik olarak teslim alacak şekilde ayarlamış olabilirsiniz. bazen dosyaları başka şekillerde düzenleyebilir (not defteri, unix komutları vb.). Ve oldukça can sıkıcı olabilen Eclipse ve p4eclipse kullanıldığında bile yeni dosyalar otomatik olarak eklenmiyor gibi görünüyor. Bu nedenle, tüm değişiklikleri bulmak için, tüm çalışma alanında bir "Farklılık ..." çalıştırmanız gerekir; bu, öncelikle çalışması biraz zaman alır ve ikinci olarak, çok karmaşık dışlama listeleri oluşturmadığınız sürece her tür alakasız şeyi içerir. bu beni bir sonraki noktaya götürüyor

B) GIT'de .gitignore dosyasını çok basit ve yönetmesi, okuması ve anlaması kolay buluyorum. Bununla birlikte, çalışma alanı Perforce'da yapılandırılabilen listeleri görmezden gelir / dışlar, hantal ve gereksiz şekilde karmaşık görünür. Joker karakterler çalışırken herhangi bir istisna elde edemedim. Gibi bir şey yapmak isterim

-//Server/mainline/.../target/...   //Svend_Hansen_Server/.../target/...

Sunucu / ana hat içindeki tüm projelerdeki tüm hedef klasörleri dışlamak için. Ancak, bu beklediğim gibi çalışmıyor ve her proje için şöyle bir satır ekledim:

-//Server/mainline/projectA/target/...  //Svend_Hansen_Server/projectA/target/...
-//Server/mainline/projectB/target/...  //Svend_Hansen_Server/projectB/target/...
...

Ve bin klasörleri, .classpath ve .projet dosyaları ve daha fazlası için benzer satırlar.

C) Perforce'da oldukça kullanışlı değişiklik listeleri var. Ancak, bir grup değişiklik yaptığımı, hepsini kontrol ettiğimi ve bir değişiklik listesine koyduğumu, ardından bu değişiklik listesini göndermeden önce başka bir şey üzerinde çalıştığımı varsayalım. Daha sonra ilk değişiklik listesinde yer alan dosyalardan birinde bir değişiklik yaparsam, o dosya yine de bu değişiklik listesinde olacaktır ve değişiklik listesini yalnızca ilk olarak eklediğim değişiklikleri içerdiğini varsayarak gönderemem ( aynı dosyalar olacaktır). GIT'de, bir dosya eklerseniz ve bunlar üzerinde başka değişiklikler yaparsa, bu değişiklikler eklenmez (ve yine de birgit diffve önce yeni değişiklikleri de eklemeden dosyayı teslim edemezsiniz. Elbette bu, değişiklik listesinin yalnızca bir dizi eklenmiş dosyaya sahip olduğunuzda olabileceği gibi yararlı değildir, ancak GIT'de değişiklikleri gerçekleştirebilirsiniz, çünkü bu aslında onları zorlamaz. Onları zorlamadan önce diğer değişiklikler üzerinde çalışabilirdiniz, ancak daha sonra eklediğiniz başka hiçbir şeyi eski değişiklikleri de zorlamadan zorlayamazsınız.


2

Git ile hiç deneyimim yok, ancak aynı zamanda dağıtılmış bir VCS olan Mercurial ile de sahibim. Bu gerçekten projeye bağlıdır, ancak bizim durumumuzda dağıtılmış bir VCS, temelde sık sık bozulan yapıları ortadan kaldırdığı için projeye uygundur.

Bazıları bir istemci-sunucu VCS'ye daha uygun olduğu ve diğerleri dağıtılmış bir VCS'ye sahip olduğu için gerçekten projeye bağlı olduğunu düşünüyorum.


(Verilmiş, bu eski bir cevap, ama ...) Git'i (ve ayrıca Mercurial'ı) sanki bir istemci-sunucu VCS'siymiş gibi çalıştırabilirsiniz. Bu hala dallanma ve birleştirme ve özel kaydedilmesini olasılığı kolaylığı nedeniyle istemci-sunucu VCSS, daha iyi çalışır. İstemci-sunucu VCS'leri için artık fazla bir kullanım görmüyorum, en azından birleştirme becerilerini eşit seviyeye getirene kadar.
Marnen Laibow-Koser

-5

İşte git hakkında sevmediğim şeyler:

Öncelikle, dağıtılan fikrin gerçekliğe aykırı olduğunu düşünüyorum. Aslında git kullanan herkes, Linus Torvalds bile bunu merkezi bir şekilde yapıyor. Çekirdek dağıtılmış bir şekilde yönetildiyse, bu aslında "resmi" çekirdek kaynaklarını indiremeyeceğim anlamına gelirdi - bir tane olmazdı - Linus'un sürümünü mü yoksa Joe'nun sürümünü mü istediğime karar vermem gerekirdi. veya Bill'in versiyonu. Bu açıkça saçma olurdu ve bu yüzden Linus'un merkezi bir iş akışı kullanarak kontrol ettiği resmi bir tanım var.

Malzemelerinizin merkezi bir tanımını istediğinizi kabul ederseniz, sunucu ve istemci rollerinin tamamen farklı olduğu anlaşılır, bu nedenle istemci ve sunucu yazılımlarının aynı olması gerektiği dogması tamamen sınırlayıcı hale gelir. İstemci ve sunucu verilerinin aynı olması gerektiği dogması , özellikle kimsenin umursamadığı ancak herkesin klonlamak zorunda kalacağı on beş yıllık bir kod tabanında açıkça saçma hale geliyor.

Tüm bu eski şeylerle aslında yapmak istediğimiz şey, onu bir dolaba tıkmak ve orada olduğunu unutmaktır, tıpkı normal VCS'nin yaptığı gibi. Git'in her şeyi ağ üzerinden her gün ileri geri taşıması çok tehlikelidir, çünkü onu budamak için sizi rahatsız eder. Bu budama, birçok sıkıcı karar gerektirir ve ters gidebilir. Yani insanlar muhtemelen tarihin çeşitli noktalarından bir dizi anlık görüntü deposu tutacaklar, ancak ilk başta kaynak kontrolü bunun için miydi? Bu sorun, birisi dağıtılmış modeli icat edene kadar mevcut değildi.

Git, insanları tarihi yeniden yazmaya aktif olarak teşvik ediyor ve yukarıdakiler muhtemelen bunun bir nedenidir. Her normal VCS, geçmişi yeniden yazmayı yöneticiler dışında herkes için imkansız hale getirir ve yöneticilerin bunu düşünmek için hiçbir nedeni olmadığından emin olur. Yanılıyorsam düzelt ama bildiğim kadarıyla git normal kullanıcılara yazma erişimi vermenin hiçbir yolunu sağlamıyor, ancak geçmişi yeniden yazmalarını yasaklıyor. Bu, kin besleyen (veya hala öğrenme eğrisiyle mücadele eden) herhangi bir geliştiricinin tüm kod tabanını çöpe atabileceği anlamına gelir. Bunu nasıl sıkılaştırırız? Peki, ya tüm geçmişin düzenli yedeklerini yaparsınız, yani geçmişin karesini alırsınız ya da tüm farkları e-posta ile alıp elle birleştirecek bazı zavallı çocuklar dışında hepsine yazma erişimini yasaklarsınız.

İyi finanse edilen büyük bir proje örneğini ele alalım ve git'in onlar için nasıl çalıştığını görelim: Android. Bir keresinde android sisteminin kendisiyle oynamaya karar verdim. Gitlerine ulaşmak için repo adlı bir dizi komut dosyası kullanmam gerektiğini öğrendim. Depoların bir kısmı istemcide ve bazıları sunucuda çalışır, ancak her ikisi de, varlıkları gereği git'in her iki kapasitede de eksik olduğunu göstermektedir. Bir hafta kadar kaynakları alamadım ve sonra tamamen pes ettim. Birkaç farklı depodan gerçekten büyük miktarda veri çekmem gerekirdi, ancak sunucu benim gibi insanlarla tamamen aşırı yüklenmişti. Repo zaman aşımına uğradı ve zaman aşımına uğradığı yerden devam edemedi. Git bu kadar dağıtılabilirse, onların o tek sunucudaki yükü hafifletmek için bir tür eşler arası şey yaptım. Git dağıtılabilir, ancak bir sunucu değil. Git + repo bir sunucudur, ancak repo dağıtılamaz çünkü bu sadece geçici bir hack koleksiyonu.

Git'in yetersizliğinin benzer bir örneği gitolittir (ve görünüşe göre pek iyi çalışmayan atası). Gitolite işini git sunucusunun dağıtımını kolaylaştırmak olarak tanımlıyor. Yine, bu şeyin varlığı, git'in bir istemci olduğu kadar bir sunucu olmadığını da kanıtlıyor. Dahası, asla olmayacak, çünkü eğer ikisinden biri haline gelirse, kurucu ilkelerine ihanet etmiş olur.

Dağıtılmış şeye inanmış olsanız bile, git yine de bir karmaşa olurdu. Mesela şube nedir? Bir depoyu her klonladığınızda örtük olarak bir dal oluşturduğunuzu söylerler, ancak bu tek bir depodaki bir dal ile aynı şey olamaz. Yani dallar olarak adlandırılan en az iki farklı şey var. Ancak daha sonra bir depoda geri sarabilir ve düzenlemeye başlayabilirsiniz. Bu ikinci tür dal gibi mi, yoksa yine farklı bir şey mi? Belki de ne tür bir repoya sahip olduğunuza bağlıdır - oh evet - görünüşe göre repo da çok net bir kavram değil. Normal ve çıplak olanlar var. Normal bir parçayı zorlayamazsınız çünkü çıplak kısım kaynak ağacıyla senkronize olmayabilir. Ama bunu düşünmedikleri için çıplak bir tanesine aktaramazsınız. Bu yüzden normal bir tane cvsimport yapmalısınız, bunu, geliştiricilerin vurduğu çıplak bir dosyaya kopyalayın ve bunu, hala cvs'de kontrol edilmesi gereken bir cvs çalışan kopyasına aktarın. Kimler rahatsız olabilir? Tüm bu komplikasyonlar nereden geldi? Dağıtılmış fikrin kendisinden. Sonunda gitolitten kurtuldum çünkü bana bu kısıtlamalardan daha fazlasını dayatıyordu.

Git, dallanmanın hafif olması gerektiğini söylüyor, ancak birçok şirketin halihazırda ciddi bir sahtekar şube sorunu var, bu nedenle dallara ayırmanın katı polislik ile önemli bir karar olması gerektiğini düşünmüştüm. Performansın gerçekten parladığı yer burası ...

Perforce olarak nadiren dallara ihtiyaç duyarsınız çünkü değişiklik setlerini çok çevik bir şekilde halledebilirsiniz. Örneğin, olağan iş akışı, ana hat üzerinde bilinen en son iyi sürümle senkronize etmeniz ve ardından özelliğinizi yazmanızdır. Bir dosyayı değiştirmeye çalıştığınızda, o dosyanın farkı "varsayılan değişiklik kümenize" eklenir. Değişiklik kümesini kontrol etmeye çalıştığınızda, otomatik olarak ana hattaki haberleri değişiklik kümenizle birleştirmeye çalışır (etkili bir şekilde yeniden oluşturur) ve sonra taahhüt eder. Bu iş akışı, anlamanıza bile gerek kalmadan uygulanır. Böylece Mainline, daha sonra kolayca seçebileceğiniz bir değişiklik geçmişi toplar. Örneğin, eskisini, örneğin öncekinden öncekini geri döndürmek istediğinizi varsayalım. Sorun teşkil eden değişiklikten önceki ana senkronize edersiniz, etkilenen dosyaları değişiklik kümesinin bir parçası olarak işaretlersiniz, sonraki ana senkronize edin ve "her zaman benim" ile birleştirin. (Orada çok ilginç bir şey vardı: senkronizasyon aynı şeye sahip olmak anlamına gelmez - eğer bir dosya düzenlenebilirse (yani aktif bir değişiklik kümesindeyse), senkronizasyon tarafından engellenmez, ancak çözülme tarihi olarak işaretlenir.) suçlu olanı geri alan bir değişiklik listesi. Sonraki haberlerde birleşin ve istediğiniz etkiyi elde etmek için ana hattın tepesine yerleştirebileceğiniz bir değişiklik listeniz var. Hiçbir noktada tarihi yeniden yazmadık. Sonraki haberlerde birleşin ve istediğiniz etkiyi elde etmek için ana hattın tepesine yerleştirebileceğiniz bir değişiklik listeniz var. Hiçbir noktada tarihi yeniden yazmadık. Sonraki haberlerde birleşin ve istediğiniz etkiyi elde etmek için ana hattın tepesine yerleştirebileceğiniz bir değişiklik listeniz var. Hiçbir noktada tarihi yeniden yazmadık.

Şimdi, bu sürecin yarısını varsayarsak, birisi size koşar ve her şeyi bırakıp bazı hataları düzeltmenizi söyler. Varsayılan değişiklik listenize bir ad verin (aslında bir sayı), sonra onu "askıya alın", şimdi boş olan varsayılan değişiklik listesindeki hatayı düzeltin, uygulayın ve adlandırılmış değişiklik listesini devam ettirin. Farklı şeyler denediğiniz bir anda birkaç değişiklik listesinin askıya alınması tipik bir durumdur. Kolay ve özeldir. Şube rejiminden gerçekten istediğinizi, erteleme ya da ana hatta birleşmekten vazgeçme cazibesi olmadan elde edersiniz.

Sanırım git'te benzer bir şey yapmak teorik olarak mümkün olabilir, ancak git, onayladığımız bir iş akışını öne sürmek yerine pratik olarak her şeyi mümkün kılıyor. Merkezi model, geçersiz bir genelleme olan dağıtılmış modele göre bir dizi geçerli basitleştirmedir. O kadar genelleştirilmiş ki, temelde sizden repo gibi, bunun üzerine kaynak kontrolü uygulamanızı bekliyor.

Diğer şey ise çoğaltma. Git'te her şey mümkündür, bu yüzden kendiniz çözmelisiniz. Perforce olarak, etkin bir durum bilgisiz önbellek elde edersiniz. Bilmesi gereken tek yapılandırma, ana birimin nerede olduğudur ve istemciler kendi takdirlerine göre ana veya önbelleği işaret edebilir. Bu beş dakikalık bir iş ve yanlış gidemez.

Ayrıca kod incelemelerini, bugzilla referanslarını vb. İleri sürmek için tetikleyiciler ve özelleştirilebilir formlarınız var ve elbette gerçekten ihtiyaç duyduğunuz zamanlar için şubeleriniz var. Anlaşılır değil, ancak yakın ve kurulumu ve bakımı son derece kolay.

Sonuç olarak, herkesin yaptığı gibi merkezi bir şekilde çalışacağınızı biliyorsanız, bunun için tasarlanmış bir araç da kullanabilirsiniz. Git, Linus'un korkunç zekasıyla birlikte insanların koyun gibi birbirlerini takip etme eğilimi nedeniyle abartılıyor, ancak asıl varoluş nedeni aslında sağduyuya dayanmıyor ve onu takip ederek git, kendi elleriyle (a) yazılım ve (b) verilerin hem istemcide hem de sunucuda aynı olması gerektiğine dair iki büyük dogma ve bu her zaman merkezi işte karmaşık ve sakat hale getirecek.


4
Oh, neyse. Birkaç dakikam var, bu yüzden bazı büyük hatalar hakkında yorum yapmaya çalışacağım. "Çekirdek dağıtılmış bir şekilde yönetilseydi, bu aslında" resmi "çekirdek kaynaklarını indiremeyeceğim anlamına gelirdi - bir tane olmazdı - Linus'un sürümünü mü yoksa Joe'nun sürümünü mü istediğime karar vermem gerekirdi. veya Bill'in sürümü. "- Üzerinde hiç çalışmadığım için özellikle Linux çekirdek projesiyle konuşamıyorum, ancak genel olarak, aslında açık kaynaklı yazılımın çalışma şekli budur. İstediğiniz herhangi bir çatalı indirebilirsiniz.
Marnen Laibow-Koser

2
"Tüm bu eski şeylerle aslında yapmak istediğimiz şey, onu bir dolaba tıkmak ve orada olduğunu unutmaktır, tıpkı normal VCS'nin yaptığı gibi. Git'in her şeyi ağ üzerinden her gün ileri geri taşıması çok tehlikelidir. çünkü onu budamak sizi rahatsız ediyor. " • Hiç gerçekten Git'i kullandınız mı? Git, deponuzu budamak için sizi dürtmez. Ayrıca Git'in veri sıkıştırması son derece verimlidir; Karmaşık dal geçmişine sahip bir Git deposunun aynı kod tabanının SVN çalışan bir kopyasından (geçmiş olmadan) önemli ölçüde daha küçük olması alışılmadık bir durum değildir.
Marnen Laibow-Koser

4
"Her normal VCS, yöneticiler dışında herkes için geçmişi yeniden yazmayı imkansız hale getirir ve yöneticilerin bunu dikkate almaları için hiçbir neden kalmamasını sağlar. Yanılıyorsam beni düzeltin, ancak bildiğim kadarıyla git, normal kullanıcılara yazma izni vermenin bir yolu yok erişebilir ancak geçmişi yeniden yazmalarını yasaklayabilirsiniz. Bu, kin besleyen (veya hala öğrenme eğrisiyle mücadele eden) geliştiricilerin tüm kod tabanını çöpe atabileceği anlamına gelir. " •% 100 yanılıyorsunuz. Yazma erişimine izin verirken depoya zorla itmeye izin vermemek kolaydır. Ayrıca, herkes istediği kadar reponun bir kopyasına sahip olabilir, böylece çöp atmak işe yaramaz.
Marnen Laibow-Koser

3
"Git, dallanmanın hafif olması gerektiğini söylüyor, ancak birçok şirketin halihazırda ciddi bir hileli şube sorunu var, bu nedenle dallara ayırmanın katı bir polislik ile önemli bir karar olması gerektiğini düşünmüştüm. Performansın gerçekten parladığı yer burasıdır ..." • "haydut şube sorunu" mu? Dallanmanın neden "önemli bir karar" olması gerektiğini düşünüyorsunuz? Pratikte, her yeni özellik veya deney için dallar (özel veya genel) oluşturabilmek gerçekten yararlıdır, böylece her biri kendi alternatif evreninde yaşar. Örneğin SVN'nin aksine Git, birleştirmeyi kolaylaştırır, böylece bu çok iyi çalışır.
Marnen Laibow-Koser

3
Bu cevabın benimkinin (görünüşe göre @Marnen) dışında yalnızca bir olumsuz oyu olması, bu cevabın ne kadar nesnel olarak yanlış olduğu göz önüne alındığında beni şaşırtıyor.
alternatif

-8

Hatalı kod satırı yönetiminin yerine GIT kullanılması yaygındır. Perforce'un dezavantajlarının çoğu, kötü dallanma stratejilerinin bir sonucudur. Diğer merkezi araçlar için de aynı. Bir ton dal oluşturmanız gerekiyorsa, yanlış bir şeyler yapıyorsunuz demektir. Geliştiricilerin neden bu kadar çok dal oluşturması gerekiyor?

Ayrıca, bağlantısız çalışmak neden bu kadar önemli? Birinin trende çalışabilmesi için mi? Bugünlerde kablosuz bağlantı kuramayacağınız tek yer burası. Ve çoğu trende bile yeterli WiFi var.


9
Bazı geliştiriciler farklı geliştirmeleri, prototipleri, hata düzeltmelerini vb. Kolayca ayırabilmek ve bölümlere ayırabilmek için dallar oluşturmayı severler. Genellikle işin türüne bağlıdır. Perforce dalları, Git ve Mercurial şubelerine kıyasla yönetmek için oldukça ağırdır ve bu nedenle, yapılacak bazı gerçek verimlilik iyileştirmeleri olabilir.
Greg Whitfield

8
Bağlantısız çalışma yeteneği, her zaman bir trende veya uçakta çalışma fikri ile ilgili değildir. Bazı şirketlerin güvenilir ağ altyapısı olmayabilir. Ya da kesintiler, sunucu bakımı, genel kesintiler vb. İle karşılaşabilirsiniz. Ancak bağlantısız çalışabilmenin yan etkisi, herhangi bir şey yapmak için bir ağ gidiş-dönüş yolculuğuna dayanan sistemlere kıyasla kaynak kontrol işlemlerinizin göz kamaştırıcı derecede hızlı olmasıdır.
Greg Whitfield

6
Deneyimlerime göre, insanları kontrol etmek için süreci kullanmak, her şeyden önce kötü bir iş akışı tasarımının göstergesidir. İnsanları üretken tutmak için bir iş akışı mevcut olmalıdır. Eğer kullanılmıyorsa, bunda yanlış bir şey var çünkü genel olarak insanlar aptal değildir ve karşılaşırlarsa daha iyi bir araç kullanırlar.
Carl

6
"Bir ton dal oluşturmanız gerekiyorsa, yanlış bir şeyler yapıyorsunuz." Bu, yetersiz birleştirme araçlarına sahip merkezi bir VCS'de doğru olabilir (SVN veya CVS gibi - hiç kullanılmamış Perforce). Dallanma ve birleştirmenin kolay ve yaygın olduğu Git'te bu doğru değil. Bu, geliştirilmekte olan her özelliğin entegrasyona kadar kendi alternatif evreninde olma özgürlüğünü verir. Şahsen ben bir ortama geri dönmek asla olamazdı bir heves dallanır.
Marnen Laibow-Koser
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.