2011-09-24 19 views
10

Tôi muốn có git diff kết quả đầu ra cho tôi các khác biệt thường xuyên cho tất cả các tệp, ngoại trừ * .tex. Đối với các tệp * .tex, tôi muốn xem kết quả của git diff --word-diff.sử dụng từ khác biệt của git đối với các tệp mủ cao su

Tôi đã chơi xung quanh với .gitattributes.gitconfig, nhưng xa nhất tôi nhận được là hiển thị một phần cho một tệp .tex, tiếp theo là sự cố.

Có thể thực hiện hành vi này không?

My .gitattributes:

*.tex diff=latex 

.gitconfig:

[diff "latex"] 
    wordRegex = "\\\\[a-zA-Z]+|[{}]|\\\\.|[^\\{}[:space:]]+" 
    command = ~/bin/word-diff.sh 

word-diff.sh:

#!/bin/sh 
git --no-pager diff --color-words "$2" "$5" 
+0

Làm thế nào bạn đưa ra "$ 2" và "$ 5"? Tôi không thể tìm thấy thông tin về điều đó ở bất cứ đâu. – silvenon

+0

Tìm thấy nó, xin lỗi. Đối với những người khác đang thắc mắc, hãy tìm kiếm GIT_EXTERNAL_DIFF trong trang [git man] (http://git-scm.com/docs/git). – silvenon

+0

Là một nhận xét phụ, có [được cho là] (http://git-scm.com/docs/gitattributes/1.9.0#_defining_a_custom_hunk_header) một mẫu khác có sẵn "tex" có sẵn sẽ cung cấp cho bạn một phần hợp lý đầu đề. Nhưng điều đó dường như không có tác dụng với tôi. –

Trả lời

6

Bạn có thể gửi (hoặc liên kết tới) một ví dụ hoàn chỉnh? Tôi đã thiết lập chính xác những gì bạn đã mô tả và nó có vẻ hoạt động tốt. Tức là, đầu ra diff làm nổi bật các từ chứ không phải các dòng và tất cả các thay đổi mà tôi đã thực hiện được bao gồm (nghĩa là nó không xuất hiện sớm hay bất kỳ thứ gì). Sự bất thường duy nhất là diff sẽ exit luôn với:

external diff died, stopping at foo.tex. 

Điều này xảy ra bởi vì git diff, khi chạy trong cách thức mà bạn đang sử dụng nó, hoạt động như công cụ độc lập diff: nó thoát với một mã thoát Nonzero nếu các tệp khác nhau. Git không mong đợi hành vi này; nó giả định rằng lệnh tùy chỉnh của bạn sẽ luôn thực thi thành công và các mã thoát lỗi chỉ ra một vấn đề thực tế.

Git đã biết rằng các tệp khác nhau và không yêu cầu lệnh bên ngoài để thực hiện xác định này. Lệnh bên ngoài là một công cụ định dạng.

Nếu bạn sửa đổi diff-words.sh kịch bản của bạn luôn luôn thoát thành công, mọi thứ sẽ làm việc ra tốt hơn:

#!/bin/sh 
git --no-pager diff --color-words "$2" "$5" 
exit 0 
+0

Đó là thông báo lỗi chính xác mà tôi nhận được. Thêm 'exit 0' đã thực hiện thủ thuật, cảm ơn! –

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