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 .gitconfig
file 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 diff
yang akan terus berfungsi seperti biasa.]
Anda menggunakan git difftool
dengan 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 $LOCAL
dan $REMOTE
masuk 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 = false
saluran 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 .gitconfig
file 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 mergetool
untuk melakukan penggabungan yang sebenarnya. Sebelum menggunakan git mergetool
Anda 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_name
akan 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 .gitconfig
entri contoh di atas, 2 baris disarankan sebagai [mergetool "meld"]
cmd
baris. Sebenarnya ada segala macam cara bagi pengguna tingkat lanjut untuk mengkonfigurasi cmd
jalur, tetapi itu berada di luar cakupan jawaban ini.
Jawaban ini memiliki 2 cmd
jalur 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.
$BASE
adalah leluhur komit bersama $LOCAL
dan $REMOTE
, ini untuk mengatakan file seperti ketika cabang yang berisi $REMOTE
awalnya 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 $MERGED
atau $BASE
di antara $LOCAL
dan $REMOTE
.
Either way Meld akan menampilkan 3 panel dengan $LOCAL
dan $REMOTE
di panel kiri dan kanan dan salah satu $MERGED
atau $BASE
di 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; $MERGED
untuk file yang berisi file yang digabung sebagian dengan informasi konflik gabungan atau $BASE
untuk leluhur komit bersama dari $LOCAL
dan $REMOTE
. [Karena kedua cmd
baris ini berguna, saya menyimpannya di .gitconfig
file saya . Sebagian besar waktu saya menggunakan $MERGED
baris dan $BASE
baris dikomentari, tetapi komentar keluar dapat ditukar jika saya ingin menggunakan $BASE
baris sebagai gantinya.]
Catatan Pada File Keluaran: Jangan khawatir yang --output "$MERGED"
digunakan cmd
terlepas dari apakah $MERGED
atau $BASE
digunakan sebelumnya di cmd
baris. The --output
pilihan 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 $MERGED
atau $BASE
sebagai 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 .orig
nama file aslinya. mis file_name.orig
. Setelah memeriksa apakah Anda senang dengan penggabungan dan menjalankan tes apa pun yang mungkin ingin Anda lakukan, .orig
file 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 unchanged
dan kemudian bertanya Was the merge successful? [y/n]
, jika Anda menjawab n
maka 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 .orig
file 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 mergetool
sebelum 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 cmd
baris, lihat di bawah.
Melarikan diri dari karakter kutipan
Beberapa sistem operasi mungkin perlu memiliki tanda kutip dalam cmd
melarikan diri. Pengguna yang kurang berpengalaman harus ingat bahwa baris perintah config harus diuji dengan nama file yang menyertakan spasi, dan jika cmd
baris 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 cmd
jalur 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 cmd
garis Meld yang tepat untuk Windows. Karena saya adalah pengguna Linux, saya tidak dapat menguji berbagai cmd
jalur 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 Filters
tab preferensi ada beberapa filter berguna untuk mengabaikan hal-hal seperti komentar saat melakukan diff. Meskipun ada filter untuk diabaikan All whitespace
dan Leading whitespace
, tidak ada Trailing whitespace
filter 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 Filters
tab 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.