Beyond CompareでのGit Diff


111

Beyond Compare 3を差分ツールとしてgitを起動することに成功しましたが、diffを実行すると、比較対象のファイルがロードされません。ファイルの最新バージョンのみが読み込まれ、それ以外は読み込まれないため、Beyond Compareの右側のペインには何も表示されません。

Beyond Compare 3を使用してCygwinでgit 1.6.3.1を実行しています。次のようなスクリプトを使用して、Webサイトのサポート部分で提案されているように、Compareを超えて設定しました。

#!/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

他の誰かがこの問題に遭遇し、これの解決策を知っていますか?

編集:
私はVonCの提案に従いましたが、以前とまったく同じ問題がまだあります。私はGitを初めて使用するので、おそらくdiffを正しく使用していません。

たとえば、次のようなコマンドを使用してファイルの差分を表示しようとしています:
git diff main.css

Beyond Compareが開き、左側のペインに現在のmain.cssのみが表示されます。右側のペインには何も表示されません。HEADと比較して、左側のペインに現在のmain.cssを確認してください。基本的には、最後にコミットしたものです。

私のgit-diff-wrapper.shは次のようになります:

#!/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

私のgit構成は、Diffの場合は次のようになります。

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

回答:


140

追加のラッパー.shファイルは使用しません。私の環境はWindows XP、cygwin上のgit 1.7.1、Beyond Compare 3です。以下は.git / configファイルです。

[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"

次に、$ git difftoolを使用して比較し、$ git mergetoolを使用してマージします。

trustExitCodeについて:カスタムのマージコマンドの場合、マージコマンドの終了コードを使用して、マージが成功したかどうかを判断できるかどうかを指定します。これがtrueに設定されていない場合、マージターゲットファイルのタイムスタンプがチェックされ、ファイルが更新されている場合、マージは成功したと見なされます。それ以外の場合、ユーザーはマージの成功を示すプロンプトが表示されます。


12
Windows 7でmingw git shellを実行しています。の/c/program files代わりにLinuxスタイルのパスを使用する必要がありましたc:/program files。また、外して"$(cygpath -w $LOCAL)"そのまま使用しました"$LOCAL"。それはトリックをするようでした。
Landon Poch 2012

5
@pClassが以下で言及するように、「bc3」は新しいバージョンのgitの内部ツールになりました。「beyondcompare3」などの一意の名前を使用する必要があります
Scott Wegner

4
GitHub Shell(Windows 8上)は私に言ったbcompare: command not found-私がツールの名前をbc3他のもの(のようなabc3)に変更するまで。内部のGithub設定の一部が干渉したと思います。また、"$(cygpath -w $LOCAL)"パーツを外してに交換しました"$LOCAL"。これで問題なく動作します。ありがとう!
Felix Alcala

1
2つのコミット間の差分を見ると、これはバグの多いものでした。ここではよりよい解決策は以下のとおりです。blog.kifaru.be/2011/07/...
balajimc55

2
私もこの記事を見つけました: scootersoftware.com/support.php
zz=kb_vcs

28

Posh-Gitの作者である彼の設定を要旨として投稿してくれた@dahlbykに感謝します。構成の問題を解決するのに役立ちました。

[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

私はこの答えを試しましたが、diffできませんでした。おそらく間違っているのでしょう。
Epu

1
@Epuマシン上でパスが同じであることを確認しましたか?そしてそれはBeyond Compare 3であり、古いv2か何かではありませんか?
Nick Josevski、2012年

パスが同じで、bc3であることを確認しました。
Epu

1
面白いことに、「git difftool file.txt」と「git mergetool file.txt」は問題なく動作しているので、これらに切り替えました。ただし、「git diff file.txt」は無効化されています(デフォルトのコンソール差分を表示する前に使用されていました)。これで「エラー:bc3を生成できません:そのようなファイルまたはディレクトリはありません\ nexternal diffが停止し、file.txtで停止します」
Epu

:念のために誰もが次のように私はパスを追加する必要がありました(それを編集した後に認識されていない.gitconfig)私は同じ問題に直面しているcmd = 'C:\\Program Files\\Beyond Compare 4\\BCompare.exe' \"$LOCAL\" \"$REMOTE\"
sebagomez

20

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

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

次に使用します git difftool


1
Beyond Compare 4はサポートされていますか?
Danijel

2
@Danijel @Daniel Magnussonsの回答の状態で述べられている公式ドキュメントNote: Use bc3 on the command line for both BC version 3 and 4
BNT


6

これが私の設定ファイルです。ある程度のレスリングは必要でしたが、現在は機能しています。私はWindowsサーバー、msysgit、比較3(どうやらx86バージョン)を使用しています。引数を指定する必要はなく、「cmd」の代わりに「path」を使用していることに気付くでしょう。

[user]
        name = PeteW
        email = petew@petew.com
[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

4

ビヨンド比較サポートページには、ビット簡単です。

詳細については、diff.externalの回答を確認してください(正確な構文に関して)

エキス:

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

「へのパスに置き換え、プロンプトコマンドでgit-diff-wrapper.sh、あなたはので、」~/.gitconfig含まれてい

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

正しい構文を使用して、ラッパースクリプトとdiffツールへのパスを指定してください。つまり、バックスラッシュの代わりにスラッシュを使用します。私の場合、私は持っています

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

.gitconfig

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

ラッパースクリプト内。


注:も使用できますgit difftool



3

$ 2の間違ったパスを作成することに注意してください。Cygwinの下にいるがBC3の下にはないため、完全なパスを指定する必要があります。「d:/ cygwin $ 2」など

ここで私のgit-diff-wrapper.shを参照してください:

$ 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"

幸運を。


3
これには実際にcygpathを使用する必要があります。例えばbcompare.exe $(cygpath -w $2)。乾杯。
Dan Molding

3

Windows 7(Professional)とGit for Windows(v 2.15以降)を実行している場合は、以下のコマンドを実行するだけで、Git for Windowsでサポートされているさまざまなdiffツールを見つけることができます

git difftool --tool-help

次のような出力が表示されます

git difftool --tool = 'は次のいずれかに設定できます:
vimdiff vimdiff2 vimdiff3

それはあなたのgitが現在difftoolとしてcompareを超えてサポートしていない(見つけられない)ことを意味します。

Gitが有効なdifftoolとしてbeyond compareを見つけるには、システムパス環境変数にBeyond Compareインストールディレクトリが必要です。これを確認するには、shell(cmd、git bashまたはpowershell。GitBashを使用しています)からbcompareを実行します。Beyond Compareが起動しない場合は、そのインストールディレクトリ(私の場合はC:\ Program Files \ Beyond Compare 4)をシステムパス変数に追加します。この後、シェルを再起動します。GitはBeyond Compareを可能なdifftoolオプションとして表示します。以下のいずれかのコマンドを使用して、compareをdifftoolとして起動することができます(たとえば、ローカルファイルを他のブランチと比較するため)。

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

以下のコマンドを使用して、比較を超えてデフォルトのdifftoolとして構成できます

   git config --global diff.tool bc

psは、Gitがパスシステム変数から見つけたものに基づいて、上記のコマンドのbcがbc3またはbcである可能性があることを覚えておいてください。


2

BC4 64ビット用の更新:これは、Git for Windows v.2.16.2およびBeyond Compare 4-v.4.2.4(64ビット版)で機能します

ユーザールート「C:\ Users \ MyUserName」にある.gitconfigファイルを手動で編集し、diff / difftoolおよびmerge / mergetoolタグを

[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\"


1

違いは、呼び出されるexeにあります。bcomp.exeを呼び出すように設定すると、正常に動作します。bcompare.exeを呼び出すように環境を構成すると、リビジョンシステムから取得した比較の側が空になります。


1

Beyond Compare 3に対して次のコマンドを実行します(システムでBCompare.exeパスが異なる場合は、パスを置き換えてください)。

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

次に使用します git difftool


1

Windows 10、Git v2.13.2

私の.gitconfig。'\'と '"'のエスケープ文字を忘れずに追加してください。

[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

gitコマンドを使用して構成するには、compare以外の設定をdifftoolとして参照できます。


こんにちは、私は同様のスクリプトを持っていましたが、C:\\ Program Files \\ Beyond Compare 4 \\ BComp.exeに切り替えるまで失敗しました。BCompare.exeを使用すると、比較する前に一時ファイルが削除されたため、チェックインされたバージョンではなく、最新のファイルのみが表示されました。
ガブリエル

0

どういうわけか、私にとって、git diffによって作成されたtmpファイルは、compareを超えて開く前に削除されていました。最初に別の場所にコピーする必要がありました。

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

0

多くの研究を行った後のMACについては、それは私のために働きました。1. beyond compareをインストールします。これは以下の場所にインストールされます

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

git http://www.scootersoftware.com/support.php?zz=kb_macで bcをdiff / mergeツールとして作成するには、次の手順に従ってください


0

BC2.exeを使用したgitバージョン2.15.1.windows.2の場合。

以下の設定は私のマシンでようやく動作します。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.