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

Rate this post

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

Viết một bình luận


Chuyên gia về Web
Bạn muốn làm việc với dịch vụ website do chúng tôi triển khai?
Gọi tư vấn 0982.90.4343
Chuyên gia về Web
Bài viết liên quan

07/04/2024

PHP: Format date dd/mm/yyyy và so sánh với Date hiện tại
Một vấn đề hay gặp trong quá trình xử lý PHP datetime là tình huống format date từ định dạng...

02/01/2024

Fix lỗi npm không thể cài các package devDependencies
Khi cài đặt dự án,  có lúc bạn sẽ cài mãi cũng không đủ các package npm, đặc biệt là...
Gọi file PHP trong WordPress

19/09/2023

Cài đặt và sử dụng WP-CLI trên môi trường Linux
Trên một số môi trường Hosting có thể cung cấp SSH hoặc Terminal access, song không có sẵn WP-CLI để...
Import database MySQL lớn trên môi trường Docker

06/08/2023

Import database MySQL lớn trên môi trường Docker
Mình sử dụng EasyPanel để quản lý các Docker và build môi trường app. Nay gặp tình huống phải import...