blog.dopana

Back

Có bao giờ bạn chạy lệnh git diff để xem lại những dòng code mình vừa viết, nhưng đập vào mắt lại là hàng ngàn dòng thay đổi của file package-lock.json hay bun.lock không? Nó giống như việc bạn muốn tìm một cuốn sách trên bàn làm việc nhưng lại bị che khuất bởi hàng đống giấy nháp vậy.

Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách để Git “ngó lơ” nội dung chi tiết của những file này mỗi khi so sánh thay đổi nhé!

Vấn Đề Với File Lock#

Khi làm việc với các package manager như npm, yarn, pnpm, hay bun, chúng sẽ tạo ra một file “khóa” (lock file). File này ghi lại chính xác phiên bản của từng thư viện mà dự án đang dùng.

[!NOTE] Mục đích của lock file là để đảm bảo bất kỳ ai tải dự án về đều cài đặt được đúng những phiên bản đó, giúp tránh lỗi “chạy được trên máy tôi nhưng lỗi trên máy bạn”.

Vấn đề là, mỗi khi bạn cài thêm hay cập nhật một thư viện nhỏ, nội dung của file lock này có thể thay đổi hàng trăm, thậm chí hàng ngàn dòng. Khi gõ git diff, những thay đổi này sẽ làm lu mờ đi những thay đổi thực sự trong source code của bạn, khiến việc review code trở nên khó khăn.

Giải Pháp: Sử Dụng .gitattributes#

Cách đơn giản và hiệu quả nhất để ẩn nội dung của file lock là sử dụng cấu hình .gitattributes. Cấu hình này sẽ bảo Git rằng: “Này, tôi biết file này có thay đổi đấy, nhưng đừng có in nội dung so sánh chi tiết ra màn hình nhé!”.

Cấu Hình Bằng .gitattributes#

Bước 1: Tạo hoặc mở file .gitattributes ở thư mục gốc (root) của dự án.

Bước 2: Thêm dòng sau vào file:

.gitattributes
*.lock -diff
text

Hoặc nếu bạn muốn chỉ định đích danh từng file:

.gitattributes
package-lock.json -diff
bun.lockb -diff
bun.lock -diff
composer.lock -diff
text

Bước 3: Lưu file lại. Thuộc tính -diff sẽ ra lệnh cho Git không sinh ra dòng lệnh so sánh nội dung khi file này thay đổi.

[!TIP] Bạn vẫn sẽ thấy các file lock hiển thị trong trạng thái “modified” khi gõ git status, nhưng nội dung chi tiết sẽ bị ẩn đi trong git diff.

Ẩn Trực Tiếp Bằng Command Line#

Nếu bạn không muốn sửa file .gitattributes, bạn có thể loại trừ trực tiếp trong câu lệnh git diff:

Terminal
git diff -- . ':(exclude)*.lock'
bash

Và để không phải gõ lệnh dài dòng này nhiều lần, bạn có thể tạo một alias ngắn gọn trong file cấu hình ~/.gitconfig của mình:

~/.gitconfig
[alias]
  d = diff -- . ':(exclude)*.lock'
ini

Giờ đây, bạn chỉ cần gõ git d là có thể xem thay đổi mà không bị làm phiền bởi các file lock nữa!

Tài Liệu Tham Khảo#