Thứ Hai, tháng 7 16, 2007

Diff

Diff là cái quái gì? Là cái chương trình để so sánh các tệp theo dòng. Nó xài thuật toán LCS[1] (hình như khi học pascal có học về nó rồi nhưng quên rồi, pascal còn quên huống hồ nó :P)để so sánh tệp.
Cấu trúc lệnh:
diff [tham số] tệp_gốc tệp_mới

Diff nó 3 định dạng xuất ( và nhiều hơn nữa), gồm dạng thường, ngữ cảnh (context), thống nhất (unified), trong đó 2 kiểu sau có thể dùng để xài với patch. Được cái xuất ra, coi bằng vim thì cái nào cũng đẹp :P.

1/Kiểu thường

Đây là kiểu mặc định mà diff nó xuất ra. Thằng này làm phát là đi thẳng vào vấn đề, không có cái "đầu" (header).
Ký hiệu:
"a" là thêm vô (add)
"c" là sửa (change)
"d" là xoá (delete)
Đứng trước ký hiệu là địa chỉ (dạng: "dòng_đầu, dòng cuối")của tệp gốc, sau là địa chỉ tệp mới.
Cái dấu < là ở tệp gốc, > là tệp mới. Với sửa đổi (c), giữa thằng cũ và thằng mới có dòng ---.

2/Kiểu ngữ cảnh (context)

Thêm vô -c để diff nó xuất ra dạng này. Khác với cái trên, thằng này có thêm cái phần header, thông báo về tệp nó đang so sánh.
Cách biểu diễn của nó cũng khác, thêm vô thì có dấu +, xoá thì dấu - ở đầu dòng. Còn dấu ! để chỉ dòng thay đổi. Ngoài ra, trước và sau thay đổi nó (mặc đinh) thêm vô 3 dòng không có sự thay đổi. Để thay đổi số lượng dòng này thì xài -C num, trong đó num là số dòng.
Giá trị toạ độ cũng tương tự kiểu thường, khác chút là nó màu mè hơn, Toạ độ tệp gốc có *** còn mới có ---.

3/Kiểu thống nhất (unified)

Cũng gần như tương tự kiểu ngữ cảnh, nhưng được rút gọn hơn, có vẻ dễ nhìn hơn. Để diff xuất ra dạng này, thêm -u (hay -U num).
Đầu nó cũng có header. Toạ độ của thằng này có thay đổi chút chút. Thay vì dạng "đầu, cuối" thì đổi thành "đầu, tổng" trong đố tổng là tổng số dòng nó xài. Đầu ký hiệu của tệp gốc là dấu -, tệp mới là +, thích cái kiểu này hơn kiểu ngữ cảnh. Ký hiệu tạo độ (change hunks hay chunks)cũng được rút ngắn lại còn một dòng dạng:

@@ -R +R @@

Các dòng thêm vô, có dấu + ở đầu, xoá thì có -. Dòng thay đổi cũng đưa về dạng như thế.

---------------------------------------
Nguồn: Diff
---------------------------------------
[1]LCS - Longest Common Subsequence

2 bình loạn:

pclouds nói...

Đã nói tới diff thì không thể nào không nhắc đến patch.
Mà nói đến patch thì cũng nên đề cập luôn về merge ;)

Nguyễn Thành Luân nói...

(Đã đề cập đến ... thì phải đề cập...) x n.
Hehe, một lô lốc đáng đề cập đến :D.

Đăng nhận xét | Feed



 
^

Powered by Bloggerblogger addicted por UsuárioCompulsivo
original Washed Denim por Darren Delaye
Creative Commons License