hooks บางอย่างที่พร้อมใช้งานทันทีสำหรับการคอมมิตล่วงหน้า
ดูเพิ่มเติมที่: https://github.com/pre-commit/pre-commit
เพิ่มสิ่งนี้ลงใน .pre-commit-config.yaml
ของคุณ
- repo: https://github.com/pre-commit/pre-commit-hooksrev: v5.0.0 # ใช้การอ้างอิงที่คุณต้องการชี้ athooks: - id: ช่องว่างต่อท้าย # - id: ...
check-added-large-files
ป้องกันไม่ให้ไฟล์ขนาดใหญ่ถูกคอมมิต
ระบุสิ่งที่ "ใหญ่เกินไป" ด้วย args: ['--maxkb=123']
(default=500kB)
จำกัดไฟล์ที่ตรวจสอบไว้เฉพาะไฟล์ที่ระบุว่าเป็นขั้นตอนสำหรับการเพิ่มเติมโดย git
หากติดตั้ง git-lfs
ไฟล์ lfs จะถูกข้ามไป (ต้องใช้ git-lfs>=2.2.1
)
--enforce-all
- ตรวจสอบไฟล์ที่อยู่ในรายการทั้งหมด ไม่ใช่แค่ไฟล์ที่จัดฉากเพื่อเพิ่มเท่านั้น
check-ast
เพียงตรวจสอบว่าไฟล์แยกวิเคราะห์เป็นหลามที่ถูกต้องหรือไม่
check-builtin-literals
ต้องใช้ไวยากรณ์ตามตัวอักษรเมื่อเริ่มต้นประเภท Python บิวด์อินที่ว่างเปล่าหรือเป็นศูนย์
อนุญาตให้เรียกตัวสร้างด้วยอาร์กิวเมนต์ตำแหน่ง (เช่น list('abc')
)
อนุญาตให้เรียกตัวสร้างจากเนมสเปซ builtins
( __builtin__
) ( builtins.list()
)
ละเว้นข้อกำหนดนี้สำหรับประเภทบิวด์อินเฉพาะด้วย --ignore=type1,type2,…
ห้ามไวยากรณ์คำหลัก dict
ด้วย --no-allow-dict-kwargs
check-case-conflict
ตรวจสอบไฟล์ที่มีชื่อที่อาจขัดแย้งกับระบบไฟล์ที่ไม่คำนึงถึงขนาดตัวพิมพ์ เช่น MacOS HFS+ หรือ Windows FAT
check-docstring-first
ตรวจสอบข้อผิดพลาดทั่วไปในการวางโค้ดก่อนสตริงเอกสาร
check-executables-have-shebangs
ตรวจสอบว่าไฟล์ปฏิบัติการที่ไม่ใช่ไบนารี่มี shebang ที่เหมาะสม
check-illegal-windows-names
ตรวจสอบไฟล์ที่ไม่สามารถสร้างบน Windows
check-json
พยายามโหลดไฟล์ json ทั้งหมดเพื่อตรวจสอบไวยากรณ์
check-merge-conflict
ตรวจสอบไฟล์ที่มีสตริงข้อขัดแย้งในการผสาน
--assume-in-merge
- อนุญาตให้เรียกใช้ hook เมื่อไม่มีการดำเนินการผสานที่กำลังดำเนินอยู่
check-shebang-scripts-are-executable
ตรวจสอบว่าสคริปต์ที่มี shebangs สามารถเรียกใช้งานได้
check-symlinks
ตรวจสอบ symlink ที่ไม่ได้ชี้ไปที่สิ่งใด
check-toml
พยายามโหลดไฟล์ TOML ทั้งหมดเพื่อตรวจสอบไวยากรณ์
check-vcs-permalinks
ตรวจสอบให้แน่ใจว่าลิงก์ไปยังเว็บไซต์ vcs เป็นลิงก์ถาวร
--additional-github-domain DOMAIN
- เพิ่มการตรวจสอบโดเมนที่ระบุ สามารถทำซ้ำได้หลายครั้ง ตัวอย่างเช่น หากบริษัทของคุณใช้ GitHub Enterprise คุณอาจใช้บางอย่างเช่น --additional-github-domain github.example.com
check-xml
พยายามโหลดไฟล์ xml ทั้งหมดเพื่อตรวจสอบไวยากรณ์
check-yaml
พยายามโหลดไฟล์ yaml ทั้งหมดเพื่อตรวจสอบไวยากรณ์
--allow-multiple-documents
- อนุญาตไฟล์ yaml ที่ใช้ไวยากรณ์หลายเอกสาร
--unsafe
- แทนที่จะโหลดไฟล์ เพียงแค่แยกวิเคราะห์ไวยากรณ์ การตรวจสอบไวยากรณ์เท่านั้นจะเปิดใช้งานส่วนขยายและโครงสร้างที่ไม่ปลอดภัยซึ่งมิฉะนั้นจะถูกห้าม การใช้ตัวเลือกนี้จะลบการรับประกันความสามารถในการพกพาไปยังการใช้งาน yaml อื่นๆ ทั้งหมด หมายถึง --allow-multiple-documents
debug-statements
ตรวจสอบการนำเข้าดีบักเกอร์และการเรียก py37+ breakpoint()
ในซอร์สหลาม
destroyed-symlinks
ตรวจจับ symlink ที่เปลี่ยนเป็นไฟล์ปกติโดยมีเนื้อหาของเส้นทางที่ symlink ชี้ไป ซึ่งมักจะเกิดขึ้นบน Windows เมื่อผู้ใช้โคลนพื้นที่เก็บข้อมูลที่มีลิงก์สัญลักษณ์แต่ไม่ได้รับอนุญาตให้สร้างลิงก์สัญลักษณ์
detect-aws-credentials
ตรวจสอบการมีอยู่ของความลับ AWS ที่คุณตั้งค่าด้วย AWS CLI อาร์กิวเมนต์ต่อไปนี้มีอยู่:
--credentials-file CREDENTIALS_FILE
- ไฟล์การกำหนดค่าสไตล์ AWS CLI เพิ่มเติมในตำแหน่งที่ไม่ได้มาตรฐานเพื่อดึงข้อมูลรับรองที่กำหนดค่าไว้ สามารถทำซ้ำได้หลายครั้ง
--allow-missing-credentials
- อนุญาตให้ hook ผ่านเมื่อตรวจไม่พบข้อมูลรับรอง
detect-private-key
ตรวจสอบการมีอยู่ของคีย์ส่วนตัว
double-quote-string-fixer
เบ็ดนี้จะแทนที่สตริงที่มีเครื่องหมายคำพูดคู่ด้วยสตริงที่มีเครื่องหมายคำพูดเดี่ยว
end-of-file-fixer
ตรวจสอบให้แน่ใจว่าไฟล์ลงท้ายด้วยบรรทัดใหม่และขึ้นบรรทัดใหม่เท่านั้น
file-contents-sorter
จัดเรียงบรรทัดในไฟล์ที่ระบุ (ค่าเริ่มต้นเป็นตัวอักษร) คุณต้องระบุ files
เป้าหมายเป็นอินพุต โปรดทราบว่าเบ็ดนี้จะลบบรรทัดว่างและไม่เคารพความคิดเห็นใดๆ การขึ้นบรรทัดใหม่ทั้งหมดจะถูกแปลงเป็นการป้อนบรรทัด ( n
)
อาร์กิวเมนต์ต่อไปนี้มีอยู่:
--ignore-case
- พับตัวพิมพ์เล็กเป็นตัวอักษรตัวพิมพ์ใหญ่
--unique
- ตรวจสอบให้แน่ใจว่าแต่ละบรรทัดไม่ซ้ำกัน
fix-byte-order-marker
ลบเครื่องหมายคำสั่ง UTF-8 ไบต์
fix-encoding-pragma
เลิกใช้แล้วเนื่องจาก py2 คือ EOL - ใช้ pyupgrade แทน
เพิ่ม # -*- coding: utf-8 -*-
ที่ด้านบนของไฟล์ python
หากต้องการลบการเข้ารหัส pragma pass --remove
(มีประโยชน์ในโค้ดเบสของ python3 เท่านั้น)
forbid-new-submodules
ป้องกันการเพิ่มโมดูลย่อย git ใหม่
สิ่งนี้มีจุดประสงค์เพื่อเป็นผู้ช่วยในการย้ายออกจากโมดูลย่อย หากคุณต้องการแบนพวกเขาทั้งหมดให้ใช้ forbid-submodules
forbid-submodules
ห้ามโมดูลย่อยใด ๆ ในพื้นที่เก็บข้อมูล
mixed-line-ending
แทนที่หรือตรวจสอบการสิ้นสุดบรรทัดแบบผสม
--fix={auto,crlf,lf,no}
ตัวเลือกนี้เข้ากันไม่ได้กับการตั้งค่า git check-in LF check-out CRLF เนื่องจาก git smudge สิ่งนี้ภายหลังจากการเรียกใช้ hook
auto
- แทนที่การลงท้ายบรรทัดที่พบบ่อยที่สุดโดยอัตโนมัติ นี่คืออาร์กิวเมนต์เริ่มต้น
crlf
, lf
- บังคับให้แทนที่บรรทัดที่ลงท้ายด้วย CRLF และ LF ตามลำดับ
no
- ตรวจสอบว่ามีบรรทัดผสมที่ลงท้ายโดยไม่มีการแก้ไขไฟล์ใดๆ หรือไม่
name-tests-test
ตรวจสอบว่าไฟล์ทดสอบได้รับการตั้งชื่ออย่างถูกต้อง
--pytest
(ค่าเริ่มต้น): ตรวจสอบให้แน่ใจว่าการทดสอบตรงกัน .*_test.py
--pytest-test-first
: ตรวจสอบให้แน่ใจว่าการทดสอบตรงกับ test_.*.py
--django
/ --unittest
: ตรวจสอบให้แน่ใจว่าการทดสอบตรงกับ test.*.py
no-commit-to-branch
ปกป้องสาขาเฉพาะจากการเช็คอินโดยตรง
ใช้ args: [--branch, staging, --branch, main]
เพื่อตั้งค่าสาขา ทั้ง main
และ master
ได้รับการปกป้องตามค่าเริ่มต้น หากไม่มีการตั้งค่าอาร์กิวเมนต์สาขา
-b
/ --branch
สามารถระบุได้หลายครั้งเพื่อป้องกันหลายสาขา
-p
/ --pattern
สามารถใช้เพื่อปกป้องสาขาที่ตรงกับ regex ที่ให้มา (เช่น --pattern, release/.*
) สามารถระบุได้หลายครั้ง
โปรดทราบว่า no-commit-to-branch
ได้รับการกำหนดค่าตามค่าเริ่มต้นเป็น always_run
ด้วยเหตุนี้ ระบบจะเพิกเฉยต่อการตั้งค่าใดๆ ของ files
, exclude
, types
หรือ exclude_types
ตั้งค่า always_run: false
เพื่ออนุญาตให้ข้าม hook นี้ตามตัวกรองไฟล์เหล่านี้ Caveat: ในการกำหนดค่านี้ hook นี้อนุญาตการคอมมิตว่าง ( git commit --allow-empty
) เสมอ
pretty-format-json
ตรวจสอบว่าไฟล์ JSON ทั้งหมดของคุณสวย "Pretty" ในที่นี้หมายถึงคีย์ต่างๆ ถูกจัดเรียงและเยื้องไว้ คุณสามารถกำหนดค่านี้ได้โดยใช้ตัวเลือกบรรทัดคำสั่งต่อไปนี้:
--autofix
- จัดรูปแบบไฟล์ json โดยอัตโนมัติ
--indent ...
- ควบคุมการเยื้อง (ตัวเลขสำหรับจำนวนช่องว่างหรือสตริงช่องว่าง) ค่าเริ่มต้นคือ 2 ช่องว่าง
--no-ensure-ascii
รักษาอักขระ Unicode ไว้แทนการแปลงเป็นลำดับหลีก
--no-sort-keys
- เมื่อแก้ไขอัตโนมัติ ให้คงลำดับคีย์ดั้งเดิมไว้ (แทนที่จะเรียงลำดับคีย์)
--top-keys comma,separated,keys
- คีย์ที่จะเก็บไว้ที่ด้านบนของการแมป
requirements-txt-fixer
เรียงลำดับรายการใน Requirements.txt และ Constraints.txt และลบรายการที่ไม่ถูกต้องสำหรับ pkg-resources==0.0.0
sort-simple-yaml
จัดเรียงไฟล์ YAML แบบง่ายซึ่งประกอบด้วยคีย์ระดับบนสุดเท่านั้น โดยรักษาความคิดเห็นและการบล็อกไว้
โปรดทราบว่า sort-simple-yaml
ตามค่าเริ่มต้นไม่ตรงกับ files
ใดๆ เนื่องจากบังคับใช้รูปแบบที่เฉพาะเจาะจงมาก คุณต้องเลือกใช้สิ่งนี้โดยตั้งค่า files
เช่น:
- id: sort-simple-yamlfiles: ^config/simple/
trailing-whitespace
ตัดช่องว่างต่อท้าย
เพื่อรักษาการแบ่งบรรทัดแบบฮาร์ดของ Markdown ให้ใช้ args: [--markdown-linebreak-ext=md]
(หรือส่วนขยายอื่น ๆ ที่ไฟล์ markdown ของคุณใช้) หากด้วยเหตุผลบางอย่างที่คุณต้องการถือว่าไฟล์ทั้งหมดเป็นแบบ markdown ให้ใช้ --markdown-linebreak-ext=*
ตามค่าเริ่มต้น hook นี้จะตัดแต่งช่องว่างทั้งหมดจากปลายบรรทัด หากต้องการระบุชุดอักขระที่กำหนดเองเพื่อตัดแต่งแทน ให้ใช้ args: [--chars,"<chars to trim>"]
check-byte-order-marker
: ใช้ fix-byte-order-marker แทน
หากคุณต้องการใช้ตะขอเหล่านี้ มีจำหน่ายแบบแพ็คเกจแยกกันด้วย
เพียง pip install pre-commit-hooks