Ada beberapa pertanyaan baru-baru ini tentang melewatkan perubahan saat mempertahankan cabang rilis di Mercurial. Sebagai contoh:
- Mercurial: Perubahan spesifik cabang terus muncul setelah penggabungan dummy
- Mengapa backout Mercurial di satu cabang mempengaruhi cabang lainnya?
Sejak diperkenalkan pada 2.0, saya bertanya-tanya tentang penggunaan graft
untuk menghindari masalah ini. Diberikan pohon revisi seperti ini:
A---B---C---D---E---F---G---H---I---J
Misalkan kita perlu membuat cabang rilis yang melewatkan perubahan Evil E
.
hg update -r D
hg graft "F::J"
memberi kami:
A---B---C---D---E---F---G---H---I---J
\
--F'--G'--H'--I'--J'
- Q1: Apa yang baru saja terjadi di sini? Saya dapat memahami bahwa
transplant
akan menghasilkan tambalan dariF::J
, dan kemudian menerapkannyaD
, tetapigraft
dikatakan menggunakan penggabungan 3 arah daripada tambalan. Jadi ....... bagaimana cara kerjanya? Mengapa lebih baik?
Katakanlah saya sekarang memperbaiki E
, dan menggabungkannya ke cabang rilis saya.
--E2-----------------
/ \
A---B---C---D---E---F---G---H---I---J---M1
\ \
--F'--G'--H'--I'--J'---------M2--
M1 adalah gabungan lurus; tidak ada yang istimewa di sana. M2 menggabungkan cabang yang memiliki perubahan "yang sama" (atau setidaknya setara).
- T2: Apakah penggabungan ini hanya penggabungan 3 arah biasa menggunakan
D
,J'
danM1
? - T3: Apakah mercurial telah menyimpan / menggunakan informasi tambahan tentang operasi cangkok untuk membantunya melakukan penggabungan?
Dan akhirnya...
- T4: Apa masalah potensial dengan aliran seperti ini?
Q1: Ini membantu ketika ada konflik. Anda dapat menggunakan alat gabungan biasa (bagi saya ini adalah penanda konflik sebaris, yang saya edit dengan mode smerge Emacs).
T2: Ini penggabungan normal.
Q3: Tidak.
T4: Menurut saya jelek memiliki dua cabang yang hampir identik.
sumber