Anda harus melihat pada git-flow . Ini model percabangan yang sangat baik (dan populer).
Ringkasan Aliran Git
Percabangan
Batang utama yang tetap ada selamanya adalah develop
dan master
. master
memegang rilis terbaru Anda dan develop
memegang salinan pengembangan "stabil" terbaru Anda.
Kontributor membuat feature
cabang (diawali dengan feature/
konvensi) tidak aktif dari develop
:
$ git checkout -b feature/my-feature develop
dan hotfix
cabang (diawali dengan hotfix/
konvensi) tidak aktif dari 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>
Cabang-cabang ini "sekali pakai", yang berarti mereka memiliki umur yang pendek sebelum mereka digabung kembali ke batang utama. Mereka dimaksudkan untuk merangkum fungsionalitas kecil.
Cabang Finishing
Ketika seorang kontributor selesai dengan feature
cabang, mereka menggabungkannya kembali menjadi develop
:
$ git checkout develop
$ git merge --no-ff feature/my-feature
$ git branch -d feature/my-feature
Ketika mereka selesai dengan hotfix
cabang, mereka menggabungkannya kembali ke kedua master
dan develop
begitu perbaikan terbaru membawa maju:
$ 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
Ini adalah aspek integrasi berkelanjutan.
Rilis
Saat Anda siap untuk mulai mengemas rilis, Anda membuat release
cabang dari cabang "stabil" Anda develop
(sama seperti membuat feature
cabang). Anda kemudian menabrak nomor versi di tag (dijelaskan di bawah)
Menggunakan release
cabang terpisah memungkinkan Anda untuk terus mengembangkan fitur-fitur baru develop
saat Anda memperbaiki bug dan menambahkan sentuhan akhir pada release
cabang.
Saat Anda siap untuk menyelesaikan rilis, Anda menggabungkan release
cabang menjadi keduanya master
dan develop
(seperti a hotfix
) sehingga semua perubahan Anda diteruskan.
Memberi tag
Saat Anda membuat release
cabang atau hotfix
cabang, Anda menabrak nomor versi dengan tepat dalam tag. Dengan vanilla git, yang terlihat seperti ini:
$ git tag -a <tag-name> -m <tag-description>
Anda kemudian juga harus mendorong tag (secara terpisah) ke repositori jarak jauh Anda:
$ git push --tags
Biasanya lebih baik menggunakan versi semantik di mana versi Anda mengambil formulir major.minor.hotfix
. Benjolan utama tidak kompatibel ke belakang, sedangkan benjolan kecil dan hotfix tidak kompatibel ke belakang (kecuali Anda dalam beta, 0.x.x
).
Penggabungan
Seperti yang Anda lihat di atas, git-flow mendorong Anda untuk menggabungkan cabang dengan perintah berikut:
$ git merge --no-ff <branch-name>
The --no-ff
pilihan memungkinkan Anda untuk memelihara semua sejarah cabang Anda tanpa meninggalkan sekelompok cabang tergeletak di saat komit dari repositori (sehingga tidak ada kekhawatiran, Anda tidak akan memiliki cabang untuk setiap versi).
Anda juga didorong untuk melakukannya
$ git pull --rebase
Jadi, Anda tidak menambahkan banyak komitmen gabungan yang tidak berguna.
Anda dapat mengkonfigurasi git untuk melakukan kedua hal ini secara default di .gitconfig
. Aku akan membiarkanmu melihatnya;)
Versi penjelajahan
Ketika seseorang mencari versi tertentu dari basis kode Anda, mereka dapat memeriksa tag dengan nama:
# 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>
Atau, jika seseorang menjelajah di github, ada juga tab "tag" di menu tarik-turun "cabang".
Menggunakan ekstensi git-flow (disarankan)
Cara favorit saya untuk menggunakan model ini adalah dengan ekstensi aliran git untuk git.
( Sunting: Louis merekomendasikan garpu AVH yang berfungsi lebih baik git describe
dan mungkin lebih aktif sekarang. Terima kasih Louis.)
Ekstensi mengotomatiskan semua bagian yang berantakan (seperti menggunakan merge --no-ff
dan menghapus cabang setelah penggabungan) sehingga Anda dapat melanjutkan hidup Anda.
Misalnya, dengan ekstensi, Anda dapat membuat cabang fitur seperti:
$ git flow feature start my-feature-name
dan selesaikan seperti itu
$ git flow feature finish my-feature-name
Perintah untuk perbaikan terbaru dan rilis serupa, meskipun mereka menggunakan nomor versi sebagai pengganti nama cabang, seperti:
# 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 flow kemudian membuat tag versi untuk Anda dan dengan ramah mengingatkan Anda untuk menabrak versi dalam konfigurasi atau file manifes (yang bisa Anda lakukan dengan task manager seperti grunt).
Semoga itu bisa membantu :) Saya tidak yakin persis bagaimana Anda akan mengintegrasikan semuanya dengan pengaturan Travis CI Anda, tapi saya kira githooks akan membawa Anda ke sana.