2010-01-15 435 views
90

我已經成功地讓git啓動Beyond Compare 3作爲diff工具,但是當我做一個diff時,我正在比較的文件沒有被加載。只有最新版本的文件被加載,沒有其他的東西,所以在Beyond Compare的右窗格中沒有任何東西。Git Diff with Beyond Compare

我運行git 1.6.3.1使用Cygwin與超越比較3.我已經設置了無法比擬的,因爲他們在他們的網站與像這樣的腳本支持部建議:

#!/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的差異的main.css

超越比較,然後將打開,只在左側顯示我目前的main.css窗格中,右側窗格中沒有任何內容。我希望看到我目前在左窗格中的main.css與HEAD相比,基本上是我上次承諾的。

我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 

我的混帳配置看起來像這樣的變化:

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

回答

116

我不使用額外的包裝.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的合併工具合併。

關於trustExitCode: 對於自定義合併命令,指定合併命令的退出代碼是否可以用來判斷合併是否成功。如果未設置爲true,則檢查合併目標文件時間戳,如果文件已更新,則假定合併已成功,否則將提示用戶指示合併成功。

+0

+1謝謝,在W7 x64,cygwin,git 1.7.6.msysgit上爲我工作。當然,我必須調整路線。 – johnny 2011-08-19 08:10:23

+0

@yehnan - 合併命令行結尾的第二個「$ MERGED」是什麼? – 2011-08-23 02:21:44

+10

我在windows 7中使用mingw git shell運行。我必須使用linux風格路徑'/ c/program files'而不是'c:/ program files'。我還刪除了'「$(cygpath -w $ LOCAL)」',並使用了'「$ LOCAL」'。這似乎是訣竅。 – 2012-08-30 04:57:53

4

Beyond Compare support page是有點短。

檢查我diff.external answer更多(有關確切語法)

提取物:

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

at the command prompt, replacing with the path to " git-diff-wrapper.sh ", so your ~/.gitconfig contains

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

Be sure to use the correct syntax to specify the paths to the wrapper script and diff tool, i.e. use forward slashed instead of backslashes. In my case, I have

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

in .gitconfig and

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

in the wrapper script.


注意:您還可以使用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" 

好運。

+2

你真的應該爲此使用cygpath;例如'bcompare.exe $(cygpath -w $ 2)'。乾杯。 – 2010-06-16 12:19:48

0

無論出於何種原因,對我而言,由git diff創建的tmp文件在打開超越比較之前被刪除。我必須先將它複製到另一個位置。

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

運行除了這些命令比較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 

運行除了這些命令比較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

+5

如果在git bash中運行這些命令,請使用\ – 2012-12-11 14:53:06

27

感謝@dahlbyk,作者Posh-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 
+0

轉義$我試過這個答案並且無法區分,也許我做錯了。 – Epu 2012-03-19 23:11:42

+1

@Epu你確認你的路徑在你的機器上是一樣的嗎?這是超越比較3,不是一個較舊的v2或什麼? – 2012-03-22 06:28:40

+0

我確認路徑是一樣的,它是BC3。 – Epu 2012-03-23 00:32:47

7

Official documentation工作對我來說

+0

謝謝指點我的官方文檔!至少它指定了GIT vs GitHub所需的diff配置 – 2016-02-09 09:31:02

5

這是我的配置文件。它採取了一些摔跤,但現在它正在工作。 我使用Windows Server,msysgit和beyond比較3(顯然是x86版本)。你會注意到我不需要指定任何參數,我使用「path」而不是「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 
+0

Git difftool爲我工作,但mergetool不適合我。 – 2016-02-09 09:28:26

0

區別在於被調用的exe:設置它來調用bcomp.exe,它會正常工作。配置您的環境以調用bcompare.exe,並且最終將從您的修訂系統獲取的比較一側爲空。

1

運行的除了這些命令比較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

0

對於MAC後做事很多研究,它爲我工作..! 1。安裝無法比擬的,這將在下面的位置安裝在

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

請按照下列步驟來使BC Git中http://www.scootersoftware.com/support.php?zz=kb_mac

0

差異/合併工具對於Git版本2.15.1.windows.2與BC2 。可執行程序。

下面的配置文件終於可以在我的機器上運行了。

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