Sejak Git1.6.3, Anda dapat menggunakan skrip git difftool : lihat jawaban saya di bawah ini .
Mungkin artikel ini akan membantu Anda. Inilah bagian-bagian terbaik:
Ada dua cara berbeda untuk menentukan alat diff eksternal.
Yang pertama adalah metode yang Anda gunakan, dengan mengatur variabel GIT_EXTERNAL_DIFF. Namun, variabel tersebut seharusnya menunjuk ke jalur penuh dari executable. Selain itu, executable yang ditentukan oleh GIT_EXTERNAL_DIFF akan dipanggil dengan set tetap 7 argumen:
path old-file old-hex old-mode new-file new-hex new-mode
Karena sebagian besar alat diff akan membutuhkan urutan yang berbeda (dan hanya beberapa) dari argumen, Anda kemungkinan besar harus menentukan skrip pembungkus, yang pada gilirannya memanggil alat diff nyata.
Metode kedua, yang saya suka, adalah mengkonfigurasi alat diff eksternal melalui "git config" . Inilah yang saya lakukan:
1) Buat skrip pembungkus "git-diff-wrapper.sh" yang berisi sesuatu seperti
-->8-(snip)--
#!/bin/sh
# diff is called by git with 7 parameters:
# path old-file old-hex old-mode new-file new-hex new-mode
"<path_to_diff_executable>" "$2" "$5" | cat
--8<-(snap)--
Seperti yang Anda lihat, hanya argumen kedua ("file lama") dan kelima ("file baru") yang akan diteruskan ke alat diff.
2) Ketik
$ git config --global diff.external <path_to_wrapper_script>
di prompt perintah, ganti dengan path ke "git-diff-wrapper.sh", jadi ~ / .gitconfig Anda berisi
-->8-(snip)--
[diff]
external = <path_to_wrapper_script>
--8<-(snap)--
Pastikan untuk menggunakan sintaks yang benar untuk menentukan jalur ke skrip wrapper dan alat diff, yaitu menggunakan maju memangkas bukannya backslash. Dalam kasus saya, saya punya
[diff]
external = \"c:/Documents and Settings/sschuber/git-diff-wrapper.sh\"
di .gitconfig dan
"d:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat
dalam skrip pembungkus. Pikirkan si "kucing" tertinggal!
(Saya kira ' | cat
' diperlukan hanya untuk beberapa program yang mungkin tidak mengembalikan status pengembalian yang tepat atau konsisten. Anda mungkin ingin mencoba tanpa cat tambahan jika alat berbeda Anda memiliki status pengembalian eksplisit)
( Diomidis Spinellis menambahkan dalam komentar :
The cat
perintah diperlukan, karena diff(1)
, dengan keluar default dengan kode kesalahan jika file berbeda.
Git mengharapkan program diff eksternal untuk keluar dengan kode kesalahan hanya jika kesalahan aktual terjadi, misalnya jika kehabisan memori.
Dengan memipiskan output git
ke cat
kode kesalahan bukan nol, ditutup.
Lebih efisien, program hanya bisa berjalan exit
dengan argumen 0.)
Itu (artikel yang dikutip di atas) adalah teori untuk alat eksternal yang didefinisikan melalui file config (bukan melalui variabel lingkungan).
Dalam praktiknya (masih untuk definisi file alat eksternal), Anda dapat merujuk ke: