Cara Menggunakan WinMerge sebagai alat Diff untuk Mercurial

19

Saya menggunakan sistem kontrol versi terdistribusi Mercurial, dan saya bertanya-tanya bagaimana saya bisa mengkonfigurasinya untuk menggunakan WinMerge alih-alih alat diff internalnya sendiri. Saya sudah mendapatkan WinMerge sebagai alat penggabungan, tetapi saya ingin Mercurial menggunakan WinMerge ketika saya mengetik:

hg diff

Apakah ada cara untuk melakukan itu, atau saya terjebak dengan alat diff internal Mercurial?

quanticle
sumber

Jawaban:

24

Dari FAQ TortoiseHg :

Tambahkan baris ini ke file Mercurial.ini pribadi Anda

[ekstensi]
extdiff =

[extdiff]
cmd.winmerge = C: \ Program Files \ WinMerge \ WinMergeU.exe
opts.winmerge = / e / x / u / wl

Sekarang jalankan alat Pengaturan Global. Pada tab TortoiseHg, Anda akan melihat winmerge tersedia di daftar turun bawah untuk Perintah Visual Diff. Pilih winmerge, terapkan, lalu tutup.

Pendekatan yang sama ini dapat digunakan untuk menambahkan hampir semua alat visual diff, tetapi perlu diketahui bahwa alat diff Anda harus dapat mendukung direktori diffs jika itu akan digunakan oleh TortoiseHg, kecuali jika Anda menggunakan rilis 0.8 atau yang lebih baru.

Joel juga memberikan solusi di sini jika Anda menjalankan Mercurial di bawah Cygwin.

Penjelasan baris perintah WinMerge di sini . Ringkasan:

  • /e memungkinkan Anda untuk menutup WinMerge dengan satu tekan tombol Esc
  • /x menutup WinMerge (setelah menampilkan dialog informasi) ketika Anda memulai perbandingan file yang identik
  • /u mencegah WinMerge dari menambahkan jalur (kiri atau kanan) ke daftar Most Recent Used (MRU)
  • /wl membuka sisi kiri sebagai hanya-baca
cschol
sumber
Saya tidak menggunakan TortoiseHG, saya juga tidak menjalankan Mercurial di bawah Cygwin. Saya menggunakan command line default installer Mercurial dari mercurial.berkwood.com . Solusi Anda berhasil, dalam arti bahwa saya dapat mengetikkan 'hg winmerge <file>' untuk melihat perbedaan antara itu dan versi sebelumnya, tetapi 'hg diff <file>' masih menampilkan diff yang sama (agak jelek) alat. Tetap saja, ini lebih baik daripada tidak sama sekali.
quanticle
Saya pikir jawaban ini mengasumsikan bahwa Anda akan mengedit Mercurial.ini di direktori TortoiseHg (mis. C: \ Program Files \ TortoiseHg). Jika Anda mengedit satu di direktori Mercurial (mis. C: \ Program Files \ Mercurial) maka ini tidak akan berfungsi (setidaknya tidak untuk saya).
Ashley Davis
juga c: \ Program Files (x86) \ WinMerge \ WinMergeU.exe
Avram
Pastikan Anda tidak menaruh tanda kutip di sekitar jalur menuju WinMerge di file konfigurasi, atau itu tidak akan berfungsi.
Drealmer
7

Ini adalah cara kerjanya bagi saya - baris perintah murni lincah selain tortoisehg

Pertama, edit file (di bawah windows 64bit)

C: \ Program Files (x86) \ Mercurial \ Mercurial.ini

[extensions]
; must uncomment this line
extdiff =

[extdiff]
; i'm using winmerge unicode version
cmd.winmerge = C:\Program Files (x86)\WinMerge\WinMergeU.exe
; it explains winmerge command line parameters here: http://winmerge.org/docs/manual/CommandLine.html
opts.winmerge = /r /e /x /u /wl

Kemudian, Anda dapat menggunakan "hg winmerge ..." alih-alih "hg diff ..."

renfeng
sumber
Saya merasa berguna untuk menjalankan winmerge di latar belakang sehingga saya dapat melihat perubahan sambil mengatur pesan komit dan juga menampilkan statistik pada file apa yang telah berubah pada baris perintah. Untuk melakukan hal ini menempatkan file batch di direktori lincah yang berisi mulai / b hg winmerge <NEWLINE> hg diff --stat
danio
3

Yah, jawaban yang diberikan sebelumnya tidak memberi saya efek yang diinginkan. Mereka tidak mengizinkan untuk membuat revisi berbeda dan mengedit di tempat (maksud saya fungsionalitas yang sama yang tersedia untuk TortoiseSVN dari kotak). Untuk melakukan itu, saya telah menambahkan tambahan ke mercurial.ini bagian ini:

[merge-tools]
winmerge.regkey=Software\Thingamahoochie\WinMerge\
winmerge.regname=Executable
winmerge.priority=-10
winmerge.args=/e /x /wl /ub /dl other /dr local $other $local $output
winmerge.fixeol=True
winmerge.checkchanged=True
winmerge.gui=True
winmerge.diffargs=/r /e /x /ub /wl /dl '$plabel1' /dr '$clabel' $parent $child
winmerge.diff3args=
winmerge.dirdiff=True

Ini diambil dari http://blog.stevehorn.cc/blog/easy-mercurial-visual-diff-between-two.html

alehro
sumber