Bagaimana cara saya mengatur dan menggunakan Meld sebagai git difftool saya?
git difftool menampilkan diff menggunakan program diff GUI (mis. Meld) alih-alih menampilkan output diff di terminal Anda.
Meskipun Anda dapat mengatur program GUI pada baris perintah dengan menggunakannya -t <tool> / --tool=<tool>lebih masuk akal untuk mengkonfigurasinya dalam .gitconfigfile Anda . [Catatan: Lihat bagian tentang menghindari kutip dan jalur Windows di bagian bawah.]
# Add the following to your .gitconfig file.
[diff]
tool = meld
[difftool]
prompt = false
[difftool "meld"]
cmd = meld "$LOCAL" "$REMOTE"
[Catatan: Pengaturan ini tidak akan mengubah perilaku git diffyang akan terus berfungsi seperti biasa.]
Anda menggunakan git difftooldengan cara yang persis sama seperti yang Anda gunakan git diff. misalnya
git difftool <COMMIT_HASH> file_name
git difftool <BRANCH_NAME> file_name
git difftool <COMMIT_HASH_1> <COMMIT_HASH_2> file_name
Jika dikonfigurasi dengan benar jendela Meld akan terbuka menampilkan diff menggunakan antarmuka GUI.
Urutan panel jendela MUI GUI dapat dikontrol dengan urutan $LOCALdan $REMOTEmasuk cmd, artinya file mana yang ditampilkan di panel kiri dan yang di panel kanan. Jika Anda menginginkannya sebaliknya, tukar saja seperti ini:
cmd = meld "$REMOTE" "$LOCAL"
Akhirnya prompt = falsesaluran hanya menghentikan git dari meminta Anda, apakah Anda ingin meluncurkan Meld atau tidak, secara default git akan mengeluarkan prompt.
Bagaimana cara saya mengatur dan menggunakan Meld sebagai git mergetool saya?
git mergetool memungkinkan Anda untuk menggunakan program gabungan GUI (mis. Meld) untuk menyelesaikan konflik gabungan yang telah terjadi selama penggabungan.
Seperti halnya difftool, Anda dapat mengatur program GUI pada baris perintah menggunakan -t <tool> / --tool=<tool>tetapi, seperti sebelumnya, lebih masuk akal untuk mengkonfigurasinya dalam .gitconfigfile Anda . [Catatan: Lihat bagian tentang menghindari kutip dan jalur Windows di bagian bawah.]
# Add the following to your .gitconfig file.
[merge]
tool = meld
[mergetool "meld"]
# Choose one of these 2 lines (not both!) explained below.
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
Anda TIDAK gunakan git mergetooluntuk melakukan penggabungan yang sebenarnya. Sebelum menggunakan git mergetoolAnda melakukan penggabungan dengan cara biasa dengan git. misalnya
git checkout master
git merge branch_name
Jika ada konflik git git akan menampilkan sesuatu seperti ini:
$ git merge branch_name
Auto-merging file_name
CONFLICT (content): Merge conflict in file_name
Automatic merge failed; fix conflicts and then commit the result.
Pada titik ini file_nameakan berisi sebagian file yang digabungkan dengan informasi konflik penggabungan (itu file dengan semua >>>>>>>dan <<<<<<<entri di dalamnya).
Mergetool sekarang dapat digunakan untuk menyelesaikan konflik gabungan. Anda memulainya dengan sangat mudah:
git mergetool
Jika dikonfigurasi dengan benar, jendela Meld akan terbuka menampilkan 3 file. Setiap file akan dimuat dalam panel terpisah dari antarmuka GUI-nya.
Dalam .gitconfigentri contoh di atas, 2 baris disarankan sebagai [mergetool "meld"] cmdbaris. Sebenarnya ada segala macam cara bagi pengguna tingkat lanjut untuk mengkonfigurasi cmdjalur, tetapi itu berada di luar cakupan jawaban ini.
Jawaban ini memiliki 2 cmdjalur alternatif yang, di antaranya, akan melayani sebagian besar pengguna, dan akan menjadi titik awal yang baik bagi pengguna tingkat lanjut yang ingin membawa alat ke tingkat kerumitan berikutnya.
Pertama di sini adalah arti parameter:
$LOCAL adalah file di cabang saat ini (mis. master).
$REMOTE adalah file dalam cabang yang sedang digabung (misal branch_name).
$MERGED adalah file yang sebagian digabungkan dengan informasi konflik gabungan di dalamnya.
$BASEadalah leluhur komit bersama $LOCALdan $REMOTE, ini untuk mengatakan file seperti ketika cabang yang berisi $REMOTEawalnya dibuat.
Saya sarankan Anda menggunakan:
[mergetool "meld"]
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
atau:
[mergetool "meld"]
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
# See 'Note On Output File' which explains --output "$MERGED".
Pilihannya adalah apakah akan menggunakan $MERGEDatau $BASEdi antara $LOCALdan $REMOTE.
Either way Meld akan menampilkan 3 panel dengan $LOCALdan $REMOTEdi panel kiri dan kanan dan salah satu $MERGEDatau $BASEdi panel tengah.
Dalam KEDUA kasus panel tengah adalah file yang harus Anda edit untuk menyelesaikan konflik gabungan. Perbedaannya hanya di mana posisi edit yang Anda inginkan mulai disukai; $MERGEDuntuk file yang berisi file yang digabung sebagian dengan informasi konflik gabungan atau $BASEuntuk leluhur komit bersama dari $LOCALdan $REMOTE. [Karena kedua cmdbaris ini berguna, saya menyimpannya di .gitconfigfile saya . Sebagian besar waktu saya menggunakan $MERGEDbaris dan $BASEbaris dikomentari, tetapi komentar keluar dapat ditukar jika saya ingin menggunakan $BASEbaris sebagai gantinya.]
Catatan Pada File Keluaran: Jangan khawatir yang --output "$MERGED"digunakan cmdterlepas dari apakah $MERGEDatau $BASEdigunakan sebelumnya di cmdbaris. The --outputpilihan hanya memberitahu Meld apa git nama file ingin file resolusi konflik yang akan disimpan dalam. Meld akan menghemat suntingan konflik Anda dalam file yang terlepas dari apakah Anda menggunakan $MERGEDatau $BASEsebagai titik awal mengedit Anda.
Setelah mengedit panel tengah untuk menyelesaikan konflik gabungan, cukup simpan file dan tutup jendela Meld. Git akan melakukan pembaruan secara otomatis dan file di cabang saat ini (mis. Master) sekarang akan berisi apa pun yang Anda berakhir di panel tengah.
git akan membuat cadangan file yang digabungkan sebagian dengan informasi konflik gabung di dalamnya dengan menambahkan .orignama file aslinya. mis file_name.orig. Setelah memeriksa apakah Anda senang dengan penggabungan dan menjalankan tes apa pun yang mungkin ingin Anda lakukan, .origfile tersebut dapat dihapus.
Pada titik ini Anda sekarang dapat melakukan komit untuk melakukan perubahan.
Jika, saat Anda mengedit konflik gabungan di Meld, Anda ingin mengabaikan penggunaan Meld, lalu keluar dari Meld tanpa menyimpan file resolusi gabungan di panel tengah. git akan merespons dengan pesan file_name seems unchangeddan kemudian bertanya Was the merge successful? [y/n], jika Anda menjawab nmaka resolusi konflik gabungan akan dibatalkan dan file akan tetap tidak berubah. Perhatikan bahwa jika Anda telah menyimpan file di Meld kapan saja maka Anda tidak akan menerima peringatan dan prompt dari git. [Tentu saja kamu bisa menghapus file dan menggantinya dengan .origfile cadangan yang dibuat git untukmu.]
Jika Anda memiliki lebih dari 1 file dengan konflik gabung maka git akan membuka jendela Meld baru untuk masing-masing, satu demi satu hingga semuanya selesai. Semua itu tidak akan dibuka pada saat yang sama, tetapi ketika Anda selesai mengedit konflik dalam satu, dan menutup Meld, git kemudian akan membuka yang berikutnya, dan seterusnya sampai semua konflik gabungan telah diselesaikan.
Akan masuk akal untuk membuat proyek boneka untuk menguji penggunaan git mergetoolsebelum menggunakannya pada proyek langsung . Pastikan untuk menggunakan nama file yang mengandung spasi dalam pengujian Anda, jika OS Anda mengharuskan Anda untuk menghindari tanda kutip di cmdbaris, lihat di bawah.
Melarikan diri dari karakter kutipan
Beberapa sistem operasi mungkin perlu memiliki tanda kutip dalam cmdmelarikan diri. Pengguna yang kurang berpengalaman harus ingat bahwa baris perintah config harus diuji dengan nama file yang menyertakan spasi, dan jika cmdbaris tidak berfungsi dengan nama file yang menyertakan spasi, maka cobalah menghindari tanda kutip. misalnya
cmd = meld \"$LOCAL\" \"$REMOTE\"
Dalam beberapa kasus, pelarian yang lebih kompleks mungkin diperlukan. Tautan jalur Windows 1 di bawah ini berisi contoh tiga-pelarian setiap kutipan. Ini membosankan tetapi terkadang perlu. misalnya
cmd = meld \\\"$LOCAL\\\" \\\"$REMOTE\\\"
Jalur Windows
Pengguna Windows mungkin perlu konfigurasi tambahan yang ditambahkan ke cmdjalur Meld . Mereka mungkin perlu menggunakan path lengkap ke meldc, yang dirancang untuk dipanggil pada Windows dari baris perintah, atau mereka mungkin perlu atau ingin menggunakan pembungkus. Mereka harus membaca halaman StackOverflow yang ditautkan di bawah ini tentang pengaturan cmdgaris Meld yang tepat untuk Windows. Karena saya adalah pengguna Linux, saya tidak dapat menguji berbagai cmdjalur Windows dan tidak memiliki informasi lebih lanjut tentang masalah ini selain untuk merekomendasikan menggunakan contoh saya dengan penambahan path lengkap ke Meld atau meldc, atau menambahkan folder program Meld ke Anda path.
Mengabaikan spasi kosong dengan Meld
Meld memiliki sejumlah preferensi yang dapat dikonfigurasi dalam GUI.
Di Text Filterstab preferensi ada beberapa filter berguna untuk mengabaikan hal-hal seperti komentar saat melakukan diff. Meskipun ada filter untuk diabaikan All whitespacedan Leading whitespace, tidak ada Trailing whitespacefilter abaikan (ini telah disarankan sebagai tambahan di milis Meld tetapi tidak tersedia dalam versi saya).
Mengabaikan trailing whitespace seringkali sangat berguna, terutama saat berkolaborasi, dan dapat ditambahkan secara manual dengan mudah dengan ekspresi reguler sederhana di Text Filterstab Preferensi Meld .
# Use either of these regexes depending on how comprehensive you want it to be.
[ \t]*$
[ \t\r\f\v]*$
Saya harap ini membantu semua orang.