So sánh văn bản (Diff Checker)

So sánh hai đoạn văn bản hoặc mã theo từng dòng. Dòng được thêm, xóa và thay đổi được tô sáng, chi tiết tới từng từ khác nhau.

Chạy trên trình duyệtKhông cần đăng kýKhông tải lên gì

Dán văn bản vào cả hai ô để xem khác biệt.

Cách dùng So sánh văn bản (Diff Checker)

  1. Dán văn bản gốc vào bên trái và văn bản đã sửa vào bên phải, hoặc mở hai tệp.
  2. Kết quả so sánh cập nhật khi bạn gõ. Chọn chế độ xem Song song hoặc Hợp nhất.
  3. Đánh dấu Bỏ qua khoảng trắng, Bỏ qua hoa thường hoặc Bỏ qua dòng trống để ẩn nhiễu như thụt lề lại.
  4. Dùng Ẩn phần không đổi để tập trung vào thay đổi với ba dòng ngữ cảnh xung quanh mỗi thay đổi.
  5. Bấm Sao chép dạng patch hoặc Tải xuống .diff để lấy unified diff chuẩn có thể áp dụng bằng git apply hoặc patch.

Công cụ so sánh này hoạt động thế nào

Công cụ chia cả hai đầu vào thành các dòng và chạy thuật toán Myers, cùng thuật toán O(ND) được git diff và GNU diff sử dụng. Nó tìm chuỗi thêm và xóa ngắn nhất biến văn bản gốc thành văn bản đã sửa, nên kết quả cho thấy ít dòng thay đổi nhất có thể. Các dòng giống nhau ở đầu và cuối được bỏ qua trước, giúp so sánh tệp hàng nghìn dòng gần như tức thì.

Khi một dòng bị xóa và một dòng được thêm nằm cạnh nhau, chúng được ghép thành một dòng đã sửa và được so sánh lại theo từng từ. Những từ thực sự thay đổi được tô sáng đậm hơn, nên một biến được đổi tên hay một con số bị sửa sẽ nổi bật trong một dòng dài.

Xem song song và xem hợp nhất

Song song đặt bản gốc bên trái và bản mới bên phải, kèm số dòng cho cả hai. Đây là chế độ dễ nhất để review văn xuôi, tệp cấu hình và thay đổi mã ngắn. Chế độ Hợp nhất xen kẽ dòng bị xóa (-) và dòng được thêm (+) trong một cột, định dạng được dùng bởi công cụ review code và tệp patch.

Định dạng unified diff (patch)

Patch được xuất theo định dạng diff -u: phần đầu ---/+++, tiếp theo là các hunk bắt đầu bằng @@ -l,s +l,s @@, trong đó l là số dòng đầu tiên và s là số dòng của hunk trong mỗi tệp. Mỗi hunk có ba dòng ngữ cảnh không đổi, nên có thể áp dụng bằng patch -p0 hoặc git apply ngay cả khi các dòng lân cận đã bị dịch chuyển.

Khi nào dùng các tùy chọn bỏ qua

  • Bỏ qua khoảng trắng coi hai dòng là bằng nhau nếu chúng chỉ khác nhau về dấu cách hoặc tab. Dùng sau khi thụt lề lại mã hoặc chuyển tab thành dấu cách.
  • Bỏ qua hoa thường tiện cho SQL, HTML và tệp log, nơi chữ hoa chữ thường không quan trọng.
  • Bỏ qua dòng trống ẩn các dòng chỉ được thêm hoặc xóa để tạo khoảng cách.

Câu hỏi thường gặp

Văn bản của tôi có bị tải lên đâu không?
Không. Việc so sánh chạy hoàn toàn trong trình duyệt bằng JavaScript. Không có gì bạn dán được gửi tới máy chủ, nên bạn có thể yên tâm so sánh mã riêng tư, hợp đồng hay tệp cấu hình.
Văn bản có thể dài tới mức nào?
Tệp hàng chục nghìn dòng được so sánh chưa tới một giây trên laptop thông thường. Vì chi phí thuật toán tăng theo số lượng khác biệt, hai tệp khổng lồ khác nhau hoàn toàn sẽ mất nhiều thời gian nhất.
Tôi có thể so sánh hai tệp thay vì dán không?
Có. Dùng nút Mở tệp phía trên mỗi ô để tải tệp cục bộ. Tệp được trình duyệt đọc và không bao giờ bị tải lên.
Vì sao một dòng hiển thị là bị xóa và được thêm thay vì đã sửa?
Các dòng chỉ được ghép thành “đã sửa” khi một khối dòng bị xóa nằm ngay cạnh một khối dòng được thêm. Nếu hai dòng có rất ít phần chung, tô sáng theo từng từ sẽ bị bỏ qua vì nó còn rối hơn việc hiển thị cả dòng là đã thay đổi.
Làm sao so sánh object JSON?
Dùng công cụ JSON Diff. Nó so sánh cấu trúc đã phân tích, nên thứ tự khóa và định dạng không tạo ra khác biệt giả, và nó liệt kê chính xác các đường dẫn đã thay đổi.

Công cụ liên quan