Penggabungan Git saya baru-baru ini telah menghasilkan sejumlah besar konflik. Pendekatan saya saat ini adalah untuk mencari kemunculan berikutnya dari '<<<' dan kemudian melakukan penggabungan dengan pengeditan teks standar.
Pertanyaan : adakah cara Emacs dapat mendukung penggabungan dengan menggunakan informasi yang tersedia di Git tentang versi saya, versi mereka, dan versi dasar file?
Sunting: Pertanyaan ini memiliki cakupan yang berbeda dari pertanyaan terkait ini , karena tidak terbatas pada pemanggilan ediff.
e
pada file yang ditampilkan sebagai bertentangan. Magit akan memulaiediff
untuk melakukan penggabungan dan meminta Anda setelah itu untuk mengonfirmasi perubahan Anda, lalu Anda bisa membuat file gabungan.smerge
danvc-resolve-conflict
, juga satu diediff
) dan telah ada lebih lama. Saya setuju bahwa utas pertama dapat menggunakan judul yang lebih baik.Jawaban:
Anda mungkin ingin mencoba
smerge-mode
hanya membuka file yang konflik dan lakukan M-xsmerge-mode
RET. Ini akan menyoroti semua wilayah yang konflik. Ia juga menambahkan ikatan kunci untuk menyelesaikan konflik dengan mudah, berkonsultasi dengan dokumentasinya C-hfsmerge-mode
RETuntuk mengetahuinya.Awalan default
Saya menemukan awalan default untuk
smerge-mode
C-c^rumit jadi saya telah mengubahnya menjadi C-cvIkatan kunci penting
Bagi saya ikatan yang paling penting adalah:
smerge-next
terikat untuk smerge-command-prefixnpindah ke konflik berikutnya.smerge-previous
terikat untuk smerge-command-prefixppindah ke konflik sebelumnya.smerge-keep-current
terikat untuk smerge-command-prefixRETmenjaga versi kursor aktif.smerge-keep-mine
terikat untuk smerge-command-prefixmmenyimpan perubahan Anda.smerge-keep-other
terikat untuk smerge-command-prefixomenyimpan perubahan lainnya.smerge-ediff
terikat untuk smerge-command-prefixEmemulai sesi tepi untuk menggabungkan konflik. Ini sama denganvc-resolve-conflicts
(terima kasih @phils dan @Malabarba untuk menunjukkan ini).Mengaktifkan mode smerge secara otomatis
UPDATE: Berikut ini hanya relevan pada versi Emacs sebelumnya
25.1
, berikut ini dapat menyebabkan masalah pada versi selanjutnya, lihat https://github.com/magit/magit/issues/3897Selain itu, Anda mungkin tertarik untuk mengaktifkan secara otomatis
smerge-mode
saat mengunjungi file / buffer dengan penanda konflik, Anda dapat menggunakan sesuatu seperti berikut untuk mencapai iniPerhatikan bahwa saya menggunakan
buffer-list-update-hook
dan bukanfind-file-hook
karena sebagian besar waktu saya mendapatkan konflik dalam buffer yang sudah terbuka di emacs dalam halfind-file-hook
ini tidak ada gunanya.Periksa juga metode lain yang disebutkan dalam jawaban ini
sumber
smerge-ediff
. (2) Versi Emacs apa yang Anda pakai? Pada cabang master emacs saat ini, smerge menyala secara otomatis. (3) Mengapa Anda menggunakanbuffer-list-update-hook
bukanfind-file-hook
?smerge-ediff
danvc-resolve-conflicts
adalah hal yang sama.smerge-mode
keybindings didokumentasikan, dokumentasinya. Mungkin saya bisa mengutip manual di sini untuk kelengkapan. Terima kasih untuk umpan baliknya. 2) Saya menggunakan v24.5, meskipun terkadang saya mencoba cabang master, saya tidak ingat smerge dibalik secara otomatis (apakah ini perubahan terbaru?). 3) Itu karena sebagian besar kali saya mendapatkan konflik di buffer sudah terbuka, dalam hal ini saya akan perlu secara eksplisit mengaktifkansmerge-mode
smerge-mode
mengaktifkannya sepanjang waktu? Mungkin itu tidak berbuat banyak sampai dipanggil.Sunting: karena jawaban ini mendapat lebih banyak suara daripada yang saya harapkan, saya sedikit mengembangkannya.
Untuk melengkapi jawaban oleh @IqbalAnsari, Anda juga dapat menggunakan
vc-resolve-conflicts
(seperti yang disebutkan oleh orang lain, ini adalah alias untuksmerge-ediff
). Ini akan memulaiediff
antarmuka. Di sebelah kiri akan menjadi orang tua gabungan pertama, dan orang tua gabungan kedua di sebelah kanan. Mereka diberi label pada modeline denganMINE
danOTHER
masing - masing. Buffer gabungan ditampilkan di bawah (lihat tangkapan layar).Pengikat kunci
Anda juga dapat menavigasi ke buffer yang digabungkan dengan
other-window
dan mengedit tangan jika menyelesaikan konflik lebih rumit daripada menerima versi. Setelah selesai, Anda dapat menyimpan buffer dan keluar dari Emacs seperti biasa. Untuk bantuan lebih lanjut, cukup gunakan ?selamaediff
sesi, ada sejumlah besar perintah yang sangat berguna di sana. Saya masih tidak tahu apa yang dilakukan setengah dari mereka!sumber
C-x v <
, meskipun dalam praktiknya saya lebih cenderung memohon dengan Magit (sesuai komentar wvxvw).vc-resolve-conflict
adalah alias untuksmerge-ediff
, yang seperti namanya memulai sesi Ediff, bukan sesi Emerge. Omong-omong, tajuk pustaka pengaruhediff.el
mengakuiemerge.el
dan kemudian melanjutkan dengan mengatakan "Versi sekarang dari Ediff menggantikan Emerge. Ini menyediakan antarmuka pengguna yang unggul dan memiliki banyak fitur utama yang tidak ditemukan di Emerge. Secara khusus, ia dapat melakukan penambalan, dan Operasi perbandingan 2-arah dan 3-arah, penggabungan, dan operasi direktori. "magit-ediff-resolve
(Em
ataue
pada file dengan konflik) menggunakansmerge-ediff
internal. Namun itu mengesampingkanediff-quit-hook
untuk memberikan pengalaman penyelesaian sesi yang sedikit lebih baik. Alih-alih memberi tahu Anda bahwa Anda dapat menyimpan "buffer" (ada beberapa buffer), ia meminta Anda apakah Anda ingin menyimpan buffer (sambil menunjukkan namanya).Jika Anda menggunakan Spacemacs, saya sarankan untuk mengaktifkan "smerge-transient-mode", yang memunculkan menu hydra dengan semua perintah smerge yang mungkin.
Untuk melakukan itu, cukup panggil Mx
spacemacs/smerge-transient-state/body
, yang ditentukan per defaultSPC-g-r
.Berikut screenshotnya:
Mengedit file Anda harus intuitif:
n
untuk pergi ke cowok berikutnya.sumber