2014-12-01 13 views
6

Tôi muốn git diff không hiển thị BOM thay đổi.
thay đổi như vậy thường xuất hiện như <feff> trong diff:Git bỏ qua BOM (ngăn không cho git diff hiển thị thay đổi dấu ngoặc đơn)

-<feff>/*^M 
+/*^M 

Làm thế nào tôi có thể làm cho git diff cư xử theo cách này?
Tốt hơn với tham số dòng lệnh.

git --ignore-all-space (aka git -w) không thực hiện thủ thuật. Tôi đang sử dụng Mac OS X nếu điều đó quan trọng.

+0

'git diff-w' (' --ignore-all-space') có hoạt động tốt hơn không? – VonC

+0

@VonC: Nó không làm trò lừa. –

+0

Ok. Sau đó, tôi không biết. Git dường như không chạm hoặc bỏ qua BOM (như đã thấy trong http://stackoverflow.com/a/6418611/6309) – VonC

Trả lời

2

Sử dụng Git Thuộc tính lọc

Một giải pháp khả thi sẽ là để tạo ra một bộ lọc BOM như:

#!/bin/bash 
sed '1s/^\xEF\xBB\xBF//' "$1" 

lưu trữ nó ở đâu đó trong đường dẫn của bạn (như ví dụ removebom) và làm cho nó thực thi.

Sau đó, bạn cần phải cấu hình các bộ lọc trong Git bằng cách chạy:

$ git config diff.removebom.textconv removebom 

và thêm một thuộc tính cho các tập tin mà bạn quan tâm (ví dụ cpp) để kho của bạn:

*.cpp diff=removebom 

như một .gitattributes tệp.

Thông tin thêm về chủ đề này có thể được tìm thấy trên:

Hoặc tháo BOM một lần cho tất cả

... bởi vì, hy vọng, BOM có thể bị xóa một lần và cho tất cả trong dự án của bạn :)

+0

Tôi thấy rằng bạn có thể đang sử dụng một UTF-16 BOM, sau đó ''1s/^ \ xFE \ xFF // ''có thể là mẫu sed bạn muốn ... Nhưng trong trường hợp của UTF-16, BOM có thể thực sự được yêu cầu và bạn đang chuyển đổi toàn bộ tập tin sang UTF-8; hãy cẩn thận về điều đó. – petrpulc

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