Giới thiệu về pre-commit và cách sử dụng hiệu quả
Dù chúng ta có tiềm năng to lớn, nhưng vẫn thường phải xử lý nhiều công việc thủ công. Trong việc kiểm soát mã nguồn, chúng ta cần ai đó hoặc một công cụ để kiểm tra lỗi hiện tại hoặc có thể xảy ra. Git đã phát triển hooks để tự động hóa quá trình kiểm tra này, nhưng những hooks đó vẫn là đoạn mã cần viết và duy trì... Và đây là lúc pre-commit
xuất hiện!
pre-commit là gì?
pre-commit
là một framework giúp quản lý và duy trì các pre-commit hooks cho nhiều ngôn ngữ lập trình. Nó giúp phát hiện các lỗi phổ biến — như lỗi cú pháp, vi phạm quy tắc coding style và các dòng debug bị quên — trước khi bạn thực hiện commit mã nguồn.
Hướng dẫn này sẽ giúp bạn cài đặt, cấu hình và sử dụng pre-commit
trong dự án của mình.
Giới thiệu
pre-commit
tự động chạy các script (hooks) trước khi commit được hoàn tất, đảm bảo mã nguồn tuân theo tiêu chuẩn của bạn. Bằng cách phát hiện lỗi sớm, nó giúp tiết kiệm thời gian và duy trì chất lượng mã nguồn trong suốt vòng đời dự án.
Cài đặt
1. Sử dụng pip
Cài đặt pre-commit thông qua pipx:
sudo apt-get update && sudo apt-get install python3-pip3 pipx -y
pipx install pre-commit
2. Xác nhận cài đặt
Sau khi cài đặt, bạn có thể kiểm tra bằng lệnh:
pre-commit --version
Cấu hình
pre-commit
sử dụng một tập tin cấu hình có tên .pre-commit-config.yaml
đặt tại thư mục gốc của dự án (lưu ý dấu . ở đầu tên file). File này xác định các repository của hooks và các hooks cần chạy.
Ví dụ cấu hình: Tạo một tệp có tên .pre-commit-config.yaml
với nội dung sau:
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0 # Use the desired revision
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- repo: https://github.com/psf/black
rev: 23.1.0 # Use the appropriate version for your project
hooks:
- id: black
- repo: https://github.com/pycqa/flake8
rev: 6.0.0
hooks:
- id: flake8
Trong đó:
- Sử dụng các hooks phổ biến từ pre-commit-hooks để tự động sửa lỗi định dạng.
- Tích hợp Black để định dạng mã Python theo chuẩn PEP 8.
- Tích hợp Flake8 để kiểm tra linting và phát hiện lỗi cú pháp.
Kích hoạt pre-commit trong dự án
Sau khi tạo tệp cấu hình, chạy lệnh sau để cài đặt hooks cho repo của bạn:
pre-commit install
Bây giờ, mỗi lần bạn commit code (git commit
), các hooks sẽ tự động chạy và kiểm tra lỗi trước khi commit được thực hiện.
Chạy Hooks thủ công
Bạn có thể chạy tất cả các hooks đã cấu hình trên tất cả các tệp bất kỳ lúc nào bằng lệnh sau:
pre-commit run --all-files
Lệnh này sẽ kiểm tra và áp dụng tất cả các hooks lên toàn bộ tệp trong dự án, giúp bạn đảm bảo mã nguồn tuân thủ quy tắc ngay cả trước khi commit.
Bỏ qua Hooks khi Commit
Nếu cần thiết, bạn có thể bỏ qua pre-commit hooks khi thực hiện commit bằng cách sử dụng --no-verify flag:
git commit -m "Your commit message" --no-verify
Lệnh này sẽ thực hiện commit mà không chạy các hooks, hữu ích khi bạn cần bypass các kiểm tra trong một số trường hợp đặc biệt.
Cập nhật Hooks mới
Sử dụng lệnh:
pre-commit autoupdate
Sau khi cập nhật, hãy kiểm tra lại các thay đổi trong tệp .pre-commit-config.yaml
Tùy chỉnh Hooks
Một số hooks cho phép tùy chỉnh bằng cách truyền tham số. Ví dụ, bạn có thể cấu hình isort để hoạt động cùng với Black bằng cách thêm các đối số vào .pre-commit-config.yaml
:
repos:
- repo: https://github.com/pre-commit/mirrors-isort
rev: v5.10.1
hooks:
- id: isort
args: ['--profile', 'black']
Giải thích:
- isort sẽ sắp xếp các import theo phong cách của Black.
- --profile black flag đảm bảo isort và Black hoạt động đồng bộ, tránh xung đột định dạng.
Sử dụng pre-commit trong CI/CD
Để chạy pre-commit trong pipeline CI/CD, bạn có thể thêm lệnh sau vào quá trình kiểm tra mã nguồn:
pre-commit run --all-files --verbose
Lệnh này sẽ:
- Chạy tất cả các hooks trên toàn bộ tệp.
- Hiển thị chi tiết sự khác biệt nếu có lỗi.
Xử lý sự cố
- Hooks không chạy: Kiểm tra xem tệp
pre-commit
đã được cài đặt chưa và.pre-commit-config.yaml
nằm trong thư mục gốc của kho lưu trữ chưa. - Lỗi Hook: Xem lại các thông báo lỗi do hook cung cấp. Thông thường, chúng sẽ chỉ ra cách khắc phục các sự cố như lỗi định dạng hoặc lỗi kiểm tra.
- Bỏ qua Hook: Hãy nhớ rằng mặc dù bạn có thể bỏ qua hook bằng
--no-verify
, nhưng làm như vậy có thể khiến mã có vấn đề được xác nhận.
Kết luận
Hy vọng rằng bạn thấy phần này có thông tin hữu ích và có được kỹ năng để nâng cao bản thân, hãy nhớ rằng pre-commit
là công cụ mạnh mẽ để duy trì chất lượng mã. Bắt đầu với thiết lập cơ bản và khám phá những gì phù hợp với dự án của bạn dựa trên tài liệu và các nguồn khác.
All rights reserved