web-dev-qa-db-ja.com

比較を超えたGit Diff

GitでBeyond Compare 3をdiffツールとして起動することに成功しましたが、diffを実行すると、比較対象のファイルがロードされません。ファイルの最新バージョンのみがロードされ、他には何もありません。そのため、Beyond Compareの右ペインには何もありません。

Beyond Compare 3でCygwinを使用してgit 1.6.3.1を実行しています。ウェブサイトのサポート部分で、次のようなスクリプトを使用して提案するように、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 configはDiffの場合は次のようになります。

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

余分なラッパー.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に設定されていない場合、マージターゲットファイルのタイムスタンプがチェックされ、ファイルが更新された場合はマージが成功したと見なされます。そうでない場合、ユーザーはマージの成功を示すように求められます。

135
yehnan

@ dahlbykPosh-Git の作者である config as a Gist に感謝します。構成の問題を解決するのに役立ちました。

[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
27
Nick Josevski

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を使用します

20
user

公式ドキュメント 私のために働いた

9

これが私の設定ファイルです。それはいくつかのレスリングがかかりましたが、今では機能しています。私はWindowsサーバー、msysgit、さらにbeyond compare 3(明らかにx86バージョン)を使用しています。引数を指定する必要はなく、「cmd」ではなく「path」を使用していることに気付くでしょう。

[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
6
nachonachoman

bC3はPRO Editionの3方向マージのみをサポートしているようです。 http://www.scootersoftware.com/moreinfo.php?zz=kb_editions

4
Mark Conway

Beyond Compareサポートページ は簡単です。

私の diff.external answer をチェックしてください(正確な構文に関して)

エキス:

$ 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

4
VonC

間違ったパス$ 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
z33

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\"
2
mitaka

Windows 7(プロフェッショナル)とGit for Windows(v 2.15以降)を実行している場合、以下のコマンドを実行するだけで、Git for Windowsでサポートされているさまざまなdiffツールを確認できます。

git difftool --tool-help

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

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

これは、現在gitがdifftoolとしての比較を超えてサポートしていない(見つけることができない)ことを意味しています。

Gitが比較を超えて有効なdifftoolを見つけるには、システムにBeyond Compareインストールディレクトリが必要ですpath環境変数。これを確認するには、Shell(cmd、git bashまたはpowershellからbcompareを実行します。GitBashを使用しています)。 Beyond Compareが起動しない場合は、そのインストールディレクトリ(私の場合はC:\ Program Files\Beyond Compare 4)をシステムパス変数に追加します。この後、シェルを再起動します。 Gitは、比較ツールオプションとしてBeyond 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

追伸上記のコマンドのbcは、Gitがパスシステム変数から見つけたものに基づいてbc3またはbcになり得ることに注意してください。

1
sarabdeep singh

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
Jerry Zhang

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

1
rrozema

http://rubenlaguna.com/wp/2010/08/05/visual-difftool-cygwin-git/ には、BeyondCompareで働くために採用した解決策があります: http:// Gist.github.com/56457

1
Vincent Scheib

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コマンドを使用して設定するには、 difftoolとしての比較を超えて設定 を参照できます。

0
zhangyu12

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

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

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

0
Sreedhar GS

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

以下の設定は私のマシンで最終的に動作します。

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

0
YChi Lu

なんらかの理由で、私にとって、git diffで作成されたtmpファイルは、beyond compareで開く前に削除されていました。最初に別の場所にコピーする必要がありました。

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