จัดการ git hooks ได้อย่างง่ายดายในการกำหนดค่าผู้แต่งของคุณ เครื่องมือบรรทัดคำสั่งนี้ทำให้ง่ายต่อการใช้งาน git hooks ทั่วทั้งโปรเจ็กต์ที่สอดคล้องกัน การระบุ hooks ในไฟล์ผู้แต่งจะทำให้สมาชิกทุกคนในทีมโปรเจ็กต์สามารถใช้งานได้ สิ่งนี้ทำให้เกิดสภาพแวดล้อมและพฤติกรรมที่สม่ำเสมอสำหรับทุกคนซึ่งเป็นสิ่งที่ดีมาก นอกจากนี้ยังสามารถใช้เพื่อจัดการ git hooks ทั่วโลกสำหรับทุกพื้นที่เก็บข้อมูลบนคอมพิวเตอร์ของคุณ ด้วยวิธีนี้ คุณจะมีชุดตะขอที่เชื่อถือได้ซึ่งสร้างขึ้นด้วยตัวเองสำหรับทุกโครงการที่คุณเลือกทำงาน
เพิ่มส่วน hooks
ให้กับส่วน extra
ของ composer.json
ของคุณ และเพิ่ม hooks ที่นั่น
{
"extra" : {
"hooks" : {
"pre-commit" : [
"echo committing as $(git config user.name)" ,
"php-cs-fixer fix ." // fix style
] ,
// verify commit message. ex: ABC-123: Fix everything
"commit-msg" : "grep -q '[A-Z]+-[0-9]+.*' $1" ,
"pre-push" : [
"php-cs-fixer fix --dry-run ." // check style
"phpunit"
] ,
"post-merge" : "composer install"
"..." : "..."
}
}
}
จากนั้นติดตั้งด้วย
composer require --dev brainmaestro/composer-git-hooks
สิ่งนี้จะติดตั้งไบนารี cghooks
ไปยังโฟลเดอร์ vendor/bin
ของคุณ หากโฟลเดอร์นี้ไม่อยู่ในเส้นทางของคุณ คุณจะต้องนำหน้าทุกคำสั่งด้วย vendor/bin/
หมายเหตุ: hooks ที่ประกาศใน scripts
หรือส่วนรูทของ hooks
ของ composer.json
ไม่ได้รับการสนับสนุนในเวอร์ชัน 3 อีกต่อไป
คุณยังสามารถติดตั้งได้ทั่วโลก สิ่งนี้ให้ความรู้สึกเป็นธรรมชาติมากขึ้นเมื่อใช้ cghooks
พร้อมการรองรับที่เพิ่มเข้ามาใหม่สำหรับการจัดการ git hooks ทั่วโลก
composer global require --dev brainmaestro/composer-git-hooks
คำสั่งทั้งหมดได้รับการสนับสนุนทั่วโลก (นอกเหนือจากการทดสอบ hooks ยังต้องอยู่ในไดเร็กทอรีที่มีไฟล์ composer.json
)
เมื่อ hook เป็นลำดับของคำสั่ง จะมีประโยชน์ในการหยุดการดำเนินการเมื่อคำสั่งล้มเหลว
ระบุ hooks ที่ได้รับผลกระทบในส่วนการกำหนดค่า stop-on-failure
{
"extra" : {
"hooks" : {
"config" : {
"stop-on-failure" : [ " pre-push " ]
},
"pre-push" : [
" php-cs-fixer fix --dry-run --stop-on-violation . " ,
" phpunit "
],
}
}
}
ต้องแน่ใจว่าได้รันคำสั่ง update เสมอหลังจากเปลี่ยนส่วนการกำหนดค่า stop-on-failure
คุณสามารถเพิ่ม hooks แบบกำหนดเองลงในอาร์เรย์ custom-hooks
ของส่วน `config ได้
{
"extra" : {
"hooks" : {
"config" : {
"custom-hooks" : [ " pre-flow-feature-start " ]
},
"pre-flow-feature-start" : [
" echo 'Starting a new feature...' "
]
}
}
}
อย่าลืมรันคำสั่ง update เสมอหลังจากเปลี่ยนส่วนการกำหนดค่า custom-hooks
หมายเหตุ: config
ไม่ใช่ค่า hook ที่กำหนดเองที่ถูกต้อง
เพิ่มสคริปต์ cghooks
ในส่วน scripts
ของไฟล์ composer.json
ของคุณ ด้วยวิธีนี้ คำสั่งสามารถรันด้วย composer cghooks ${command}
วิธีนี้เหมาะอย่างยิ่งหากคุณไม่ต้องการแก้ไขเส้นทางของระบบ
{
"scripts" : {
"cghooks" : " vendor/bin/cghooks " ,
"..." : " ... "
}
}
เพิ่มเหตุการณ์ต่อไปนี้ลงในไฟล์ composer.json
ของคุณ คำสั่ง cghooks
จะถูกรันทุกครั้งที่มีเหตุการณ์เกิดขึ้น ไปที่เหตุการณ์คำสั่งนักแต่งเพลงเพื่อดูรายละเอียดเพิ่มเติมเกี่ยวกับระบบเหตุการณ์ของผู้แต่ง
{
"scripts" : {
"post-install-cmd" : " cghooks add --ignore-lock " ,
"post-update-cmd" : " cghooks update " ,
"..." : " ... "
}
}
คำสั่งต่อไปนี้ทั้งหมดจะต้องเรียกใช้ในโฟลเดอร์เดียวกันกับไฟล์ composer.json
ของคุณ หรือโดยการระบุตัวเลือก --git-dir
เพื่อชี้ไปที่โฟลเดอร์ที่มีไฟล์ composer.json
หลังจากการติดตั้งเสร็จสมบูรณ์ ให้รัน cghooks add
เพื่อเพิ่ม git hooks ที่ถูกต้องทั้งหมดที่ระบุไว้ในการกำหนดค่าผู้แต่ง
ตัวเลือก | คำอธิบาย | สั่งการ |
---|---|---|
no-lock | อย่าสร้างไฟล์ล็อค | cghooks add --no-lock |
ignore-lock | เพิ่มไฟล์ล็อคไปที่ .gitignore | cghooks add --ignore-lock |
force-win | บังคับความเข้ากันได้ของ windows bash | cghooks add --force-win |
ไฟล์ lock
ประกอบด้วยรายการ hooks ที่เพิ่มทั้งหมด
หากใช้แฟล็ก --global
hooks จะถูกเพิ่มแบบโกลบอล และการกำหนดค่า git แบบโกลบอลจะถูกแก้ไขด้วย หากไม่มีการระบุไดเร็กทอรี ก็จะมีทางเลือกสำรองสำหรับ core.hooksPath
ปัจจุบันในการกำหนดค่าส่วนกลาง หากไม่ได้ตั้งค่านั้น จะมีค่าเริ่มต้นเป็น $COMPOSER_HOME
(ทางเลือกเฉพาะนี้เกิดขึ้นสำหรับคำสั่ง add
เท่านั้น) มันจะล้มเหลวโดยมีข้อผิดพลาดหากยังไม่มีเส้นทางหลังทางเลือก
คำสั่ง update ซึ่งรันด้วย cghooks update
โดยทั่วไปจะละเว้นไฟล์ล็อคและพยายามเพิ่ม hooks จากไฟล์ผู้แต่ง สิ่งนี้คล้ายกับสิ่งที่ตัวเลือก --force
สำหรับคำสั่ง add
ทำ คำสั่งนี้มีประโยชน์หาก hooks ในไฟล์ composer.json
มีการเปลี่ยนแปลงตั้งแต่ครั้งแรกที่เพิ่ม hooks
สิ่งนี้ทำงานคล้ายกันเมื่อใช้กับ --global
ยกเว้นว่าไม่มีทางเลือกสำรองสำหรับ $COMPOSER_HOME
หากไม่มีการระบุไดเร็กทอรี
ตะขอสามารถถอดออกได้อย่างง่ายดายด้วย cghooks remove
การดำเนินการนี้จะลบ hooks ทั้งหมดที่ระบุไว้ในการกำหนดค่าผู้แต่ง
Hooks สามารถลบออกได้โดยการส่งผ่านเป็นอาร์กิวเมนต์ คำสั่ง cghooks remove pre-commit post-commit
ซึ่งจะลบ pre-commit
และ post-commit
hooks
ตัวเลือก | คำอธิบาย | สั่งการ |
---|---|---|
force | ลบ hooks โดยไม่ตรวจสอบไฟล์ล็อค | cghooks remove --force |
ข้อควรระวัง : หากไฟล์ล็อคถูกแก้ไขหรือใช้ตัวเลือกบังคับ hooks ที่มีอยู่แล้วก่อนที่จะใช้แพ็คเกจนี้ แต่ระบุไว้ในการกำหนดค่าสคริปต์ผู้แต่งจะถูกลบออกเช่นกัน นั่นคือ หากคุณมี hook pre-commit
ก่อนหน้านี้ แต่การกำหนดค่าผู้แต่งปัจจุบันของคุณมี hook pre-commit
ด้วย ตัวเลือกนี้จะทำให้คำสั่งลบฮุคเริ่มต้นของคุณ
สิ่งนี้ยังไม่มีทางเลือกสำรองสำหรับ $COMPOSER_HOME
หากไม่มีการระบุไดเร็กทอรีเมื่อใช้กับ --global
Hooks สามารถแสดงรายการได้ด้วยคำสั่ง cghooks list-hooks
โดยทั่วไปจะเป็นการตรวจสอบการกำหนดค่าผู้แต่งและแสดงรายการ hooks ที่มีไฟล์จริง
ตัวเลือกต่อไปนี้เป็นเรื่องปกติสำหรับคำสั่งทั้งหมด
ตัวเลือก | คำอธิบาย | สั่งการ |
---|---|---|
git-dir | เส้นทางไปยังไดเร็กทอรี git | cghooks ${command} --git-dir='/path/to/.git' |
lock-dir | เส้นทางเพื่อล็อคไดเร็กทอรีไฟล์ | cghooks ${command} --lock-dir='/path/to/lock' |
global | รันคำสั่งที่ระบุทั่วโลก | cghooks ${command} --global |
แต่ละคำสั่งยังมีแฟล็ก -v
เพื่อควบคุมการใช้คำฟุ่มเฟือยสำหรับบันทึกที่มีรายละเอียดมากขึ้น ปัจจุบันรองรับเพียงระดับเดียวเท่านั้น
สามารถทดสอบ Hooks ด้วย cghooks ${hook}
ก่อนที่จะเพิ่ม ตัวอย่าง cghooks pre-commit
รัน pre-commit
hook
โปรดดูการมีส่วนร่วมเพื่อดูรายละเอียด
ใบอนุญาตเอ็มไอที (MIT) โปรดดูไฟล์ใบอนุญาตสำหรับข้อมูลเพิ่มเติม