Saya dan tim saya menggunakan cabang fitur (dengan git). Saya bertanya-tanya mana yang merupakan strategi terbaik untuk tinjauan kode sebelum bergabung menjadi master.
- Saya checkout cabang baru dari master, sebut saja fb_ # 1
- Saya komit beberapa kali dan kemudian ingin menggabungkannya kembali ke master
- Sebelum saya menggabungkan seseorang seharusnya membuat tinjauan kode
Sekarang ada 2 kemungkinan:
1
- Saya menggabungkan master ke fb_ # 1 ( bukan fb_ # 1 untuk dikuasai) untuk menjadikannya sebagai yang terbaru.
- Rekan tim meninjau perubahan antara kepala master dan kepala fb_ # 1
- Jika fb_ # 1 tidak masalah, kami menggabungkan fb_ # 1 untuk dikuasai
- Pro: tidak ada kode usang dalam ulasan
- Cons: jika orang lain menggabungkan sesuatu di antara "1." dan "2." perubahannya muncul di ulasan, meskipun itu milik ulasan lain.
Ke-2
- Rekan satu tim mengulas perubahan antara titik checkout (git merge-base master fb_ # 1) dan head fb_ # 1
- Pro: kami melihat apa yang diubah selama bekerja di cabang fitur
- Cons: beberapa kode usang mungkin muncul di ulasan.
Menurut Anda cara mana yang lebih baik dan mengapa ? Mungkin ada pendekatan lain yang lebih cocok?
sumber
git show HEAD
. Karena itu akan menjadi gabungan komit fm , maka akan daftar kedua orang tua. Jadi, Anda memiliki hash mm . Atau, Anda dapat dengan mudah melihat orang tua digitk
atau browser git lainnyaKe-3
Anda rebase cabang pada master untuk membuatnya terbaru dan menjaga perubahan terpisah.
Ini menciptakan sejarah baru cabang. Ini akan menjadi revisi baru dengan ID baru yang akan memiliki konten yang sama, tetapi akan berasal dari master terbaru dan tidak akan ditautkan ke revisi lama. Revisi lama masih dapat diakses di "reflog" jika Anda perlu merujuk mereka misalnya karena Anda menemukan Anda membuat kesalahan dalam penyelesaian konflik. Selain itu mereka tidak berharga. Git secara default memangkas reflog setelah 3 bulan dan membuang revisi lama.
Anda menggunakan rebase interaktif (
git rebase -i
dangit commit --amend
) untuk menyusun ulang, mengedit, dan membersihkan perubahan sehingga masing-masing melakukan perubahan yang ditutup secara logis.Ini lagi-lagi menciptakan sejarah baru, kali ini dengan manfaat tambahan yang dapat Anda ubah strukturnya menjadi paling masuk akal selama peninjauan.
Pro:
Biasanya pekerjaan tambahan berarti Anda meninjau kode secara menyeluruh terlebih dahulu dan itu akan menangkap banyak masalah juga.
Inilah yang dilakukan Linux dan Git. Dan bukan hal yang aneh melihat serangkaian 20 hingga 25 tambalan diajukan untuk ditinjau dan ditulis ulang beberapa kali dalam proyek-proyek tersebut.
Sebenarnya Linux melakukannya sejak awal dalam proyek ketika versi kontrol pilihan mereka adalah tarball dan patch. Ketika bertahun-tahun kemudian Linus mulai membuat git, itu adalah alasan utama untuk mengimplementasikan
rebase
perintah dan itu varian interaktif. Juga karena itu git memiliki gagasan terpisah tentang pengarang dan pengalih . Penulis adalah yang pertama kali membuat revisi dan komuter adalah yang terakhir menyentuhnya. Karena di Linux dan Git tambalan masih dikirimkan melalui email, keduanya hampir tidak pernah orang yang sama.sumber
merge --no-ff
yang akan dengan jelas menunjukkan cabang pada master bukannya fitur yang hanya menghilang di seluruh komit--no-ff
memilikinya atas dan bawah. Saya pribadi merasa lebih berisik daripada apa pun. YMMV.Sebenarnya ada kepemilikan ketiga — dan kemungkinan besar banyak yang lain, karena GIT lebih merupakan implementasi kerangka SCM daripada implementasi metodologi SCM. Kemungkinan ketiga ini didasarkan pada
rebase
.The
rebase
GIT subcommand mengambil serangkaian komit (biasanya dari titik Anda bercabang ke ujung cabang topik Andatopic
) dan replay mereka di tempat lain (biasanya di ujung cabang integrasi Anda, misalnyamaster
).rebase
Sub - perintah tersebut menghasilkan komitmen baru, yang memberikan peluang untuk menyusun ulang komitmen dalam bentuk yang lebih mudah ditinjau. Ini menghasilkan serangkaian komit baru, mirip dengan apa yangtopic
dulu tetapi muncul berakar di bagian atas cabang integrasi. Cabang baru ini masih dipanggiltopic
oleh GIT, sehingga referensi lama dibuang. Secara tidak resmi saya memberi labeltopic-0
kondisi asli cabang Andatopic-1
dan seterusnya, serta berbagai refactoringnya.Ini saran saya untuk
topic
cabang Anda :(Langkah Opsional) Anda secara interaktif rebase cabang topik Anda
topic
pada titik percabangan (lihat--fixup
pilihan untukcommit
dan-i
dan--autosquash
pilihan padarebase
), yang memberikan Anda kesempatan untuk menulis ulang komit Anda dengan cara yang lebih mudah untuk ulasan. Ini menghasilkan cabangtopic-1
.Anda rebase cabang topik Anda di bagian atas cabang integrasi Anda, mirip dengan melakukan penggabungan, tetapi sejarah “tidak mencemari” dengan penggabungan yang hanya merupakan artefak rekayasa perangkat lunak. Ini menghasilkan cabang
topic-2
.Kirim
topic-2
ke teman satu tim yang mengulasnya di ujungmaster
.Jika
topic-2
tidak apa-apa maka gabungkan menjadi master.CATATAN Cabang-cabang — di mana cabang mengacu pada pohon komit — semua akan disebut sama oleh GIT, dengan demikian, pada akhir proses, hanya cabang yang
topic-2
memiliki nama dalam GIT.Pro:
Cons:
topic-0
, ada tiga cabang artefaktopic-0
,topic-1
dantopic-2
yang dibuat di pohon komit. (Meskipun setiap saat, hanya satu dari mereka yang memiliki nama di GIT.)Dalam skenario 1 Anda «jika seseorang menggabungkan sesuatu di antara" 1. " dan "2." »mengacu pada rentang waktu antara penciptaan titik cabang dan waktu ketika Anda memutuskan untuk bergabung. Dalam skenario ini «jika seseorang menggabungkan sesuatu di antara" 1. " dan "2." »mengacu pada rentang waktu antara rebase dan penggabungan, yang biasanya sangat singkat. Jadi dalam skenario yang saya sediakan, Anda dapat «mengunci»
master
cabang untuk saat penggabungan tanpa mengganggu alur kerja Anda secara signifikan, sementara itu tidak praktis dalam skenario 1.Jika Anda melakukan tinjauan kode sistematis, mungkin ide yang baik untuk mengatur ulang komit dengan cara yang memadai (langkah opsional).
Mengelola artefak cabang perantara hanya menghadirkan kesulitan jika Anda membaginya di antara repositori.
sumber
topic-0
,topic-1
dantopic-2
cabang. Yang kedua rebase selesai, versi sebelumnya tidak relevan. Jadi semua akan ada adalahtopic@{1}
,topic@{2}
,topic@{yesterday}
,topic@{3.days.ago}
dll untuk menyimpan pantat Anda jika Anda menemukan Anda mengacaukan resolusi konflik di rebase.topic
,. Karena cabang di git hanyalah nama.topic
di GIT, itu selalu salah satu cabang (cabang seperti dalam komit pohon, tidak seperti dalam referensi GIT) saya diberi labeltopic-0
,topic-1
,topic-2
.