2010-09-14 25 views
163

Tôi thiết lập git diff để bọc vào vimdiff, sử dụng" Git Diff with Vimdiff "làm hướng dẫn và hoạt động như mong đợi trừ khi có nhiều tệp có thay đổi.Xem tất cả `git diffs` với vimdiff

Khi có nhiều file với những thay đổi và tôi chạy git diff, nó sẽ mở file trước và sau khi bỏ trường hợp đầu tiên của vimdiff, tôi trình bày với các thông báo sau:

external diff died, stopping at filename 

Đây là một hoàn toàn khác với hành vi của tôi. Tôi đã có một thiết lập tương tự trong quá khứ với SVN và, khi phân biệt với nhiều tệp, tôi sẽ xem lại tệp đầu tiên, sau đó viết và thoát bằng cách sử dụng :wq và tệp tiếp theo có sự khác biệt sẽ mở ra.

Đây không phải là trường hợp của Git. Tôi đã thử :n[ext], nhưng làm như vậy không điền vào cửa sổ bên trái với tệp gốc để tệp có thể được phân biệt với phiên bản đã sửa đổi.

Trả lời

260
git config --global diff.tool vimdiff 
git config --global difftool.prompt false 
git config --global alias.d difftool 

git d mang lại các hành vi mong đợi, gõ :wq trong chu kỳ vim đến tập tin kế tiếp trong changeset.

+16

Chỉ hai xu của tôi: Tôi đã đặt 'df' thành' diff' và 'dt' thành' difftool'. Ngoài ra, gõ ': qa' trong Vim sẽ chuyển sang changeset tiếp theo mà không lưu bất cứ thứ gì. – jonyamo

+2

Giải pháp này là tuyệt vời ngoại trừ khi lưu thay đổi bạn phải gõ ": w!" thay vì: w – Asenar

+1

@jonyamo Bí danh cài đặt phải luôn dựa trên tần suất chúng tôi đang sử dụng một số lệnh. Tôi thường sử dụng 'git diff' hơn' git difftool'. Vì vậy, tôi đã bí danh 'd' thành 'diff' và' 'dt' thành 'difftool '. Khả năng sử dụng là vấn đề hơn là tạo bí danh với mẫu. –

86

Bạn có thể thử git difftool, nó được thiết kế để thực hiện công cụ này.

Trước tiên, bạn cần phải cấu hình công cụ diff để vimdiff

git config diff.tool vimdiff 

Sau đó, khi bạn muốn diff, chỉ cần sử dụng git difftool thay vì git diff. Nó sẽ hoạt động như bạn mong đợi.

+1

Hầu như ở đó! Sửa đổi một chút nó chính xác những gì tôi đang tìm kiếm. 1 mặc dù! – chuckg

+1

Công cụ vimdiff mergetool gần đây đã được cập nhật: http://git.kernel.org/?p=git/git.git;a=commit;h=829ef383a2b03a614d7d23e575270f2b10a805c1 (và một vài cam kết khác, nhưng đó là cam kết lớn nhất). Không chắc chắn khi nào bản phát hành bảo trì tiếp theo sẽ là, nhưng nếu bạn sẵn sàng xây dựng từ git.git, bản nâng cấp sẽ là của bạn! – Cascabel

15
Git accepts kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge, 
and opendiff as valid diff tools. You can also set up a custom tool. 

git config --global diff.tool vimdiff 
git config --global diff.tool kdiff3 
git config --global diff.tool meld 
git config --global diff.tool xxdiff 
git config --global diff.tool emerge 
git config --global diff.tool gvimdiff 
git config --global diff.tool ecmerge 
+0

Tôi có biết những gì sai trong câu trả lời của tôi –

+3

Bạn trả lời cho bộ nạp tiền, không phải là công cụ difftool. Nhưng nó vẫn là một câu trả lời hữu ích. +1. – dotancohen

+0

@dotancohen Thực sự cảm ơn tôi đã không bao giờ nhận thấy rằng trên sai lầm ngớ ngẩn bây giờ tôi có thể chỉnh sửa câu trả lời của tôi. –

Các vấn đề liên quan