Git-akışına bakmalısın . Mükemmel (ve popüler) bir dallanma modeli.
Git Akış Özeti
Dallanma
Sonsuza kadar kalan ana sandıklar develop
ve master
. master
En son sürümünüzü develop
tutar ve en son "kararlı" geliştirme kopyanızı tutar.
Katkıda bulunanlar feature
( feature/
sözleşmelere göre eklenmiş ) şubeler oluşturur develop
:
$ git checkout -b feature/my-feature develop
ve hotfix
dallar (öneki hotfix/
teamül) kapalı master
:
# hotfix the latest version of master
$ git checkout -b hotfix/hotfix-version-number master
# or hotfix from a specific version
$ git checkout -b hotfix/hotfix-version-number <starting-tag-name>
Bu dallar "tek kullanımlıktır", yani ana gövdelere geri takılmadan önce kısa ömürleri vardır. Küçük işlevsellik parçalarını içine almak içindir.
Dalları Bitirme
Bir katılımcı bir feature
şubeyle yapıldığında , onu tekrar birleştirir develop
:
$ git checkout develop
$ git merge --no-ff feature/my-feature
$ git branch -d feature/my-feature
Bir hotfix
şube bittiğinde , ikisini de bir araya getirirler master
ve develop
bu yüzden düzeltme ilerler:
$ git checkout master
$ git merge --no-ff hotfix/hotfix-version-number
$ git checkout develop
$ git merge --no-ff hotfix/hotfix-version-number
$ git branch -d hotfix/hotfix-version-number
Bu sürekli entegrasyon yönüdür.
Bültenleri
Bir yayını paketlemeye başlamaya hazır olduğunuzda release
, "sabit" develop
dalınızdan bir dal oluşturursunuz ( feature
dal oluşturma ile aynı ). Daha sonra sürüm numarasını bir etikette belirtin (aşağıda açıklanmıştır).
Ayrı release
dalları kullanmak , develop
hataları giderirken ve release
şubeye son dokunuşlar eklerken yeni özellikler geliştirmeye devam etmenizi sağlar .
Eğer serbest bırakılmasını bitirmek için hazır olduğunuzda, birleştirme release
hem içine dal master
ve develop
(sadece bir gibi hotfix
tüm değişiklikler ileriye taşımak böylece).
Etiketleme
Bir release
dal veya dal oluşturduğunuzda hotfix
, sürüm numarasını bir etikette uygun şekilde çarptırırsınız. Vanilya git ile bu gibi görünüyor:
$ git tag -a <tag-name> -m <tag-description>
Ayrıca etiketleri (ayrı olarak) uzak havuzunuza da itmeniz gerekir:
$ git push --tags
Genellikle , sürümlerinizin form aldığı anlamsal sürümleri kullanmak en iyisidir major.minor.hotfix
. Büyük tümsekler geriye dönük olarak uyumlu değildir, oysaki küçük ve düzeltme tümsekleri geriye dönük olarak uyumlu değildir (beta olmadıkça 0.x.x
).
birleştirme
Yukarıda gördüğünüz gibi git-flow, şubeleri aşağıdaki komutla birleştirmenizi önerir:
$ git merge --no-ff <branch-name>
Bu --no-ff
seçenek, havuzun mevcut taahhüdünde bir demet şube bırakmadan tüm şube geçmişinizi korumanızı sağlar (böylece endişelenmeyin, her sürüm için bir dalınız olmayacak).
Ayrıca çekmek için teşvik edilirsiniz
$ git pull --rebase
Yani pek çok işe yaramaz birleşme komisyonu eklemiyorsunuz.
Git'i, ikisinde de varsayılan olarak yapmaları için yapılandırabilirsiniz .gitconfig
. Buna bakmana izin vereceğim;)
Tarama sürümleri
Birisi kod tabanınızın belirli bir sürümünü ararken, etiketi isme göre kontrol edebilir:
# checkout in detached HEAD to browse
$ git checkout <tag-name>
# OR checkout and create a new local branch (as you might for a hotfix)
$ git checkout -b <new-branch-name> <tag-name>
Veya, birisi github'a göz atıyorsa, "dallar" açılır menüsünde "etiketler" sekmesi de vardır.
Git-flow uzantısını kullanma (önerilir)
Bu modeli kullanmanın en sevdiğim yolu, git için git flow uzantısıyla .
( Düzenleme: Louis, şimdi daha iyi çalışan ve daha aktif olabilecek AVH çatalını tavsiye etti git describe
. Teşekkürler Louis.)
Uzatma tüm dağınık parçaları ( merge --no-ff
birleştirmeden sonra dalları kullanmak ve silmek gibi) otomatik hale getirir, böylece hayatınıza devam edebilirsiniz.
Örneğin, uzantıyla birlikte şöyle bir özellik dalı oluşturabilirsiniz:
$ git flow feature start my-feature-name
ve bu şekilde bitir
$ git flow feature finish my-feature-name
Düzeltmeler ve sürümler için komutlar aynıdır, ancak dal adı yerine sürüm numarasını kullanırlar:
# Create hotfix number 14 for this minor version.
$ git flow hotfix start 2.4.14
# Create the next release
$ git flow release start 2.5.0
Git akışı daha sonra sizin için sürüm etiketini oluşturur ve nazikçe herhangi bir yapılandırmada veya bildirim dosyalarında (grunt gibi bir görev yöneticisi ile yapabileceğiniz) sürümün önüne geçmenizi hatırlatır.
Umarım yardımı olur :) Travis CI kurulumunuzla hepsini nasıl entegre edeceğinizden tam olarak emin değilim, ama githooks'un sizi oraya götüreceğini tahmin ediyorum.