Git Diff dengan Beyond Compare

111

Saya telah berhasil mendapatkan git untuk memulai Beyond Compare 3 sebagai alat diff, namun, ketika saya melakukan diff, file yang saya bandingkan tidak sedang dimuat. Hanya versi terbaru dari file yang dimuat dan tidak ada yang lain, jadi tidak ada apa pun di panel kanan Beyond Compare.

Saya menjalankan git 1.6.3.1 dengan Cygwin dengan Beyond Compare 3. Saya telah menyiapkan luar biasa seperti yang mereka sarankan di bagian dukungan situs web mereka dengan skrip seperti:

#!/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_bc3_executable" "$2" "$5" | cat

Apakah ada orang lain yang mengalami masalah ini dan mengetahui solusi untuk ini?

Sunting:
Saya telah mengikuti saran oleh VonC tetapi saya masih mengalami masalah yang sama persis seperti sebelumnya. Saya agak baru mengenal Git jadi mungkin saya tidak menggunakan diff dengan benar.

Misalnya, saya mencoba melihat diff pada file dengan perintah seperti:
git diff main.css

Beyond Compare kemudian akan terbuka dan hanya menampilkan main.css saya saat ini di panel kiri, tidak ada apa pun di panel kanan. Saya ingin melihat main.css saya saat ini di panel kiri dibandingkan dengan HEAD, pada dasarnya apa yang terakhir saya lakukan.

Git-diff-wrapper.sh saya terlihat seperti ini:

#!/bin/sh  
# diff is called by git with 7 parameters:  
# path old-file old-hex old-mode new-file new-hex new-mode  
"c:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat

Konfigurasi git saya terlihat seperti ini untuk Diff:

[diff]  
external = c:/cygwin/bin/git-diff-wrapper.sh
Avanst
sumber

Jawaban:

140

Saya tidak menggunakan file .sh pembungkus ekstra. Lingkungan saya adalah Windows XP, git 1.7.1 di cygwin, dan Beyond Compare 3. Berikut ini adalah file .git / config saya .

[diff]
    tool = bc3
[difftool]
    prompt = false
[difftool "bc3"]
    #use cygpath to transform cygwin path $LOCAL (something like /tmp/U5VvP1_abc) to windows path, because bc3 is a windows software
    cmd = \"c:/program files/beyond compare 3/bcomp.exe\" "$(cygpath -w $LOCAL)" "$REMOTE"
[merge]
    tool = bc3
[mergetool]
    prompt = false
[mergetool "bc3"]
    #trustExitCode = true
    cmd = \"c:/program files/beyond compare 3/bcomp.exe\" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"

Kemudian, saya menggunakan $ git difftool untuk membandingkan dan $ git mergetool untuk menggabungkan.

Tentang trustExitCode : Untuk perintah penggabungan kustom, tentukan apakah kode keluar dari perintah gabungan dapat digunakan untuk menentukan apakah penggabungan berhasil. Jika ini tidak disetel ke true, maka stempel waktu file target penggabungan akan diperiksa dan penggabungan dianggap berhasil jika file telah diperbarui, jika tidak, pengguna akan diminta untuk menunjukkan keberhasilan penggabungan.

yehnan
sumber
12
Saya menjalankan di windows 7 dengan mingw git shell. Saya harus menggunakan jalur gaya linux /c/program filessebagai ganti c:/program files. Juga saya menghapus "$(cygpath -w $LOCAL)"dan baru saja digunakan "$LOCAL". Sepertinya ini akan berhasil.
Landon Poch
5
Seperti yang disebutkan @pClass di bawah ini, "bc3" sekarang menjadi alat internal dalam versi git yang lebih baru. Anda harus menggunakan nama yang unik, seperti "Beyondcompare3"
Scott Wegner
4
GitHub Shell (pada Windows 8) memberi tahu saya bcompare: command not found- sampai saya mengubah NAMA alat dari yang bc3lain (seperti abc3). Saya rasa beberapa pengaturan Github internal ikut campur. Juga, saya melepas "$(cygpath -w $LOCAL)"bagian itu dan menggantinya dengan "$LOCAL". Sekarang berfungsi dengan baik. Terima kasih!
Felix Alcala
1
Ini buggy bagi saya ketika melihat perbedaan antara dua komit. Ini solusi yang lebih baik: blog.kifaru.be/2011/07/…
balajimc55
2
Saya juga menemukan artikel ini: scootersoftware.com/support.php?zz=kb_vcs
Guy Avraham
28

Terima kasih kepada @dahlbyk , penulis Posh-Git , karena telah memposting konfigurasinya sebagai intinya . Ini membantu saya menyelesaikan masalah konfigurasi saya.

[diff]
    tool = bc3
[difftool]
    prompt = false
[difftool "bc3"]
    cmd = \"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = bc3
[mergetool]
    prompt = false
    keepBackup = false
[mergetool "bc3"]
    cmd = \"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"
    trustExitCode = true
[alias]
    dt = difftool
    mt = mergetool
Nick Josevski
sumber
Saya mencoba jawaban ini dan tidak dapat membedakan, mungkin saya salah melakukannya.
Epu
1
@Epu Apakah Anda mengonfirmasi bahwa jalur Anda sama di komputer Anda? Dan itu Beyond Compare 3, bukan v2 yang lebih lama atau semacamnya?
Nick Josevski
Saya mengonfirmasi bahwa jalurnya sama, dan itu adalah bc3.
Epu
1
Lucunya, 'git difftool file.txt' dan 'git mergetool file.txt' berfungsi dengan baik, jadi saya beralih ke keduanya. Tetapi 'git diff file.txt' sekarang rusak (sebelum digunakan untuk menunjukkan kepada saya diff konsol default). Sekarang saya memberi saya 'kesalahan: tidak dapat menelurkan bc3: Tidak ada file atau direktori seperti itu \ nexternal diff meninggal, berhenti di file.txt'
Epu
Kalau-kalau ada yang menghadapi masalah yang sama dengan saya (tidak dikenali .gitconfig setelah mengeditnya) saya harus menambahkan jalur sebagai berikut:cmd = 'C:\\Program Files\\Beyond Compare 4\\BCompare.exe' \"$LOCAL\" \"$REMOTE\"
sebagomez
20

Jalankan perintah ini untuk Beyond Compare 2:

git config --global diff.tool bc2
git config --global difftool.bc2.cmd "\"c:/program files (x86)/beyond compare 2/bc2.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

Jalankan perintah ini untuk Beyond Compare 3:

git config --global diff.tool bc3
git config --global difftool.bc3.cmd "\"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

Kemudian gunakan git difftool

pengguna
sumber
1
Apakah Beyond Compare 4 didukung?
Danijel
2
@Danijel dokumen resmi yang dinyatakan dalam jawaban @Daniel Magnussons menyatakanNote: Use bc3 on the command line for both BC version 3 and 4
BNT
9

Dokumentasi resmi berhasil untuk saya

Daniel Magnusson
sumber
Terima kasih kawan karena telah mengarahkan saya ke dokumen resmi !!! setidaknya itu menentukan konfigurasi berbeda yang diperlukan untuk GIT vs GitHub
shridutt kothari
6

Ini file konfigurasi saya. Perlu beberapa kali gulat tetapi sekarang berhasil. Saya menggunakan windows server, msysgit dan seterusnya 3 (tampaknya versi x86). Anda akan melihat bahwa saya tidak perlu menentukan argumen apa pun, dan saya menggunakan "path" daripada "cmd".

[user]
        name = PeteW
        email = [email protected]
[diff]
        tool = bc3
[difftool]
        prompt = false
[difftool "bc3"]
        path = /c/Program Files (x86)/Beyond Compare 3/BComp.exe
[merge]
        tool = bc3
[mergetool]
        prompt = false
        keepBackup = false
[mergetool "bc3"]
        path = /c/Program Files (x86)/Beyond Compare 3/BComp.exe
        trustExitCode = true
[alias]
        dt = difftool
        mt = mergetool
nachonachoman.dll
sumber
4

The luar halaman dukungan Bandingkan adalah sedikit singkat.

Periksa diff.external jawaban saya untuk lebih lanjut (mengenai sintaks yang tepat)

Ekstrak:

$ git config --global diff.external <path_to_wrapper_script>

pada command prompt, menggantikan dengan path ke " git-diff-wrapper.sh", sehingga Anda ~/.gitconfigmengandung

-->8-(snip)--
[diff]
    external = <path_to_wrapper_script>
--8<-(snap)--

Pastikan untuk menggunakan sintaks yang benar untuk menentukan jalur ke skrip pembungkus dan alat diff, yaitu gunakan garis miring daripada garis miring terbalik. Dalam kasus saya, saya punya

[diff]
    external = c:/Documents and Settings/sschuber/git-diff-wrapper.sh

dalam .gitconfigdan

"d:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat

dalam skrip pembungkus.


Catatan: Anda juga bisa menggunakan git difftool.

VonC
sumber
3

Harap perhatikan Anda membuat jalur yang salah dari $ 2. karena Anda menggunakan Cygwin tetapi BC3 tidak, jadi Anda harus menentukan path lengkapnya. seperti "d: / cygwin $ 2"

Silakan lihat git-diff-wrapper.sh saya di sini:

$ cat ~/git-diff-wrapper.sh
#!/bin/sh
echo $2
echo $5
/cygdrive/c/Program\ Files\ \(x86\)/Beyond\ Compare\ 3/BCompare.exe "d:/programs/cygwin$2" "$5"

Semoga berhasil.

z33
sumber
3
Anda benar-benar harus menggunakan cygpath untuk ini; mis bcompare.exe $(cygpath -w $2). Bersulang.
Dan Moulding
3

Jika Anda menjalankan windows 7 (profesional) dan Git untuk Windows (v 2.15 atau lebih tinggi), Anda cukup menjalankan perintah di bawah ini untuk mencari tahu apa saja alat diff yang didukung oleh Git untuk Windows Anda

git difftool --tool-help

Anda akan melihat keluaran yang serupa dengan ini

git difftool --tool = 'dapat disetel ke salah satu dari berikut ini:
vimdiff vimdiff2 vimdiff3

itu berarti git Anda tidak mendukung (tidak dapat menemukan) luar biasa sebagai difftool sekarang.

Agar Git dapat menemukan luar biasa sebagai difftool yang valid, Anda harus memiliki direktori instalasi Beyond Compare di variabel lingkungan jalur sistem Anda . Anda dapat memeriksanya dengan menjalankan bcompare dari shell (cmd, git bash atau powershell. Saya menggunakan Git Bash). Jika Beyond Compare tidak dapat diluncurkan, tambahkan direktori instalasinya (dalam kasus saya, C: \ Program Files \ Beyond Compare 4) ke variabel jalur sistem Anda. Setelah ini, restart shell Anda. Git akan menampilkan Beyond Compare sebagai opsi difftool yang mungkin. Anda dapat menggunakan salah satu dari perintah di bawah ini untuk meluncurkan luar biasa sebagai difftool (misalnya, untuk membandingkan file lokal apa pun dengan beberapa cabang lain)

git difftool -t bc branchnametocomparewith -- path-to-file
or 
git difftool --tool=bc branchnametocomparewith -- path-to-file

Anda dapat mengkonfigurasi luar biasa sebagai difftool default menggunakan perintah di bawah ini

   git config --global diff.tool bc

ps perlu diingat bahwa bc dalam perintah di atas dapat berupa bc3 atau bc berdasarkan apa yang Git dapat temukan dari variabel sistem jalur Anda.

sarabdeep singh
sumber
2

Pembaruan untuk BC4 64bit: Ini berfungsi untuk Git untuk Windows v.2.16.2 dan Beyond Bandingkan 4 - v.4.2.4 (Edisi 64bit)

Saya secara manual mengedit file .gitconfig yang terletak di root pengguna saya "C: \ Users \ MyUserName" dan mengganti tag diff / difftool dan merge / mergetool dengan

[diff]
  tool = bc
[difftool "bc"]
  path = 'C:/Program Files/Beyond Compare 4/BComp.exe'
[difftool "bc"]
  cmd = \"C:/Program Files/Beyond Compare 4/BComp.exe\" \"$LOCAL\" \"$REMOTE\"
[difftool]
  prompt = false
[merge]
  tool = bc
[mergetool "bc"]
  path = 'C:/Program Files/Beyond Compare 4/BComp.exe'
[mergetool "bc"]
  cmd = \"C:/Program Files/Beyond Compare 4/BComp.exe\" \"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"
mitaka
sumber
1

Perbedaannya adalah pada exe yang dipanggil: atur untuk memanggil bcomp.exe dan itu akan berfungsi dengan baik. Konfigurasikan lingkungan Anda untuk memanggil bcompare.exe dan Anda akan berakhir dengan sisi perbandingan yang diambil dari sistem revisi Anda menjadi kosong.

rrozema
sumber
1

Jalankan perintah berikut untuk Beyond Compare 3 (jika jalur BCompare.exe berbeda di sistem Anda, harap ganti sesuai dengan milik Anda):

git config --global diff.tool bc3
git config --global difftool.bc3.cmd "\"c:/program files (x86)/beyond compare 3/BCompare.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

Kemudian gunakan git difftool

Jerry Z.
sumber
1

Windows 10, Git v2.13.2

.Gitconfig saya. Ingatlah untuk menambahkan karakter escape untuk '\' dan '"'.

[diff]
    tool = bc4
[difftool]
    prompt = false
[difftool "bc4"]
    cmd = \"C:\\Program Files\\Beyond Compare 4\\BCompare.exe\" \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = bc4
[mergetool "bc4"]
    path = C:\\Program Files\\Beyond Compare 4\\BCompare.exe

Anda dapat merujuk pengaturan luar biasa sebagai alat bantu untuk menggunakan perintah git untuk mengkonfigurasinya .

zhangyu12
sumber
Hai, saya memiliki skrip yang serupa dan gagal sampai saya beralih ke C: \\ Program Files \\ Beyond Compare 4 \\ BComp.exe. Dengan BCompare.exe, file sementara dihapus sebelum dapat dibandingkan, jadi saya hanya melihat file terbaru, tidak ada versi check-in.
gabriel
0

Untuk alasan apa pun, bagi saya, file tmp yang dibuat oleh git diff telah dihapus sebelum dibuka tanpa bisa dibandingkan. Saya harus menyalinnya ke lokasi lain terlebih dahulu.

cp -r $2 "/cygdrive/c/temp$2"
cygstart /cygdrive/c/Program\ Files\ \(x86\)/Beyond\ Compare\ 3/BCompare.exe "C:/temp$2" "$5"
Dustin
sumber
0

Untuk MAC setelah melakukan banyak penelitian, itu berhasil untuk saya ..! 1. Instal yang luar biasa dan ini akan dipasang di lokasi di bawah ini

/ Applications / Beyond \ Compare.app/Contents/MacOS/bcomp

Ikuti langkah-langkah berikut untuk menjadikan bc sebagai alat diff / merge di git http://www.scootersoftware.com/support.php?zz=kb_mac

Sreedhar GS
sumber
0

Untuk git versi 2.15.1.windows.2 dengan BC2.exe.

Konfigurasi di bawah ini akhirnya berfungsi di mesin saya.

[difftool "bc2"] cmd = \"c:/program files/beyond compare 2/bc2.exe\" ${LOCAL} ${REMOTE}

YChi Lu
sumber