0
0
Posts
Admin Team
Admin Teamtechmely

Hướng dẫn chi tiết về pre-commit và cách tận dụng hiệu quả trong lập trình

Đăng vào 1 tuần trước

• 4 phút đọc

Chủ đề:

development

Giới thiệu về pre-commit

Trong thế giới lập trình ngày nay, việc duy trì mã nguồn sạch sẽ và tiêu chuẩn hóa là điều vô cùng quan trọng. Mặc dù chúng ta có tiềm năng lớn, nhưng nhiều khi chúng ta vẫn phải xử lý các công việc thủ công. Với việc kiểm soát mã nguồn, có một công cụ hoặc một người để kiểm tra lỗi tồn tại hoặc có thể xảy ra là cần thiết. Git đã phát triển các hooks để tự động hóa quy trình này, nhưng chúng vẫn cần được viết và duy trì mới hiệu quả. Đó chính là lý do tại sao pre-commit ra đời!

pre-commit là gì?

pre-commit là một framework mạnh mẽ giúp bạn quản lý và duy trì các pre-commit hooks cho nhiều ngôn ngữ lập trình. Nó tự động phát hiện những 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ị bỏ quên trước khi bạn thực hiện commit vào mã nguồn.

Hướng dẫn này sẽ chỉ cho bạn cách cài đặt, cấu hình và sử dụng pre-commit trong dự án của bạn.

Tại sao nên sử dụng pre-commit?

pre-commit tự động chạy các script (hooks) trước khi commit được thực hiện, đảm bảo mã nguồn của bạn tuân theo các tiêu chuẩn mà bạn đã đề ra. Điều này giúp bạn phát hiện lỗi sớm, tiết kiệm thời gian và duy trì chất lượng mã nguồn trong suốt vòng đời của dự án.

Cách cài đặt pre-commit

1. Sử dụng pip

Bạn có thể cài đặt pre-commit thông qua pipx bằng cách chạy các lệnh sau:

bash Copy
sudo apt-get update && sudo apt-get install python3-pip pipx -y 
pipx install pre-commit

2. Xác nhận cài đặt

Sau khi cài đặt, hãy kiểm tra phiên bản đã cài bằng lệnh:

bash Copy
pre-commit --version

Cấu hình pre-commit

pre-commit sử dụng một tập tin cấu hình có tên .pre-commit-config.yaml được đặt tại thư mục gốc của dự án (lưu ý rằng tên tệp bắt đầu bằng dấu chấm). Tệp này xác định các repository của hooks và những hooks nào 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:

yaml Copy
repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.4.0
    hooks:
      - id: trailing-whitespace
      - id: end-of-file-fixer
  - repo: https://github.com/psf/black
    rev: 23.1.0
    hooks:
      - id: black
  - repo: https://github.com/pycqa/flake8
    rev: 6.0.0
    hooks:
      - id: flake8

Trong cấu hình này:

  • Sử dụng các hooks hữu ích từ pre-commit-hooks để tự động sửa lỗi định dạng.
  • Tích hợp Black để định dạng mã Python theo tiêu 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 bạn đã tạo tệp cấu hình, hãy chạy lệnh sau để cài đặt hooks cho repository của bạn:

bash Copy
pre-commit install

Bây giờ, mỗi lần bạn thực hiện commit code với lệnh git commit, các hooks sẽ tự động chạy và kiểm tra lỗi trước khi việc commit hoàn tất.

Chạy Hooks thủ công

Ngoài việc chạy tự động khi commit, 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 trong dự án bất kỳ lúc nào sử dụng lệnh:

bash Copy
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ộ mã nguồn của dự án.

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 cờ --no-verify:

bash Copy
git commit -m "Your commit message" --no-verify

Lệnh này sẽ thực hiện việc commit mà không chạy các hooks, hữu ích trong một số tình huống đặc biệt.

Cập nhật Hooks mới

Bạn có thể cập nhật các hooks bằng lệnh:

bash Copy
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 các 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:

yaml Copy
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.
  • Cờ --profile black đảm bảo rằng isortBlack hoạt động đồng bộ, tránh xung đột về định dạng.

Sử dụng pre-commit trong CI/CD

Để chạy pre-commit trong quy trình CI/CD, bạn có thể thêm lệnh sau vào quá trình kiểm tra mã nguồn:

bash Copy
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ảy ra.

Xử lý sự cố

  • Hooks không chạy: Kiểm tra xem tệp pre-commit đã được cài đặt chưa và tệp .pre-commit-config.yaml đã nằm trong thư mục gốc của repository chưa.
  • Lỗi Hook: Xem lại các thông báo lỗi từ hook để biết cách khắc phục.
  • Bỏ qua Hook: Nhớ rằng việc bỏ qua hook bằng --no-verify có thể dẫn đến việc mã không đạt yêu cầu được commit vào repository.

Kết luận

Hy vọng bài viết này sẽ giúp bạn hiểu rõ hơn về pre-commit và tận dụng nó hiệu quả trong quy trình phát triển phần mềm. Hãy bắt đầu với thiết lập cơ bản và khám phá những gì phù hợp nhất với dự án của bạn để duy trì chất lượng mã nền tảng tốt nhất.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào