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
Giám đốc tại Công ty CP CODE TỐT. Quản lý ngôn ngữ bản địa tiếng Việt tại WordPress. Là tác giả chính tại codetot.net, Khôi muốn ghi lại một sốvấn đề kỹ thuật trong quá trình phát triển các dự án website với khách hàng.