2009-03-11 28 views
19

Tôi đang sử dụng msys Git để kiểm soát nguồn trên máy Windows và tôi đang cố gắng tìm ra cách để có công cụ hợp nhất, WinMerge, để làm việc với Git.Msys Git Merge Tool Command Options Số phát hành

Tôi đã theo dõi the instructions on this blog với khả năng tốt nhất của mình vì đó là gần nhất tôi đã tìm thấy những gì tôi đang cố gắng làm. Về cơ bản những gì tôi đã làm là:

Sửa đổi tập tin .gitconfig tôi để bao gồm những điều sau đây:

 
[merge] 
    tool = winmerge 

[mergetool "winmerge"] 
    cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe\" "$PWD/$LOCAL" "$PWD/$REMOTE" "$PWD/$MERGED" 
     trustExitCode = false 
    keepBackup = false 

này hầu như làm việc. Khi tôi cố gắng để chạy các công cụ hợp nhất từ ​​Git, WinMerge mang lại cho tôi một lỗi nói rằng nó không thể tìm ra con đường của các tập tin, có ý nghĩa hoàn toàn kể từ khi con đường nó đang tìm kiếm là:

 
C:\MY\WORKING\DIRECTORY\-e 
C:\MY\WORKING\DIRECTORY\-ub 

Có vẻ như Git đang chuyển các tùy chọn vào công cụ hợp nhất thay vì các tên tệp từ xa & cục bộ mà tôi mong đợi được truyền nếu mọi thứ hoạt động chính xác.

Tôi đã tìm kiếm trực tuyến tài liệu hợp nhất của Git, nhưng tôi dường như không thể tìm thấy bất kỳ điều gì liên quan đến những gì tôi đang cố gắng làm. tôi đoán là giải pháp sẽ là một trong những điều sau đây:

  1. Thay đổi $LOCAL & $REMOTE biến với các giá trị đúng, giả sử $LOCAL & $REMOTE là không chính xác.
  2. Viết .bat tập lệnh để gọi WinMergeU và xử lý đối số Git gửi đến công cụ hợp nhất trong logic của tập lệnh .bat của tôi.

Trả lời

7

Từ WinMerge Command line manual:

cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe /ub /e \" 
cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe /u /e \" 

(/ u là mới/ub với WinMerge mới nhất)

có thể làm việc tốt hơn như là một lệnh trong phần mergetool của bạn.

Tuy nhiên, bạn có thể phải thực hiện cuộc gọi này trong tập lệnh, như được mô tả trong số SO answer này.

Extract thích nghi với merge.tool:

tình huống thực tế để cấu hình mergetool với tùy chỉnh của bạn diff công cụ:

C:\myGitRepo>git config --global merge.tool winmerge 
C:\myGitRepo>git config --global mergetool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\"" 
C:\myGitRepo>git config --global mergetool.prompt false 

Với winmerge.sh lưu trữ trong một phần thư mục của PATH của bạn:

#!/bin/sh 
echo Launching WinMergeU.exe: $1 $2 
"C:/Program Files/WinMerge/WinMergeU.exe" -e -ub "$1" "$2" 

Nếu bạn có công cụ khác (kdiff3, P4Diff, ...), hãy tạo một tập lệnh shell khác và chỉ thị cấu hình mergetool.myMergeTool.cmd thích hợp.
Sau đó, bạn có thể dễ dàng chuyển đổi các công cụ bằng cấu hình merge.tool.

+0

kết quả này trong lời nhắc "đúng đường dẫn không hợp lệ" –

+0

@Tobias: được khắc phục bằng ví dụ cụ thể (câu trả lời được cập nhật). – VonC

+0

+1. (nếu tôi có thể. Nhưng ít nhất tôi có thể hoàn tác downvote của tôi ... có vẻ là một [bug] (http://meta.stackexchange.com/questions/23147/change-a-vote-from-downvote-to- upvote-through-editing)) thực sự, nếu bạn thêm winmerge vào đường dẫn của bạn (hoặc đặt 'mergetool.winmerge.path' tôi đoán), không cần script nào là –

4
[mergetool "winmerge"] 
    cmd = winmergeu -e -ub -wl -dl "Remote" -dr "Local" "$PWD/$REMOTE" "$PWD/$LOCAL" "$PWD/$MERGED" 
    keepBackup = false 

Nếu bạn nhìn vào bên trong C:\Program Files\Git\share\git-gui\lib\mergetool.tcl nó có cú pháp cho các công cụ hợp nhất chung.

tôi vẫn đang cố gắng để tìm ra cách để gọi mergetool trực tiếp từ Git GUI ...

11

Nếu bạn nhìn vào các tập tin đó là mâu thuẫn, bạn sẽ nhận thấy sự chuẩn Theirs >>>>>>><<<<<< Mine dấu. WinMerge hiểu những điều này là xung đột hợp nhất, do đó, nó không cần phải xác định rõ ràng 'Của họ' và 'Mỏ'; nó chỉ cần được cho biết đó là tập tin có dấu hiệu xung đột.

  1. Chúng tôi biết tệp trong thư mục hoạt động chứa các điểm đánh dấu.
  2. Có nghĩa là tệp chúng tôi đang hợp nhất cũng sẽ là tệp này - chúng tôi cũng biết rằng git mergetool làm cho biến số $MERGED có sẵn tên tệp đó.

    [mergetool "winmerge"] 
        cmd = 'C:/Program Files/WinMerge/WinMergeU.exe' \"$MERGED\" 
    

Đây là tất cả các bạn cần phải treo git với WinMerge cho độ phân giải/xung đột hợp nhất; không cần mã lệnh hoặc công tắc dòng lệnh. Tham khảo biểu mẫu dòng lệnh thứ 3 trong tài liệu (được liên kết bởi OP, ở trên) và giải thích về đối số conflictfile.

+0

kết quả này trong lời nhắc "đúng đường dẫn không hợp lệ" –

+1

Không có đường dẫn đúng? Từ tài liệu WinMerge 'conflicfile Chỉ định tệp xung đột, thường được tạo bởi hệ thống kiểm soát Phiên bản. Tệp xung đột sẽ mở ra trong cửa sổ So sánh tệp, nơi bạn có thể hợp nhất và giải quyết xung đột, như được mô tả trong Giải quyết tệp xung đột. Lưu ý rằng không có đường dẫn nào khác có thể được sử dụng với tệp xung đột.' (xin trích dẫn trích dẫn) Có thể bạn không sử dụng phiên bản mới nhất bạn chỉ cần chỉ định một tệp –

+0

Đây là giải pháp duy nhất có hiệu quả đối với tôi. –