2014-09-23 12 views
11

Tôi có cùng một tệp được hiển thị theo hai cách khác nhau và muốn so sánh nó bằng cách sử dụng git diff, chăm sóc bỏ qua mọi khoảng trắng, tab, ngắt dòng, vận chuyển- trả lại hoặc bất kỳ thứ gì không đúng mã nguồn của tệp của tôi.Bỏ qua bất kỳ khoảng trống hoặc ngắt dòng nào trong git-diff

Tôi thực sự cố gắng này:

git diff --no-index --color --ignore-all-space <file1> <file2>

nhưng khi một số thẻ html đang sụp đổ tất cả trên cùng một dòng (thay vì mỗi dòng và lập bảng) git-diff phát hiện là như một sự khác biệt (trong khi đối với tôi nó không phải là).

<html><head><title>TITLE</title><meta ...... 

là khác nhau từ

<html> 
    <head> 
     <title>TITLE</title> 
     <meta ...... 

lựa chọn gì làm tôi nhớ để thực hiện những gì tôi cần và mối đe dọa như thể nó là giống nhau không?

+1

Vui lòng xóa một dấu gạch ngang khỏi _ignore - all_ – Line

Trả lời

0

git-diff so sánh các file từng dòng

Nó kiểm tra dòng đầu tiên của file1 của bạn với điều đó trong file2, vì họ không phải cùng nó báo cáo một lỗi.

Bỏ qua khoảng trắng có nghĩa là thanh foo sẽ khớp với foobar nếu trên cùng một dòng. Vì các tệp của bạn trải rộng nhiều dòng trong một và chỉ có một dòng ở một dòng khác, các tệp sẽ luôn khác nhau

Nếu bạn thực sự muốn kiểm tra xem các tệp đó có chứa chính xác ký tự không khoảng trắng hay không, bạn có thể thử như sau:

diff <(perl -ne 's/\s*//xg; print' file1) <(perl -ne 's/\s*//g; print' file2) 

Hy vọng nó sẽ giải quyết được vấn đề của bạn!

+0

Trả lại cho tôi lỗi 'Thay thế thay thế không được chấm dứt tại dòng 1'. Và thu gọn tất cả tệp của tôi, ngay cả khi tôi chỉ muốn xóa dấu cách/tab. Nó không giải quyết được vấn đề của tôi, và đang sử dụng 'diff' thay vì' git-diff' (có các tùy chọn như * - bỏ qua tất cả dấu cách * và * - màu *). Nhưng cảm ơn bạn đã làm rõ; bạn là đúng: nó sẽ so sánh các dòng không phải là các tập tin hoặc từ. – Kamafeather

+0

Lỗi ''không chấm dứt'' là dấu gạch chéo bị thiếu - được sửa. –

16

git diff hỗ trợ so sánh các tệp theo từng dòng hoặc từng từ và cũng hỗ trợ xác định nội dung tạo từ. Ở đây bạn có thể xác định mọi ký tự không dấu cách như một từ để so sánh. Bằng cách này, nó sẽ bỏ qua tất cả các không gian bao gồm spcae trắng, tab, line-break và carrige-return như những gì bạn cần.

Để đạt được điều đó, có một tùy chọn hoàn hảo --word-diff-regex và chỉ cần đặt số --word-diff-regex=[^[:space:]]. Tham khảo doc để biết chi tiết.

git diff --no-index --word-diff-regex=[^[:space:]] <file1> <file2> 

Đây là một ví dụ. Tôi tạo ra hai tập tin, với a.html như sau:

<html><head><title>TITLE</title><meta> 

Với b.html như sau:

<html> 
    <head> 
     <title>TI==TLE</title> 
     <meta> 

Bằng cách chạy

git diff --no-index --word-diff-regex=[^[:space:]] a.html b.html 

Nó nhấn mạnh sự khác biệt của TITLETI{+==+}TLE trong hai tập tin ở chế độ plain như sau. Bạn cũng có thể chỉ định --word-diff=<mode> để hiển thị kết quả ở các chế độ khác nhau.mode có thể là color, plain, porcelainnone và với plain làm mặc định.

diff --git a/d.html b/a.html 
index df38a78..306ed3e 100644 
--- a/d.html 
+++ b/a.html 
@@ -1 +1,4 @@ 
<html> 
    <head> 
      <title>TI{+==+}TLE</title> 
        <meta> 
+0

'--word-diff = none' sẽ tắt tùy chọn' --word-diff-regex' ... –

+1

Thật không may là không có chế độ nào cho thấy sự khác biệt về dòng, trong khi từ khác biệt được bật. –

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