Tìm hiểu về trailing whitespace trong Git

Điểm bài viết
[Tổng cộng: 0 Trung bình: 0]

Share vì hữu ích

Các vấn đề khi review code mà do trailing whitespace (khoảng cách) tạo ra làm nhiều người mới làm quen với Git rất đau đầu. Code Tốt sẽ hướng dẫn bạn cách khắc phục điều này.

Trailing whitespace là gì?

Đây là các khoảng cách được thêm vào code một cách không đồng đều dẫn tới khi review code trên Git hoặc merge code bị lệch.

Chẳng hạn, bạn thấy thêm một dòng trắng mới và xóa một dòng trắng cũ, trong khi code của phần đó thực ra không thay đổi gì cả.

Bởi vì bạn dùng Git, mỗi dòng bạn thêm vào hay thay đổi đều thể hiện, nên nếu Trailing whitespace xuất hiện, bạn sẽ thấy hàng chục dòng như vậy trong mỗi file.

Trailing Whitespace có thể khắc phục như thế nào?

Rất may là hầu hết các trình soạn thảo code (IDE) đều có cấu hình giúp bạn fix vấn đề này. Lưu ý là bạn chỉ nên can thiệp vấn đề này NẾU code này là do bạn hoặc team viết nhé. Không nên chạm vào các plugin hay third party do bên khác viết. Code Tốt lấy ví dụ với hai IDE phổ thông nhất:

Cấu hình Trailing whitespace trong Phpstorm

Truy cập menu: Settings | Editor | Strip trailing spaces on Save | All

Ngoài ra, bạn nên thiết lập thêm trong PHP bằng cách vào menu: Default Settings | Editor | Code Style | PHP | Tabs and Indents (tab) và bỏ dấu tick của lựa chọn “Keep Indents on Empty Lines”.

Mẹo: Nếu bạn có code cũ và code mới với space khác nhau, bạn có thể kiểm tra bằng cách vào menu Editor | General | Appearance | Show Whitespaces nhé,

Cấu hình trailing whitespace trong Sublime

Truy cập menu: File Settings – User

Tìm tới mục trim_trailing_white_space_on_save đổi thành “true”

Cấu hình trực tiếp trong Git

Bản thân Git cũng cho phép bạn chạy hook pre-commit để remove các khoảng cách trong commit. Bạn thực hiện lệnh sau:

mv .git/hooks/pre-commit.sample .git/hooks/pre-commit

File trên khi được bật sẽ làm nhiệm vụ kiểm tra các file có khoảng cách thừa và không commit nó.

Trường hợp trailing whitespace của bên khác

Giờ, ta có một vấn đề khác. Đó là các plugin của WordPress, chẳng hạn như Yoast SEO, cũng nằm trong project của Git và cần commit.

Ta commit thử và phát hiện ra:

git add .
git commit -m "Update plugin Yoast SEO"
wp-content/plugins/wordpress-seo/vendor_prefixed/ruckusing/lib/Ruckusing/FrameworkRunner.php:472: trailing whitespace.
+\t- db:status : With this taks you'll get an overview of the already
wp-content/plugins/wordpress-seo/vendor_prefixed/ruckusing/lib/Ruckusing/FrameworkRunner.php:473: trailing whitespace.
+\texecuted migrations and which will be executed when running db:migrate
wp-content/plugins/wordpress-seo/vendor_prefixed/ruckusing/lib/Ruckusing/FrameworkRunner.php:474: trailing whitespace.
+
wp-content/plugins/wordpress-seo/vendor_prefixed/ruckusing/lib/Ruckusing/FrameworkRunner.php:475: trailing whitespace.
+\t- db:schema : It can be beneficial to get a dump of the DB in raw SQL
wp-content/plugins/wordpress-seo/vendor_prefixed/ruckusing/lib/Ruckusing/FrameworkRunner.php:476: trailing whitespace.
+\tformat which represents the current version.

Sau đó không thấy tạo ra commit nào mới cả.

Đó là bởi vì Git đã nhận ra các file trong plugin này chứa trailing whitespace và ngăn chúng ta commit. Vậy cách xử lý ra sao? Bạn không

Bạn không nên chạm vào file nào trong các plugin, vì đó là của người khác. Bạn thực hiện lại, nhưng với option “–no-verify” đi kèm phía sau:

git add .
git commit -m "Update plugins" --no-verify

Như vậy, commit sẽ vẫn được tạo và bạn có thể yên tâm đẩy code lên.

create mode 100644 wp-content/plugins/wordpress-seo/vendor_prefixed/ruckusing/lib/Task/Db/Status.php
create mode 100644 wp-content/plugins/wordpress-seo/vendor_prefixed/ruckusing/lib/Task/Db/Version.php
create mode 100644 wp-content/plugins/wordpress-seo/vendor_prefixed/ruckusing/lib/Task/Hello/World.php
create mode 100644 wp-content/plugins/wordpress-seo/vendor_prefixed/ruckusing/lib/version.php

Kết luận

Sử dụng cài đặt để gỡ bỏ trailing whitespace trong code là cần thiết, đặc biệt là với các máy tính sử dụng Windows vì khi commit lên Git thường hay tự động thêm trailing whitespace vào dẫn tới khó quản lý code về sau này.

Ngoài ra, bạn cũng lưu ý cách commit cả trailing whitespace trong trường hợp cần thiết nhé.

Tham khảo

Share vì hữu ích

Previous Article
avatar
  Subscribe  
Notify of