Jon Purdy memiliki ide yang tepat. git flow
membuat pengelolaan cabang-cabang ini menjadi mudah, juga, dan manajemen cabang merupakan argumen untuk pindah ke git
.
Mari kita mulai dengan ikhtisar dasar git
, karena Anda datang dari perspektif- svn
ke- git
. Pertimbangkan git
hal-hal berikut:
master--...............-.....-..............-
\ / / /
---develop---------............../
\ /
--feature---
Di atas, Anda bercabang master
ke develop
(dilambangkan dengan \
), dan bercabang develop
ke feature
cabang. Kami menggabungkan cabang-cabang itu cadangan (dilambangkan dengan /
), dengan komit ( -
) di sepanjang cabang. (Jika tidak ada komit tetapi gabungannya adalah jalan ke kanan, ada .
indikator untuk menunjukkan bahwa -
komit berikutnya adalah komit berikutnya).
Cukup mudah. Bagaimana jika kami memiliki perbaikan terbaru di rilis utama kami?
master--...............-.....-................-...........-.........-
\ / / / \ /| /
\ / / / -hotfix-- V /
---develop---------............../..............-...----
\ / \ V /
--feature--- --feature2...----
Di atas, develop
bercabang dari master
. Bug yang ditemukan di master
diperbaiki dengan bercabang dari master
, memperbaikinya, dan menggabungkan kembali ke master
. Kami kemudian bergabung master
ke dalam develop
, dan kemudian develop
kefeature2
, yang menggulung kode baru dari hotfix
cabang-cabang ini.
Saat Anda bergabung feature2
kembali ke develop
, riwayatnya termasuk develop
dengan hotfix
. Demikian juga, develop
digabung feature2
dengan kode baru dari master
, jadi penggabungan develop
kembali master
akan terjadi tanpa hambatan, karena didasarkan pada komit pada master
saat itu — seolah-olah Anda telah bercabang master
pada saat itu.
Jadi, inilah cara lain untuk melakukan itu.
master--..........-........-
\ /\ /
---1.0-- --1.1--
Anda 1.0 rilis mendapatkan tagged- 1.0.1
, 1.0.2
, 1.0.3
, dan sebagainya.
Sekarang inilah triknya: Anda menemukan bug di 1.0 dan itu mempengaruhi 1.1, 1.2, dan 1.3. Apa yang kamu kerjakan?
Anda bercabang rilis rilis terbaru atau paling awal dipertahankan dan memperbaikinya. Kemudian Anda menggabungkan baru Anda hotfix
cabang ke 1.3
-dan dalam 1.2
, 1.1
dan 1.0
. Jangan bercabang dari masing-masing cabang versi pemeliharaan; tidak menggabungkan 1.0
ke dalam master
atau menggabungkan master
kembali ke 1.0
. Ambil satu hotfix
cabang dan gabungkan ke semua cabang versi Anda. Jika ada konflik, itu akan memberi tahu Anda; tinjau kode Anda untuk memastikan perubahannya benar ( git diff
adalah teman Anda).
Sekarang perubahan spesifik diterapkan di mana-mana. Silsilahnya bercabang, tetapi tidak apa-apa. Itu tidak sembarangan. 1.3
Beri tag pada head sebagai 1.3.17, gabungkan ke setiap fitur dalam proses yang bercabang 1.3
, dan lanjutkan.
The git flow
ekstensi membantu mengelola pemeliharaan, fitur, dan cabang perbaikan terbaru ini untuk Anda. Setelah Anda menyelesaikan alur kerja, ini sepele dan mengeluarkan banyak masalah dari manajemen kode sumber.
Saya telah melihat ini dilakukan pada tim pemrograman, tetapi saya sendiri belum bekerja sedalam itu sebagai seorang programmer, jadi saya masih memikirkan alur kerja sehari-hari saya sendiri.
git
tag setelah setiap build berhasil? Ini akan memiliki keuntungan tambahan yang membuatnya benar-benar jelasgit
komit mana yang telah membangun masalah atau kegagalan pengujian, karena mereka akan tetap tidak ditandai.