Để hoàn thành câu trả lời cấu hình "diff.external" trước đây của tôi ở trên:
Như Jakub đã đề cập , Git1.6.3 đã giới thiệu git Difftool , ban đầu được đề xuất vào tháng 9 năm 2008:
SỬ DỤNG = '[--tool=tool] [--commit=ref] [--start=ref --end=ref] [--no-prompt] [file to merge]'
(Xem --extcmdtrong phần cuối của câu trả lời này)
$LOCALchứa nội dung của tệp từ bản sửa đổi bắt đầu và $REMOTEchứa nội dung của tệp trong bản sửa đổi kết thúc.
$BASEchứa nội dung của tập tin trong wor
Về cơ bản, nó git-mergetoolđược sửa đổi để hoạt động trên chỉ số git / worktree.
Các trường hợp sử dụng thông thường cho kịch bản này là khi bạn đã hoặc dàn dựng hoặc thay đổi unstaged và bạn muốn xem những thay đổi trong một side-by-side xem diff (ví dụ xxdiff, tkdiff, vv).
git difftool [<filename>*]
Một trường hợp sử dụng khác là khi bạn muốn xem thông tin tương tự nhưng đang so sánh các cam kết tùy ý (đây là phần mà phân tích cú pháp có thể tốt hơn)
git difftool --start=HEAD^ --end=HEAD [-- <filename>*]
Trường hợp sử dụng cuối cùng là khi bạn muốn so sánh công việc hiện tại của mình với thứ gì đó không phải là CHÍNH (ví dụ: thẻ)
git difftool --commit=v1.0.0 [-- <filename>*]
Lưu ý: kể từ Git 2.5, git config diff.tool winmergelà đủ!
Xem " git mergetool winmerge "
Và kể từ Git 1.7.11 , bạn có tùy chọn --dir-diff, để sinh ra các công cụ tìm khác biệt bên ngoài có thể so sánh hai hệ thống phân cấp thư mục tại một thời điểm sau khi điền hai thư mục tạm thời, thay vì chạy một phiên bản của công cụ bên ngoài một lần cho mỗi cặp tệp.
Trước Git 2.5:
Trường hợp thực tế để cấu hình difftoolvới công cụ tìm khác biệt tùy chỉnh của bạn:
C:\myGitRepo>git config --global diff.tool winmerge
C:\myGitRepo>git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
C:\myGitRepo>git config --global difftool.prompt false
Với winmerge.sh được 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" -u -e "$1" "$2" -dl "Local" -dr "Remote"
Nếu bạn có một công cụ khác (kdiff3, P4Diff, ...), hãy tạo một tập lệnh shell khác và difftool.myDiffTool.cmdchỉ thị cấu hình phù hợp .
Sau đó, bạn có thể dễ dàng chuyển đổi các công cụ với diff.toolcấu hình.
Bạn cũng có mục blog này của Dave để thêm các chi tiết khác.
(Hoặc câu hỏi này cho các winmergeutùy chọn)
Sự quan tâm với cài đặt này là winmerge.shtập lệnh : bạn có thể tùy chỉnh nó để tính đến các trường hợp đặc biệt.
Xem ví dụ câu trả lời của David Marble dưới đây để biết ví dụ liên quan đến:
- tập tin mới trong nguồn gốc hoặc đích
- loại bỏ các tập tin trong nguồn gốc hoặc đích
Như Kem Mason đề cập trong câu trả lời của mình , bạn cũng có thể tránh bất kỳ trình bao bọc nào bằng cách sử dụng --extcmdtùy chọn :
--extcmd=<command>
Chỉ định một lệnh tùy chỉnh để xem khác biệt. git-difftoolbỏ qua các mặc định được cấu hình và chạy $command $LOCAL $REMOTEkhi tùy chọn này được chỉ định.
Ví dụ, đây là cách gitkcó thể chạy / sử dụng bất kỳ diffcông cụ nào .