Git dallarında başarılı bir model

Git kullanmak için önemlidir, işbirlikçi geliştirme ortamı yazılım için yönetilebilir Bakımı dahil.

Kredi

Bu yazı orijinal Portekizli bir sürümüdür, İngilizce, “Başarılı bir Git dallanma model“, Yazar tarafından usulüne uygun olarak yetkili, Vincent Driessen. Eyvallah adam!

Teknik sorunlar için, Bazı anahtar kelimeler İngilizce bilerek tutulmuştur. Metni özgünlük sağlamak çalıştı, Ama bizim dilde anlaşılmasını kolaylaştırmak için ayarlamalar yapmak zorunda itiraf (TR). Herhangi bir düzeltme veya öneri geliştirme çeviri için açığız.

Giriş

Bu Git kullanmayı öğretme bir yazı değil. İstediğin buysa, Bir göz alarak öneriyorum Git el kitabı. Ne de bir yazılım sürüm oluşturma nasıl göstermek için amacımız, Bu durumda, bkz: Anlamsal sürüm oluşturma.

Ekip işbirliği yazılım sürüm oluşturma içinde yönetmek için önerisi olduğunu. Biliyor musun ne zaman sen-si olmak birkaç programcılar “karıştırma” aynı kaynak kodunda? Geliştirme hızlandırmak için önemlidir, Ama büyük baş ağrısı neden olabilir (önyargı ve yeniden işleme alınması) Bir denetim varsa. Bir uygulama geliştiricisi her üzerine yazmasını engellemek için diğer iş ve ilerici geliştirme sağlamak ve organize, çakışmaları en aza indirmek ve yazılım sürümleri yönetme, Git ve modelini kullanın dalları o zaman.

Boş şablon

Bu yazı ben bazı projelerim kullanılan geliştirme modeli mevcut (gibi belirli çalışma) hakkında 1 yıl önce, ve bu çok başarılı olmuştur. Ben bu konuda yazmak istedim uzun bir zaman oldu, Ama asla bir zamanlama kullanılabilir bulundu, defa. Proje detayları tartışmak için gitmiyorum, Sadece stratejileri hakkında dalları ve yönetimi bültenleri.

Bu model sadece üzerinde duruluyor Git bizim kaynak kodu sürüm oluşturma için bir araç olarak. (Bu arada, Sen Git ilgilenen varsa, Firmamız GitPrime sağlar, gerçek zamanlı olarak, bazı şaşırtıcı veri analizleri optimizasyonu yazılım mühendisliği için)

Neden git?

Artılarını ve eksilerini Git Merkezi kaynak kodu denetim sistemlerine göre ayrıntılı bir tartışma için, bkz: , Web. Muazzam bir şey “savaş” Bu. Bir geliştirici olarak, Diğer mevcut araçları ile ilgili olarak bugün Git tercih ederim. Git şüphesiz geliştiriciler yapmayı tarzını değiştirdi bir Birleştirme veya oluşturmak bir Şube. Klasik dünyasından gel CVS/Subversion, nerede Birleştirme/dallanma Bir şey sadece bir kez yapmak ve her zaman biraz korkutucu görünüyor (“Çatışmalar dikkat Birleştirme, Sizi ısırırlar!”).

Git ile bu eylemleri [Birleştirme/dallanma] son derece basittir ve temsil bizim iş rutin büyük kısmı, Yemin ederim. Örneğin, içinde Kitap CSV/Subversion, dallanma ve Birleştirme daha sonra bölümler yalnızca ilk kez kaplıdır (ileri düzey kullanıcılar için), Herhangi bir süre Git kitap, Bu bölümde görülen 3 (temel bilgiler).

Sadelik ve tekrarlayan doğa sonucu olarak, dallanma ve Birleştirme Artık korkulacak bir şey değildir. Aslında, sürüm denetim araçları yapmak yardımcı olacaktırBirleştirme ve oluşturmak Şube Her şeyden çok.

Başka konuşma yok, Geliştirme modeli gidelim. Burada sunacağım modeli aslında her takım üyesi için bir yönetilen yazılım geliştirme süreci ulaşmak için izlemeniz gereken işlemler bir dizi başka bir şey değildir.

Adem-i merkeziyetçi, Ama merkezli

Biz kullanımı ve o inşaat peki bu model ile depo yapılandırma dallanma Merkezi bir depo oluşmaktadır. Bu havuzda sadece olduğunu unutmayın “olarak kabul” Merkez (Git bir DVCS olduğundan [Dağıtılmış sürüm kontrol sistemleri], IE, Teknik düzeyde bir merkezi depo gibi hiçbir şey yoktur). Biz bu depo olarak referans Köken, Bu ad tüm Git kullanıcılara tanıdık olduğu için.

Her geliştirici yapar çeker ve seyahat için Köken. Ama ilişki ötesinde itme-çekme Merkezi için [Köken], her geliştirici de alabilirsiniz [Çekme] diğer çift alt takım forma değişiklikleri. Örneğin, Bu yeni fonksiyonellik iki veya daha fazla gelişmiş ile çalışmak için yararlı olabilir, daha önce gönderme [itme] devam eden çalışma için Köken. Yukarıdaki şekil, Ayten ve Buğra alt takımlar vardır, Alice ve David, ve Clair ve David.

Teknik olarak, Bu bir şey ifade etmiyor daha fazla Alice Bob isminde bir uzak Git tanımladığı, Bob deposuna işaret, ve tersi.

Ana dalları

Arka planda, Bu model gelişimi oldukça varolan modeller esinlenmiştir. Merkezi depo iki dalı vardır [dalları] sonsuz bir hayat ile büyük:

  • Master
  • geliştirmek

, Şube Yöneticisi içinde Köken her kullanıcıya Git tanımanız gerekir. Paralel Şube Yöneticisi, Başka bir Şube adı geliştirmek.

Biz düşünün menşe/master ana dal olarak nerede kaynak kodu KAFA her zaman bir durumunu gösterir üretime hazır [üretim için hazır].

Biz düşünün menşe/geliştirmek varlık olarak Şube Ana nerede kaynak kodu KAFA her zaman bir sonraki sürümde teslim edilecek en son değişikliklerle bir durumunu gösterir. Bazıları buna derim “Şube entegrasyon”. Bu nerede daha kötü yapılar oldu.

Ne zaman kaynak kodu Şube geliştirmek istikrarlı bir nokta ve var olmak serbest bırakmak hazır ulaşmak [serbest bırakmak], tüm değişiklikleri birleştirilmiş [birleştirilmiş] başa Şube Yöneticisi ve bir sürüm numarasına sahip olarak işaretlenmiş [Yayın]. Bu ayrıntılı olarak nasıl yapılır, daha sonra ele alınacak.

Yani, her değişiklikte dahil edilmiştir [birleştirilmiş] başa Master, Yeni bir sürümünü üretti [serbest bırakmak], tanımı gereği. Bu konuda oldukça titiz olmak istiyoruz, Yani, Teorik olarak, Biz bile bir komut dosyası kullanabilirsiniz kanca Git oluşturmak ve her ne zaman var bizim uygulama üretim sunucularına otomatik olarak göndermek için bir Tamamlama içinde Master.

Yardımcı dallar

Yanında dalları Ana, Master ve geliştirmek, bizim kalkınma modeli çeşitli kullanır dalları ekip üyeleri arasında eşzamanlı gelişimini desteklemek amacıyla, Ne 1) yeni özelliklerin izleme kolaylaştırır [özellikleri], 2) yeni bir sürümünü teslim edilmek üzere hazırlamak [Yayın] ve 3) hızlı bir şekilde üretim kusurları düzeltmek için yardımcı olur [düzeltme]. Aksine dalları Ana, Bu dalları kısa bir yaşam süresi, sonunda Şimdi bu kaldırılacak.

Farklı türleri dalları [yardımcıları] Biz-ebilmek kullanma, çoğu:

  • Şekil şube
  • Yayın dalları
  • Düzeltme dalları

Bunların her biri dalları belirli bir amacı vardır ve katı kurallara bağlı, Böylece, dalları için çıkmasına neden olabilir Şube ve bu dalları birleştirilmesi gereken [birleştirilmiş] hedeflerinizi. Her göreceksiniz [dalları] bir anda.

Teknik bir bakış açısı altında, Bu dalları kabul edilmez “Özel”. Her tür Şube Nasıl onları kullanmak göre kategorilere ayrılır.. Yine de, Sadece basit dalları iyi eski Git.

Şekil şube

[Özellikler Özellikler/işlevi =]

– Şube [Şube] Kaynak:
geliştirmek
– Birleştirmeniz gerekir-Eğer [Birleştirme] tekrar:
geliştirmek
– Adlandırma kuralı Şube:
Bir şey, dışında Master, geliştirmek, Yayın-*, veya düzeltme-*

, şekil şube (ya da bazen denilen Konu dalları) yeni özellikler/işlevsellik sonraki veya gelecekteki bir sürümüne geliştirmek için kullanılan. Gelişimi başlatmak için bir özelliği, Bu özellik katıştırılır hedef sürüm de bu noktada bilinmeyen olabilir.

Özünü bir şekil şube O sırada özelliği gelişme içinde, Ama sonunda gömülü olacak [birleştirilmiş] başa geliştirmek (Yeni eklemek için özelliği Sonraki Yayın) ya da atılmış (başarısız bir deneyim olması durumunda).

Şekil şube tipik olarak sadece depo içinde gerçekleşir geliştirmek, değil Köken.

Dalları bir özellik oluşturma

$ Git çıkış -b myfeature geliştirmek
# Switched to a new branch "myfeature"

Bir özellik ekleme geliştirme sona erdi

Özellikleri kesinleşmiş birleştirilebilir[birleştirilmiş] ile Şube geliştirmek Onları diğerine eklemek için Yayın.

$ Git çıkış geliştirmek
# Şube 'geliştirmek için' geçiş
$ Git birleştirme --içinde-FF myfeature
# Ea1b82a güncelleştiriliyor... 05e9557
# (Değişikliklerin Özeti)
# $ Git şube-d myfeature
# Silinen şube myfeature (05e9557 yapıldı.).
$ Git push kökenli geliştirmek

Bayrak –Hayır-ff birleştirmeyi neden olur [Birleştirme] her zaman yeni bir nesne oluştur Tamamlama, Birleştirme ile yerine olabilir, ancak bir Hızlı ileri sarma [FF]. Bu varlığı tarihi hakkında kayıp bilgileri engeller bir şekil şube, tüm gruplandırma tamamlar için eklenmiştir özelliği. Karşılaştır:

İkinci durumda [Yukarıdaki şekil], Git geçmişinden görmek imkansız olan tamamlar içinde uygulanan bir özelliği; el ile tüm günlük iletileri okumak gerekir. Ters bir özelliği tek parça (IE, bir grup tamamlar), Son durumda gerçek bir baş ağrısı olduğunu, Bu kolay eğer yapılır iken bayrak –Hayır-ff kullanılmıştır.

Evet, Bu bir kaç daha fazla nesneleri oluşturur tamamlar (boş), Ama kazanç daha maliyeti çok daha büyüktür.

Yayın dalları

[Yayın yayın/teslimat/sürüm =]

– Şube [Şube] Kaynak:
geliştirmek
– Birleştirmeniz gerekir-Eğer [Birleştirme] tekrar:
geliştirmek ve Master
– Adlandırma kuralı Şube:
Yayın-*

, Bültenleri dalları yeni bir üretim sürüm hazırlanmasında yardımcı olmak [üretim sürümü]. Son bir saat i'ye nokta sağlar. Ayrıca, Onlar küçük hata düzeltmeleri sağlar hata bildirimi ve tanımı meta veri için bir Yayın (sürüm numarası, tarihler kurmak, vb). Tüm bu işi yapmak için bir serbest bırakmak dal, , Şube geliştirmek almak için temiz kalmak özellikleri sonraki büyük Yayın [Sürüm].

Yeni bir oluşturmak için anahtar an serbest bırakmak dal bir dallanma geliştirmek zaman geliştirmek zaten (Neredeyse) yeni istenen durumunu yansıtan Yayın [Sürüm]. Tüm özellikleri adaylar için Yayın Oluşturulacak yansıtılması [Birleştirme] , geliştirmek Bu anda. Zaten özellikleri karşı karşıya bültenleri gelecek bir sonraki beklemelisiniz Yayın [Sürüm].

Tam olarak, başında olduğu bir serbest bırakmak dal Bu sonraki Yayın sürüm numarasını alır – daha önce değil. O zamana kadar, , Şube geliştirmek değişikliklerin yansımasını “bir sonraki sürümü” [sonraki sürümü], Ama emin değilim Eğer bu “sonraki sürümü” sonunda olacak 0.3 veya 1.0, kadar serbest bırakmak dal başlatılır. Bu karar, başında yapılır serbest bırakmak dal ve sürüm oluşturma projede kuralları tarafından gerçekleştirilen [Görmek öneririz “Anlamsal sürüm oluşturma“].

Serbest bırakmak dal oluşturma

, Bültenleri dalları oluşturulur Şube geliştirmek. Örneğin, Diyelim ki sürüm 1.1.5 geçerli üretim sürümü ve biz büyük bir Yayın geliyor. Durumunu geliştirmek Senin için hazır “sonraki sürümü” [bir sonraki sürümü] ve karar verdik bu sürümü olacak 1.2 (Onun yerine 1.1.6 veya 2.0). Yani, Biz genişlettik ve vermek serbest bırakmak dal Yeni sürüm numarası yansıtan bir ad:

$ Git çıkış -(b) yayın-1.2 geliştirmek
# Switched to a new branch "release-1.2"
$ ./yumru-Sürüm.sh 1.2
# Başarıyla değiştirildi dosyalar, sürüm bumped 1.2.
$ Git tamamlama -, -m "Bumped version number to 1.2"
# [Sürüm 1.2 74d 9424] Çağırırdık sürüm numarası 1.2
# 1 değiştirildi dosyalar, 1 eklemeler(+), 1 silme(-)

Yeni bir oluşturduktan sonra Şube ve erişim, Biz sürüm numarası. Burada, Bump-version.sh belgili tanımlık yeni yorum yansıtacak şekilde çalışma kopyasından bazı dosyaları değiştirir bir kabuk yazısıdır. (Bu can, Elbette, el ile değişiklik olması – bazı dosyaları değiştirmek noktasıdır.) Yani, yapılır Tamamlama anlam değiştirici yorum sayısı.

Bu yeni Şube Orada-ebilmek var olmak orada bir süre için, kadar Yayın Kesinlikle atılmış olması. Bu dönemde, hata düzeltmeleri bu uygulanabilir Şube (yerine Şube geliştirmek). Ayrıca yeni ve büyük özellikleri Burada kesinlikle yasaktir. Onlar birleştirilmelidir [birleştirilmiş] içinde geliştirmek ve, Böyle, gelecek için beklemek büyük Yayın.

Serbest bırakmak dal sonuçlandırılması

Ne zaman serbest bırakmak dal gerçek bir yorum olmaya hazır mısın, bazı eylemler gerçekleştirilmesi gereken. İlk, , serbest bırakmak dal içine birleştirilir Master (Her Tamamlama içinde Master tanımı gereği yeni bir sürümüdür, Hatırlıyorum). O zaman, Bu Tamamlama içinde Master kolay ilerisi için bu sürüm geçmişi işaretlenmelidir. Son olarak, yapılan değişiklikler serbest bırakmak dal birleştirilmesi gerekiyor [birleştirilmiş] tekrar geliştirmek, Böylece bültenleri geleceği de bu hata düzeltmeleri içerir.

Git ilk iki adımda:

$ Git kontrol ana
# Şube 'master' açık
$ Git birleştirme --içinde-FF yayın-1.2
# Özyinelemeli tarafından yapılan birleştirme.
# (Değişikliklerin Özeti)
$ Git etiketi -, 1.2

, Yayın Şimdi tamamlanmış ve için işaretlenmiş ileride olduğunu.

Not: Sen-ebilmek da kullanma bayrakları-s veya-u etiketinizin şifreli olarak imzalamak için.

Yapılan değişiklikleri tutmak için serbest bırakmak dal, Biz onları koymak gerekir geri geliştirmek. Git:

$ Git çıkış geliştirmek
# Şube 'geliştirmek için' geçiş
$ Git birleştirme --içinde-FF yayın-1.2
# Özyinelemeli tarafından yapılan birleştirme.
# (Değişikliklerin Özeti)

Bu adım bir birleştirme çakışmaya neden olabilir (Muhtemelen gitmek, Bir kez biz sürüm numarası değişti). Eğer öyleyse, düzeltmek ve yapmak Tamamlama.

Şimdi, Bu gerçekten ayrıldı, , serbest bırakmak dal Kaldırılabilir, Beri artık gerek yok:

$ Git şube -d yayın-1.2
# Silinen şube yayın-1.2 (ff452fe yapıldı.).

Düzeltme dalları

– Şube [Şube] Kaynak:
Master
– Birleştirmeniz gerekir-Eğer [Birleştirme] tekrar:
geliştirmek ve Master
– Adlandırma kuralı Şube:
düzeltme-*

, Düzeltme dalları çok benzer Yayın dalları, Onlar da yeni bir üretim sürümü hazırlamak amacıyla, Her ne kadar planlanan değildir. Sonra hemen istenmeyen bir devlet üretim versiyonları hareket gerek kaynaklanan [kullanımda]. Önemli bir hata olduğunda bir üretim sürüm, hemen çözülmesi gerekir, o zaman bir düzeltme şube varolan ürün sürümü işaretler etiketi üzerinden elde edilebilir Ana dal.

Özü bu ekip üyelerinin işi (içinde Şube geliştirmek) devam edebilirsiniz, başka bir kişi kusur üretimde hızlı bir düzeltme hazırlanıyor iken.

Düzeltme şube oluşturma

, düzeltme dalları oluşturulur Ana dal. Örneğin, belgili tanımlık yorum varsayarak 1.2 çalışan geçerli üretim sürüm ve sorunları önemli bir hata nedeniyle sunar. Değişiklikler geliştirmek hala kararsız bırakın. Sonra şube bir düzeltme şube ve sorunu çözmek başlar:

$ Git çıkış -(b) düzeltme-1.2.1 Master
# Switched to a new branch "hotfix-1.2.1"
$ ./yumru-Sürüm.sh 1.2.1
# Başarıyla değiştirildi dosyalar, sürüm bumped 1.2.1.
$ Git tamamlama -, -m "Bumped version number to 1.2.1"
# [Düzeltme-1.2.1 41e61bb] Çağırırdık sürüm numarası 1.2.1
# 1 değiştirildi dosyalar, 1 eklemeler(+), 1 silme(-)

Dallanma sonra sürüm numarasını değiştirmeyi unutma!

O zaman, hatayı düzeltin ve yapmak Tamamlama bir veya birden fazla düzeltme Tamamlama ayrılmış.

$ Git tamamlama -m "Fixed severe production problem"
# [Düzeltme-1.2.1 abbe5d6] Sabit ciddi üretim sorunu
# 5 değiştirildi dosyalar, 32 eklemeler(+), 17 silme(-)

Bir düzeltme şube bitirme

Ne zaman tamamlanmak, , Bugfix başa birleştirilmesi gerekiyor Master, Ama bu da tekrar için yansıtılması gerekiyor geliştirmek, Bunu sağlamak için Bugfix sonraki sürümde de dahil. Bu nasıl için oldukça benzer olduğunu Yayın dalları kesinleşmiş.

İlk, güncelleştirmek Master ve tag Yayın [Yaz seçin]:

$ Git kontrol ana
# Şube 'master' açık
$ Git birleştirme --içinde-FF düzeltme-1.2.1
# Özyinelemeli tarafından yapılan birleştirme.
# (Değişikliklerin Özeti)
$ Git etiketi -, 1.2.1

Not: Sen-ebilmek da kullanma bayrakları-s veya-u etiketinizin şifreli olarak imzalamak için.

O zaman, dahil Bugfix içinde geliştirmek Ayrıca:

$ Git çıkış geliştirmek
# Şube 'geliştirmek için' geçiş
$ Git birleştirme --içinde-FF düzeltme-1.2.1
# Özyinelemeli tarafından yapılan birleştirme.
# (Değişikliklerin Özeti)

Bu kuralın tek istisnası, Olduğunda bir serbest bırakmak dal devam eden, değişiklikleri düzeltme Bunun için birleştirilmesi gerekiyor serbest bırakmak dal, Onun yerine geliştirmek. Birleştirme Bugfix içinde serbest bırakmak dal neden olur Bugfix içine birleştirilir geliştirmek Ayrıca, Ne zaman serbest bırakmak dal tamamlar. (Eğer çalışmalarında geliştirmek hemen gerektiren Bugfix ve cant'beklemek-e kadar serbest bırakmak dal tamamlandı, Güvenli bir şekilde birleştirebilirsiniz Bugfix için deveolp çok.)

Son olarak, Kaldır Şube geçici:

$ Git şube -d düzeltme-1.2.1
# Silinen şube düzeltme-1.2.1 (abbe5d6 yapıldı.).

Özeti

Dallanma bu modelde gerçekten olağanüstü bir şey olsa, yazının başında hatlarıma projelerimizde çok yararlı olabilir. O bir zihinsel model anlamak kolay gösterir ve süreçleri ortak bir anlayış geliştirmek ekip üyeleri verir dallanma ve serbest bırakma.

Yüksek kaliteli PDF yorum-in şekil orijinal post blog sağlanır: http://nvie.com/posts/a-successful-git-branching-model/ [ya da belgili tanımlık Download bağlantı aşağı]. Devam edin ve her zaman hızlı başvuru için duvara koy.

Simge

Git-dallanma-modeli-20170825.pdf
3.89 MB 127 kere indirildi

Yazar: Vincent Driessen
Özgün Blog: http://nvie.com/
Lisans: CC BY-SA

Toplam sayısı: 2473

Cevap bırak

E-posta adresinizi yayınlanan olmayacaktır. Gerekli alanları ile işaretlenir *