GitHub é¢æäº¤é©åæå | AIçæåç¿»è¯
é®é¢ï¼ å¦ä½ä½¿ç¨å¸¦æ .pre-commit-config.yaml æä»¶ç pre-commit hooksï¼ä»¥åå½ä»åºæç®¡å¨ GitHub 䏿¶ï¼å®ä»¬æ¯å¦ææï¼
åçï¼
æ¦è¿°
pre-commit æ¡æ¶ç pre-commit hooks æ¬è´¨ä¸æ¯ client-side çââå®ä»¬å¨æ¯ä¸ªå¼åè
çæ¬å°æºå¨ä¸è¿è¡ã使¯ï¼æ¨å¯ä»¥ä½¿ç¨ä¸¤ä¸ªäºè¡¥çå±ï¼
- Local hooks ââ 卿¯ä¸ªå¼åè
çæºå¨ä¸ï¼å¨æ¯æ¬¡
git commitä¹åè¿è¡ - Server-side / CI enforcement ââ éè¿ GitHub Actions æ pre-commit.ci å¨ GitHub ä¸è¿è¡
第ä¸é¨åï¼æ¬å°è®¾ç½®ï¼æ¯ä¸ªå¢éæåé½å¿ é¡»æ§è¡æ¤æä½ï¼
æ¥éª¤ 1 â å®è£
pre-commit å·¥å
·
pip install pre-commit
æ¥éª¤ 2 â å° .pre-commit-config.yaml æäº¤å°æ¨çä»åº
æ¤æä»¶ï¼æ¨å±ç¤ºçæä»¶ï¼åºä½äºä»åºæ ¹ç®å½ï¼å¹¶åå
¶ä»æä»¶ä¸æ ·æäº¤ãå®éè¦ä¸ºæ¯ä¸ª hook æ¥æºæå®ä¸ä¸ª revï¼çæ¬æ ç¾ï¼ï¼
# .pre-commit-config.yaml
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0 # <-- specify a version tag!
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- repo: https://github.com/psf/black
rev: 23.12.0 # <-- specify a version tag!
hooks:
- id: black
æ¥éª¤ 3 â å° hooks å®è£ å°æ¬å° git ä»åº
pre-commit install
è¿ä¼å° hook èæ¬å®è£
å°æ¨ç .git/hooks ç®å½ä¸ï¼å æ¤ pre-commit ç°å¨ä¼å¨æ¯æ¬¡ git commit æ¶èªå¨è¿è¡ã
æ¥éª¤ 4 â ï¼å¯éï¼æå¨è¿è¡æææä»¶
pre-commit run --all-files
第äºé¨åï¼æäº¤æ¶ä¼åçä»ä¹
pre-commit hook 卿¨è¾å ¥æäº¤æ¶æ¯ä¹åé¦å è¿è¡ã妿å®ä»¥éé¶éåºï¼æäº¤å°è¢«ä¸æ¢ãæ¨ä¼çå°ç±»ä¼¼ä»¥ä¸è¾åºï¼
Trim Trailing Whitespace.......................Passed
Fix End of Files...............................Passed
black..........................................Failed
- hook id: black
- files were modified by this hook
å½ hooks auto-fix æä»¶ï¼ä¾å¦ Black éæ°æ ¼å¼å代ç ï¼æ¶ï¼è¢«ä¿®æ¹çæä»¶å°ä½ä¸ºæªæåæ´æ¹ä¿çãæ¨å¿ é¡»æåå®ä»¬å¹¶å次æäº¤ï¼
git add .
git commit -m "your message"
æ¨å§ç»éè¦æåå¹¶æäº¤ hooks æåç任使´æ¹ââè¿è®©æ¨å¯¹è¿å ¥ä»£ç åºçå 容ææç»å³å®æã
è¦ä¸´æ¶ç»è¿ hooksï¼è¯·è°¨æ 使ç¨ï¼ï¼
git commit -m "WIP" --no-verify
第ä¸é¨åï¼å®ä¸ GitHub æç®¡çä»åºå ¼å®¹åï¼
å ³é®éå¶
pre-commit hooks æ¯ client-side çââå®ä»¬ç±æ¬å°æä½ï¼å¦æäº¤ååå¹¶ï¼è§¦åï¼è䏿¯æå¡å¨ç«¯ç½ç»æä½ãè¿æå³çï¼
- GitHub ä¸ä¼èªå¨è¿è¡å®ä»¬
- 妿å¢éæå没æè¿è¡
pre-commit installï¼ä»ä»¬çæäº¤å°å®å ¨ç»è¿ hooks - éè¿ GitHub web UI è¿è¡çæäº¤å®å ¨è·³è¿æ¬å° hooks
è§£å³æ¹æ¡ Aï¼GitHub Actionsï¼æ¨èç¨äºå¢éï¼
æäººå¯è½éè¿ GitHub UI å建æå请æ±ï¼å¨è¿ç§æ åµä¸ pre-commit hooks ä¸ä¼åçè¿è¡ãè¦å¨æ¯æ¬¡ push/PR ä¸å¼ºå¶æ§è¡ hooksï¼è¯·æ·»å ä¸ä¸ªå·¥ä½æµæä»¶ï¼
# .github/workflows/pre-commit.yml
name: pre-commit
on:
pull_request:
push:
branches: [main]
jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v3
- uses: pre-commit/action@v3.0.1
é»è®¤æ
åµä¸ï¼æ¤ action ä¼éå¯¹æææä»¶è¿è¡ææ hooksãæ¨ä¹å¯ä»¥éè¿ extra_args æå®å个 hookã
è§£å³æ¹æ¡ Bï¼pre-commit.ciï¼æç®åé项ï¼
æ¨å¯ä»¥å¨æ¬å°åäºç«¯è¿è¡ hooksãä½ä¸ºä½¿ç¨ https://pre-commit.ci ç CI æ£æ¥ï¼æ¨å¯ä»¥å¼ºå¶æå请æ±éè¿ hooksï¼å¹¶èªå¨ä¿®å¤å¦æ ·å¼ç trivial é®é¢ï¼å³ä½¿æäº¤è
æ²¡ææ¬å°å®è£
ã
åªéå¨ pre-commit.ci ç»å½ï¼è¿æ¥æ¨ç GitHub ä»åºï¼å®å°±ä¼å¤çä¸åââæ éé¢å¤ç workflow æä»¶ã
æ»ç»è¡¨æ ¼
å¢éçæ¨èæ¹æ³æ¯ä¸¤è å ¼ç¨ï¼æ¬å° hooks ç¨äºå¿«éåé¦ï¼å ä¸ GitHub Actions æ pre-commit.ci ä½ä¸ºå®å ¨ç½ã
åèèµæï¼
- pre-commit 宿¹ææ¡£
- pre-commit/action on GitHub Marketplace
- Stefanie Molin â How to Set Up Pre-Commit Hooks
- Running pre-commit hooks as GitHub Actions
- pre-commit.ci
