การใช้เบ็ดหลังการคอมไพล์คอมไพล์กับ repos ปัจจุบันและอนาคตทั้งหมด


275

ฉันเขียนเบ็ดหลังการคอมมิท Git และทำงานได้ถูกต้อง อย่างไรก็ตามฉันต้องการเพิ่ม hook นี้เพื่อใช้กับที่เก็บ git ปัจจุบัน (และอนาคต) ทั้งหมดที่ฉันกำลังทำงานอยู่ ฉันพยายามเพิ่มเบ็ดลง~/.git/hooks/ในไดเรกทอรี hooks ในไดเรกทอรีโครงการ แต่ดูเหมือนจะไม่ทำงาน

มีวิธีใดในการสร้าง hooks Git ทั่วโลกที่จะนำไปใช้กับที่เก็บข้อมูลทั้งหมดในระบบของฉัน (โดยไม่ต้องคัดลอกลงในแต่ละไดเรกทอรีโครงการ) หากไม่มีสิ่งใดจะเป็นทางออกที่ดีที่สุดในอนาคต - อาจเป็นเทมเพลต git-init?


3
ในฐานะของ Git 2.9 วิธีการที่ดีที่สุดสำหรับการเปลี่ยนแปลงนี้: คำตอบของ VonC เป็นทางออกที่ดีกว่า stackoverflow.com/a/37293198/2741954
Simon Brahan

นี่ตอบคำถามของคุณหรือไม่? เปลี่ยน hooks git เริ่มต้น
Oliver Sieweke

คำตอบ:


192

ฉันต้องการเพิ่มตะขอนี้เพื่อใช้กับที่เก็บ git (และในอนาคต) ปัจจุบันทั้งหมดที่ฉันกำลังทำงานอยู่

ด้วย git 2.9+ (มิถุนายน 2016) สิ่งที่คุณต้องทำคือ:

git config --global core.hooksPath /path/to/my/centralized/hooks

โปรดดู " เปลี่ยนค่าเริ่มต้น hooks git hooks ": สิ่งนี้ทำเพื่อจัดการ hooks ส่วนกลาง


ถ้าฉันมี repo ที่มีอยู่และต้องการให้ dev อื่น ๆ ทั้งหมดที่ดึงการเปลี่ยนแปลงมีฮุคที่ยอมรับล่วงหน้าที่อัปเดตแล้วเช่นฉันจะทำอย่างไร ขอบคุณ
Richlewis

@Richlewis คุณหมายถึงstackoverflow.com/a/40550555/6309ไม่ชัดเจนอย่างสมบูรณ์หรือไม่
VonC

@Richlewis คุณจะต้องตั้งค่าโฟลเดอร์แชร์ที่ทุกคนสามารถเข้าถึงได้เพื่อให้พวกเขาสามารถอ้างอิงในการกำหนดค่าท้องถิ่นของพวกเขา
VonC

น่าเสียดายที่ฉันยังไม่ค่อยเข้าใจเท่าไหร่ ภายใน repo /.git/hooks/pre_commitฉันจะชี้ไปยังสิ่งนั้นได้ไหม?
Richlewis

@ ริชเลวิสฉันตอบคำถามเดิมของคุณแล้ว
VonC

290

ในฐานะของ git 1.7.1 คุณสามารถตั้งค่าinit.templatedirในgitconfigของคุณเพื่อบอก git ว่าจะหาแม่แบบที่ไหน

ตั้งเป็นดังนี้

git config --global init.templatedir '~/.git_template'

หลังจากนั้นที่เก็บใหม่ที่คุณสร้างหรือโคลนจะใช้ไดเรกทอรีนี้เป็นแม่แบบ ~/.git_template/hooksวางตะขอที่คุณต้องการใน ที่เก็บข้อมูลที่มีอยู่สามารถเริ่มต้นใหม่ได้ด้วยเทมเพลตที่เหมาะสมโดยการเรียกใช้git initในไดเรกทอรีเดียวกัน.gitนั้นอยู่

สำหรับ git เวอร์ชั่นที่เก่ากว่า 1.7.1 ให้รัน git init --template ~/.git_templateจะทำงานได้ถ้าคุณเป็นเหมือนฉันและยังต้องการจัดการ.git_templatedir ของคุณพร้อมกับไฟล์ dot อื่น ๆ คุณยังสามารถใช้$GIT_TEMPLATE_DIRสภาพแวดล้อมเพื่อบอกgit initตำแหน่งของไดเรกทอรีแม่แบบของคุณ


51
คำตอบที่ดี หากใครสงสัยว่าใหม่ทำงานgit initบน repo ที่มีอยู่เช็ดมัน - มันไม่ได้ดู: stackoverflow.com/questions/5149694/...
Kontur

สำหรับฉันมันไม่ได้ทำงานกับเส้นทางสัมพัทธ์ไปยังโฟลเดอร์แม่แบบ git สำหรับการคัดลอกไฟล์โดยใช้ git init ในที่เก็บที่มีอยู่ ฉันใช้เส้นทางเต็มแทน
user847988

1
บน windows โดยไม่มีใบเสนอราคา: `git config --global init.templatedir d: \ git \ .git_template \ '
Vladimir Vukanac

1
เคล็ดลับ: ตะขอเท็มเพลตจะถูกคัดลอก หากคุณต้องการอัปเดต global hooks ด้วยกันให้วาง hook ไว้ที่อื่นและเพิ่มลิงก์สัญลักษณ์ในไดเร็กทอรี template (บน Linux) ตรวจสอบให้แน่ใจว่าเส้นทางการเชื่อมโยงนั้นแน่นอน
ทิม Allclair

1
การทำงานgit initไม่ได้อัปเดต hooks สำหรับฉัน ดูเหมือนว่าจะไม่เขียนทับไฟล์ที่มีอยู่แล้ว stackoverflow.com/questions/10791486/ แต่คุณต้องลบไฟล์ hook เก่าออกก่อน
Phil R

69

หากคุณต้องการให้พวกเขาทุกที่ในระบบของคุณ (รวมถึงผู้ใช้นอกเหนือจากคุณ) คุณสามารถปรับเปลี่ยนเนื้อหาของไดเรกทอรีแม่แบบติดตั้ง - ผู้ที่อยู่ใน$PREFIX/share/git-core/templates/hooksที่$PREFIXน่าจะเป็นหรือ/usr/local/usr

หากคุณต้องการให้สิ่งนี้เหมาะสำหรับคุณใช่แล้วสิ่งที่ง่ายที่สุดคือ--templateตัวเลือกของ git-init คุณสามารถเก็บไดเรกทอรีแม่แบบส่วนบุคคลได้อย่างง่ายดายซึ่งมี symlink กลับไปเป็นค่าเริ่มต้นรุ่นที่ติดตั้งซึ่งคุณต้องการเก็บไว้ (hooks แต่ละอัน, ไดเรกทอรีข้อมูล ... ) จากนั้นเนื้อหาของคุณเองhooks/post-commitและสิ่งอื่นที่คุณต้องการปรับแต่ง


11
ขอบคุณมันใช้งานได้ดี และเพื่อใช้ย้อนหลังกับโครงการที่มีอยู่ของฉันฉันเพิ่งวิ่งgit initอีกครั้งและเพิ่มตะขอใหม่ของฉัน
เวนสัน

นี่เป็นวิธีการแก้ปัญหาที่เป็นระเบียบ แต่คุณจะต้องเปลี่ยน repos ของคุณทั้งหมด สิ่งนี้เป็นไปได้ แต่ไม่มีความเป็นไปได้ที่จะมีปลั๊กอินหรืออะไรบางอย่าง (นี่เป็นวิธีที่ทำได้ที่ Bazaar)
Martin Ueding

2
สำหรับคอมไพล์ของ SourceTree บน OS X พวกเขาอยู่ใน/Applications/SourceTree.app/Contents/Resources/git_local/share/git-core/templates/hooks
CupawnTae

1
สำหรับ Windows พบได้ในไดเรกทอรีการติดตั้ง git ภายใต้mingw64\share\templates\hooks(หรือ mingw32 สำหรับ 32- บิต)
nerdherd

1
@nerdherd ตอนนี้อยู่ที่mingw64\share\git-core\templates\hooks(gfw 2.25)
RJFalconer

7

วิธี minimalist คือการสร้างgit_hooks/ไดเรกทอรีในพื้นที่เก็บข้อมูลของคุณเพื่อติดตาม hooks ที่คุณเขียนสำหรับโครงการนั้นนำมาสู่ความสนใจของผู้ใช้ในอนาคตโดยพูดถึงมันในREADMEและพึ่งพาพวกเขาทำสิ่งที่ถูกต้องหลังจากที่พวกเขาโคลน ฉันไตร่ตรองเรื่องนี้มาระยะหนึ่งแล้วเลือกวิธีที่เพิ่มขึ้น ลงที่ถนนผมอาจจะพิจารณาใช้เครื่องมือเช่นคอมไพล์ตะขอ


1
นี่คือสิ่งที่ห่างไกลจากการเป็นทางออกที่แท้จริงที่ฉันต้องลงคะแนนขอโทษ
Victor Schröder
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.