Bu, sezgisel görünmeye başlayacak ama beni duyun:
Git ile deneme yapmaya başlamak için onları teşvik edin.
Git hakkındaki ilginç şeylerden biri, herhangi bir yerel operasyonu tamamen güvenli hale getirmenin şaşırtıcı derecede kolay olmasıdır. Git'i ilk kullanmaya başladığımda, kendimi yaparken bulduğum şeylerden biri, bir şeyi mahvetmeme ihtimaline karşı tüm dizini yedekleme olarak sıkıştırmaktı . Daha sonra bunun çok büyük bir kirlilik olduğunu ve işinizi korumak için neredeyse hiç gerekli olmadığının farkına vardım, ancak ne haltında olduğunuzu ve ne yaptığını bilmiyor olsanız bile, çok güvenli ve çok basit olma erdemine sahip Denemek istediğiniz komut çıkacaktır. Bunu yaparken kaçınmanız gereken tek şey push
. Hiçbir şeyi zorlamazsanız, istediğiniz herhangi bir şeyi denemek için% 100 güvenli bir yoldur.
Bir şeyler denemekten korkma, gitmeyi öğrenmenin en büyük engellerinden biridir. Size göz korkutucu olan her şey üzerinde çok fazla kontrol sağlıyor . Gerçek şu ki, günlük kullanımınızın çoğu için birkaç güvenli operasyona sadık kalabilirsiniz, ancak bunların hangi komutları araştıracağını bulmak biraz daha zor.
Onlara bir güvenlik hissi vererek , işleri kendi başlarına nasıl yapacaklarını çözmeye çalışmaktan çok daha istekli olacaklar. Ve yerel makinelerinde kendileri için çalışan kişisel bir iş akışı bulma konusunda çok daha fazla güçlenecekler. Herkes aynı şeyi yaparsa yerel , yani yeter ki onlar ne standartlarına uymak gibi gayet itin . Onları böyle hissetmelerini sağlamak için bir işlem yapmadan önce tüm repoyu sıkıştırmayı alırsa, sorun değil; bir şeyler yaptıkça ve bir şeyler denedikçe daha iyi şeyler yapabilecekler. Bir şeyleri denemeye ve ne yaptığını görmeye başlaman için.
Bu, eğitimin değersiz olduğu anlamına gelmez. Aksine, eğitim size özellikleri, kalıpları ve normları tanıtmada yardımcı olabilir. Ancak , günlük işinizde oturup oturup bir şeyler yapmak yerine geçmez . Ne git ne de SVN sadece bir sınıfa girebileceğiniz şeylerdir ve o zamanlar hakkında her şeyi bilirsiniz. Onları tanımak için problemlerinizi çözmek için kullanmanız ve hangi özelliklerin hangi problemlere daha iyi uyması gerektiği.
Git ve gitmeyi öğrenmek için cesaretini kırmayı bırak.
Hiçbir şeyi zorlamamaktan bahsettim, bu aslında onlara öğrettiğiniz şeylerden birine karşı geliyor: her zaman "Taahhüt & İttir" e. Onlara bunu yapmalarını söylemeyi bırakıp tam tersini yapmalarını söylemelisiniz. Git temelde değişikliklerinizin yapılabileceği 5 "yere" sahiptir:
- Diskte, kaydedilmemiş
- Aşamalı ancak taahhüt edilmedi
- Bir de yerel işlemek
- Yerel bir depoda
- Uzaktan depolar (Yalnızca taahhütler ve etiketler hiç farklı havuzlar arasında itilir ve çekilir)
Her şeyi tek bir adımda çekip itmeye teşvik etmek yerine, bu 5 farklı yerden yararlanmaya teşvik edin. Onları cesaretlendirin:
Bu, çalışmalarını herkese açık hale getirmeden önce çalışmalarını kontrol etmelerini teşvik eder , bu da hatalarını daha erken yakalayabilecekleri anlamına gelir. Taahhütlerini görecekler ve “Bekle, istediğim şey bu değil” diye düşünecekler ve SVN'den farklı olarak, itmeden önce geri dönüp tekrar deneyebilirler.
Değişikliklerinin nerede olduğunu anlama fikrine alıştıktan sonra, adımların ne zaman atlanacağına ve belirli işlemlerin ne zaman birleştirileceğine karar vermeye başlayabilirler (ne zaman çekilmesi gerektiğine, ne zaman çekmek istediğinizi biliyorsunuzdur; .
Bu aslında Git'in SVN üzerindeki muazzam faydalarından biri ve git bu kullanım şekli göz önünde bulundurularak tasarlandı . Buna karşılık SVN, merkezi bir depoya bürünüyor, bu nedenle git için kullanılan takımın aynı iş akışı için optimize edilmiş olması şaşırtıcı değil. SVN'de, taahhüdünüz yanlışsa, tek gerçek başvurunuz yanlışlığı gidermek için yeni bir taahhüttür.
Bunu yapmak aslında doğal olarak bir sonraki stratejiye yol açacaktır:
Yerel şubeleri kullanmalarını teşvik edin
Yerel şubeler aslında paylaşılan dosyalar üzerinde çalışmanın acı noktalarını çok kolaylaştırıyor. İstediğim tüm değişiklikleri kendi şubemde yapabilirim ve onları zorlamadığımdan hiç kimseyi etkilemeyecek. Sonra zaman geldiğinde, aynı birleştirme ve yeniden pazarlama stratejilerinin hepsini kullanabilirim, ancak daha kolay:
- Yerel şubemi yeniden değerlendirebilirim, bu da onu ustaca önemsiz hale getirdi.
- Yerel şubemin değişikliklerini buna dahil etmek için ustada düz bir birleştirme (yeni bir taahhüt oluşturma) kullanabilirim.
- Şubeumun kurtarılması zor bir durum olduğunu düşünüyorsanız, tüm yerel şubemi ustalıkla tek bir bağlılıkla birleştirebilirim.
Yerel şubeleri kullanmak da sistematik bir dallanma stratejisi bulmak için iyi bir başlangıçtır. Kullanıcılarınızın kendi dallanma ihtiyaçlarını daha iyi anlamalarına yardımcı olur, böylece herkesin duyduğu için Gitflow'a düşmek yerine ihtiyaçlara ve ekibin mevcut anlayış / beceri seviyesine dayalı bir strateji seçebilirsiniz.
özet
Kısacası, git SVN değildir ve böyle davranılamaz. Gerek:
- Güvenli denemeyi teşvik ederek korkuyu ortadan kaldırın.
- Git'in ne kadar farklı olduğunu anlamalarına yardımcı olun ki normal iş akışını nasıl değiştirdiğini görebilsinler.
- Sorunlarını daha kolay çözmelerine yardımcı olmak için mevcut özellikleri anlamalarına yardımcı olun.
Tüm bunlar , bir dizi standardı uygulamaya başlayabileceğiniz noktaya ulaşana kadar giderek daha iyi git kullanımını benimsemenize yardımcı olacaktır .
Spesifik özellikler
Kısa vadede, aşağıdaki fikirler yardımcı olabilir.
rebase
Rebase'den bahsettin ve sorunda gerçekten anlamadın. İşte benim tavsiyem: az önce tarif ettiğim şeyi deneyin. Bazı değişiklikleri yerel olarak uygulayın, bir başkası bazı değişiklikleri zorladı. Değişikliklerinizi yerel olarak taahhüt edin . Depo dizininizi yedekleyin. Diğer kişinin değişikliklerini al. Şimdi bir rebase komutunu çalıştırmayı deneyin ve taahhütlerinize ne olacağını görün! Sonsuz blog yayınları okuyabilir veya yeniden düzenleme ve nasıl kullanmanız gerektiği veya kullanmaması gerektiği konusunda eğitim alabilirsiniz, ancak bunların hiçbiri, canlı yayınlandığını görmek için bir yedek değildir. Öyleyse dene .
merge.ff=only
Bu kişisel zevk meselesi olacak, ama en azından geçici olarak, anlaşmazlığı gidermekle ilgili sorunların olduğunu söylediğinden beri tavsiye edeceğim. Ben tavsiye ayarı merge.ff
içinonly
:
git config --global merge.ff only
"ff" "hızlı ileri" anlamına gelir. Hızlı ileri birleştirme, git'in farklı komisyonlardan gelen değişiklikleri birleştirmesi gerekmediği zamandır. Şube işaretçisini grafikteki düz bir çizgi boyunca yeni bir işleme doğru hareket ettirir.
Bunun pratikte yaptığı, git'in otomatik olarak birleştirme komisyonları oluşturmaya çalışmasını önlemektir. Bu nedenle, yerel olarak bir şey taahhüt edersem ve ardından bir birleştirme taahhüdü oluşturmaya çalışmak yerine (ve kullanıcıyı potansiyel olarak çakışmalarla başa çıkmaya zorlamak yerine) başka birinin değişikliklerini kabul edersem, birleştirme başarısız olur. Aslında, git yalnızca bir a gerçekleştirmiş olacak fetch
. Yerel bir taahhüdünüz yoksa, birleştirme normal şekilde ilerler.
Bu, kullanıcılara birleştirme girişiminde bulunmadan önce farklı taahhütleri gözden geçirme şansı verir ve onları birleştirmenin en iyi şekilde nasıl ele alınacağına dair bir karar vermeye zorlar. Yeniden git merge --no-ff
yapılandırabilir , birleştirme işlemine devam edebilir ( yapılandırmayı atlamak için kullanarak ), veya şimdilik değişikliklerimi birleştirmeyi bırakıp daha sonra halledebilirim. Bu küçük hızlı çarpma ekibinizin birlikler hakkında yanlış kararlar vermekten kaçınmasına yardımcı olacağını düşünüyorum. Birleşmeleri idare etmede daha iyi olduklarında ekibinizin kapanmasına izin verebilirsiniz.