Để 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 --extcmd
trong phần cuối của câu trả lời này)
$LOCAL
chứa nội dung của tệp từ bản sửa đổi bắt đầu và $REMOTE
chứa nội dung của tệp trong bản sửa đổi kết thúc.
$BASE
chứ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 winmerge
là đủ!
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 difftool
vớ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.cmd
chỉ 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.tool
cấ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 winmergeu
tùy chọn)
Sự quan tâm với cài đặt này là winmerge.sh
tậ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 --extcmd
tùy chọn :
--extcmd=<command>
Chỉ định một lệnh tùy chỉnh để xem khác biệt. git-difftool
bỏ qua các mặc định được cấu hình và chạy $command $LOCAL $REMOTE
khi tùy chọn này được chỉ định.
Ví dụ, đây là cách gitk
có thể chạy / sử dụng bất kỳ diff
công cụ nào .