Git Diff với Beyond Compare


111

Tôi đã thành công trong việc lấy git để khởi động Beyond Compare 3 như một công cụ khác biệt, tuy nhiên, khi tôi thực hiện khác biệt, tệp tôi đang so sánh với không được tải. Chỉ có phiên bản mới nhất của tệp được tải và không có gì khác, vì vậy không có gì trong ngăn bên phải của Beyond Compare.

Tôi đang chạy git 1.6.3.1 với Cygwin với Beyond Compare 3. Tôi đã thiết lập ngoài so sánh như họ đề xuất trong phần hỗ trợ của trang web của họ với một tập lệnh như vậy:

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

Có ai khác gặp phải vấn đề này và biết một giải pháp cho điều này?

Chỉnh sửa:
Tôi đã làm theo các đề xuất của VonC nhưng tôi vẫn gặp sự cố chính xác như trước đây. Tôi là người mới sử dụng Git nên có lẽ tôi đang sử dụng sai khác một cách chính xác.

Ví dụ: tôi đang cố gắng xem sự khác biệt trên một tệp bằng một lệnh như sau:
git diff main.css

Beyond Compare sau đó sẽ mở ra và chỉ hiển thị main.css hiện tại của tôi trong khung bên trái, không có gì trong khung bên phải. Tôi muốn xem main.css hiện tại của mình trong khung bên trái so với HEAD, về cơ bản những gì tôi đã cam kết lần cuối.

Git-diff-wrapper.sh của tôi trông giống như sau:

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

Cấu hình git của tôi trông giống như thế này cho Diff:

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

Câu trả lời:


140

Tôi không sử dụng thêm tệp .sh trình bao bọc. Môi trường của tôi là Windows XP, git 1.7.1 trên cygwin và Beyond Compare 3. Sau đây là tệp .git / config của tôi .

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

Sau đó, tôi sử dụng $ git difftool để so sánh và $ git mergetool để hợp nhất.

Giới thiệu về TrustExitCode : Đối với lệnh hợp nhất tùy chỉnh, hãy chỉ định xem mã thoát của lệnh hợp nhất có thể được sử dụng để xác định xem hợp nhất có thành công hay không. Nếu điều này không được đặt thành true thì dấu thời gian tệp mục tiêu hợp nhất được kiểm tra và hợp nhất giả định đã thành công nếu tệp đã được cập nhật, nếu không, người dùng sẽ được nhắc cho biết sự hợp nhất thành công.


12
Tôi đang chạy trong windows 7 với một trình bao git mingw. Tôi đã phải sử dụng một đường dẫn kiểu linux /c/program filesthay vì c:/program files. Ngoài ra tôi đã loại bỏ "$(cygpath -w $LOCAL)"và chỉ sử dụng "$LOCAL". Đó dường như là một mẹo nhỏ.
Landon Poch

5
Như @pClass đề cập bên dưới, "bc3" hiện là một công cụ nội bộ trong các phiên bản git mới hơn. Bạn nên sử dụng một tên duy nhất, chẳng hạn như "beyondcompare3"
Scott Wegner

4
GitHub Shell (trên Windows 8) đã nói với tôi bcompare: command not found- cho đến khi tôi thay đổi TÊN của công cụ từ bc3một thứ khác (như abc3). Tôi đoán rằng một số cài đặt Github nội bộ đã can thiệp. Ngoài ra, tôi đã loại bỏ "$(cygpath -w $LOCAL)"một phần và thay thế nó bằng "$LOCAL". Bây giờ nó hoạt động tốt. Cảm ơn!
Felix Alcala,

1
Đây là một lỗi đối với tôi khi nhìn vào sự khác biệt giữa hai cam kết. Đây là một giải pháp tốt hơn: blog.kifaru.be/2011/07/…
balajimc55

2
Tôi cũng tìm thấy bài viết này: Scootersoftware.com/support.php?zz=kb_vcs
Guy Avraham

28

Cảm ơn @dahlbyk , tác giả của Posh-Git , đã đăng cấu hình của mình làm ý chính . Nó đã giúp tôi giải quyết vấn đề cấu hình của mình.

[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

Tôi đã thử câu trả lời này và không thể khác, có thể tôi đang làm sai.
Epu

1
@Epu bạn đã xác nhận các đường dẫn của bạn giống nhau trên máy của bạn chưa? Và nó là Beyond Compare 3, không phải v2 cũ hơn hay gì đó?
Nick Josevski

Tôi đã xác nhận các đường dẫn là giống nhau, và đó là bc3.
Tập

1
Điều thú vị là, 'git difftool file.txt' và 'git mergetool file.txt' đang hoạt động tốt, vì vậy tôi đã chuyển sang những cái đó. Nhưng 'git diff file.txt' hiện đã bị phá hủy (trước khi nó được sử dụng để hiển thị cho tôi khác biệt bảng điều khiển mặc định). Bây giờ nó cho tôi 'lỗi: không thể sinh ra bc3: Không có tệp hoặc thư mục nào như vậy \ nexternal diff đã chết, dừng lại ở
tệp.txt

Chỉ trong trường hợp bất cứ ai phải đối mặt với cùng một vấn đề tôi đã làm (không được công nhận .gitconfig sau khi chỉnh sửa nó) tôi phải thêm đường dẫn như sau:cmd = 'C:\\Program Files\\Beyond Compare 4\\BCompare.exe' \"$LOCAL\" \"$REMOTE\"
sebagomez

20

Chạy các lệnh này cho 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

Chạy các lệnh này cho 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

Sau đó sử dụng git difftool


1
Beyond Compare 4 có được hỗ trợ không?
Danijel

2
@Danijel tài liệu chính thức được nêu trong trạng thái câu trả lời của @Daniel MagnussonsNote: Use bc3 on the command line for both BC version 3 and 4
BNT


6

Đây là tệp cấu hình của tôi. Nó đã mất một số vật lộn nhưng bây giờ nó đang hoạt động. Tôi đang sử dụng máy chủ windows, msysgit và hơn thế nữa so sánh 3 (dường như là phiên bản x86). Bạn sẽ nhận thấy rằng tôi không cần chỉ định bất kỳ đối số nào và tôi sử dụng "đường dẫn" thay vì "cmd".

[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

Các trang hỗ trợ so sánh Beyond là một chút ngắn gọn.

Kiểm tra câu trả lời diff.external của tôi để biết thêm (về cú pháp chính xác)

Trích xuất:

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

tại dấu nhắc lệnh, thay thế bằng đường dẫn đến " git-diff-wrapper.sh", do đó bạn ~/.gitconfigcó chứa

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

Đảm bảo sử dụng cú pháp chính xác để chỉ định các đường dẫn đến tập lệnh trình bao bọc và công cụ khác biệt, tức là sử dụng dấu gạch chéo lên phía trước thay vì dấu gạch chéo ngược. Trong trường hợp của tôi, tôi có

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

trong .gitconfig

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

trong tập lệnh trình bao bọc.


Lưu ý: bạn cũng có thể sử dụng git difftool.



3

Xin lưu ý rằng bạn thực hiện sai đường dẫn $ 2. bởi vì bạn thuộc Cygwin nhưng không phải là BC3, vì vậy bạn nên chỉ định một đường dẫn đầy đủ cho nó. chẳng hạn như "d: / cygwin $ 2"

Vui lòng tham khảo git-diff-wrapper.sh của tôi tại đây:

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

Chúc may mắn.


3
Bạn thực sự nên sử dụng cygpath cho việc này; vd bcompare.exe $(cygpath -w $2). Chúc mừng.
Dan Molding

3

Nếu bạn đang chạy windows 7 (chuyên nghiệp) và Git cho Windows (v 2.15 trở lên), bạn có thể chỉ cần chạy lệnh bên dưới để tìm hiểu các công cụ khác nhau được Git cho Windows của bạn hỗ trợ là gì

git difftool --tool-help

Bạn sẽ thấy đầu ra tương tự như thế này

git difftool --tool = 'có thể được đặt thành một trong các giá trị sau:
vimdiff vimdiff2 vimdiff3

nó có nghĩa là git của bạn không hỗ trợ (không thể tìm thấy) ngoài so sánh như difftool ngay bây giờ.

Để Git có thể tìm thấy ngoài so sánh là difftool hợp lệ, bạn nên có thư mục cài đặt Beyond Compare trong biến môi trường đường dẫn hệ thống của mình . Bạn có thể kiểm tra điều này bằng cách chạy bcompare từ shell (cmd, git bash hoặc powershell. Tôi đang sử dụng Git Bash). Nếu Beyond Compare không khởi chạy, hãy thêm thư mục cài đặt của nó (trong trường hợp của tôi là C: \ Program Files \ Beyond Compare 4) vào biến đường dẫn hệ thống của bạn. Sau đó, khởi động lại trình bao của bạn. Git sẽ hiển thị Beyond Compare là tùy chọn difftool có thể. Bạn có thể sử dụng bất kỳ lệnh nào dưới đây để khởi chạy ngoài so sánh dưới dạng difftool (ví dụ: để so sánh bất kỳ tệp cục bộ nào với một số nhánh khác)

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

Bạn có thể cấu hình ngoài so sánh làm bộ khuếch tán mặc định bằng cách sử dụng các lệnh dưới đây

   git config --global diff.tool bc

ps hãy nhớ rằng bc trong lệnh trên có thể là bc3 hoặc bc dựa trên những gì Git có thể tìm thấy từ biến hệ thống đường dẫn của bạn.


2

Cập nhật cho BC4 64bit: Bản cập nhật này hoạt động cho Git dành cho Windows v.2.16.2 và Beyond Compare 4 - v.4.2.4 (Phiên bản 64bit)

Tôi đã chỉnh sửa thủ công tệp .gitconfig nằm trong thư mục gốc "C: \ Users \ MyUserName" của tôi và thay thế các thẻ diff / difftool và hợp nhất / mergetool bằng

[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

Sự khác biệt là ở chỗ exe được gọi: thiết lập nó để gọi bcomp.exe và nó sẽ hoạt động tốt. Định cấu hình môi trường của bạn để gọi bcompare.exe và bạn sẽ kết thúc với phần so sánh được lấy từ hệ thống sửa đổi của bạn trống.


1

Chạy các lệnh này cho Beyond Compare 3 (nếu đường dẫn BCompare.exe khác trong hệ thống của bạn, vui lòng thay thế nó theo ý của bạn):

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

Sau đó sử dụng git difftool


1

Windows 10, Git v2.13.2

.Gitconfig của tôi. Hãy nhớ thêm ký tự thoát cho '\' và '"'.

[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

Bạn có thể tham khảo thiết lập ngoài so sánh như difftool để sử dụng lệnh git để cấu hình nó.


Xin chào, tôi có một tập lệnh tương tự và nó không thành công cho đến khi tôi chuyển sang C: \\ Program Files \\ Beyond Compare 4 \\ BComp.exe. Với BCompare.exe, tệp tạm thời đã bị xóa trước khi nó có thể được so sánh, vì vậy tôi chỉ thấy tệp mới nhất, không có phiên bản đăng ký.
gabriel

0

Đối với tôi, vì bất kỳ lý do gì, tệp tmp được tạo bởi git diff đã bị xóa trước khi nó được mở ra ngoài so sánh. Tôi đã phải sao chép nó ra một vị trí khác trước.

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

0

Đối với MAC sau khi thực hiện rất nhiều nghiên cứu, nó đã làm việc cho tôi ..! 1. Cài đặt so sánh ngoài và điều này sẽ được cài đặt ở vị trí bên dưới

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

Hãy làm theo các bước sau để tạo bc làm công cụ khác biệt / hợp nhất trong git http://www.scootersoftware.com/support.php?zz=kb_mac


0

Đối với phiên bản git 2.15.1.windows.2 với BC2.exe.

Cấu hình bên dưới cuối cùng cũng hoạt động trên máy của tôi.

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.