Git hooks рдЖрдкрдХреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рдХрдорд┐рдЯ рдпрд╛ рдкреБрд╢ рдЬреИрд╕реЗ Git рдПрдХреНрд╢рдиреЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рдмрд╛рдж рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдХрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВред рд╡реЗ рд╢реБрд░реБрдЖрддреА рдЪрд░рдг рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдБ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ, рдорд╛рдирдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЕрдкрдиреЗ-рдЖрдк рдареАрдХ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдкрдиреЗ рдХреЛрдб рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдорд╛рдирдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреА рд╣реИред рдЖрдк рдЙрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рдРрд╕реЗ hook рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрдорд┐рдЯ рд╕реЗ рдкрд╣рд▓реЗ рдЪрд▓рддрд╛ рд╣реИред рдЕрдм, рдЬрдм рднреА рдХреЛрдИ рдХрдорд┐рдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛, hook рдЪрд▓реЗрдЧрд╛ред рдпрджрд┐ рдХреЛрдб hook рдореЗрдВ рджрд┐рдП рдЧрдП рдЪреЗрдХ рдкрд╛рд╕ рдХрд░ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдХрдорд┐рдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдирд╣реАрдВ рддреЛ рдХрдорд┐рдЯ рдмреНрд▓реЙрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рд╕рдорд╕реНрдпрд╛рдПрдБ рдмрддрд╛рдиреЗ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред рдЖрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрдорд┐рдЯ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡реЗ рд╕рдорд╕реНрдпрд╛рдПрдБ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдБред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ Git hooks рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд╣ рд╕рдм рдХрд╡рд░ рдХрд░реВрдВрдЧрд╛ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЬрд╝рд░реВрд░рдд рд╣реИтАФрд╡реЗ рдХреНрдпрд╛ рд╣реИрдВ, рдХреМрди-рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
Git Hooks рдХреНрдпрд╛ рд╣реИрдВ?
Git hooks рддрдм рдЕрдкрдиреЗ-рдЖрдк рдХрд╕реНрдЯрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдЬрдм рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ Git рдПрдХреНрд╢рди рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрдорд┐рдЯ, рдкреБрд╢ рдпрд╛ рдорд░реНрдЬ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рдмрд╛рдж рдореЗрдВред рд╡реЗ Git рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдЯ-рдЗрди рдЖрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред
рдЬрдм рдЖрдк рдХреЛрдИ Git рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, Git рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ hooks рдмрдирд╛ рджреЗрддрд╛ рд╣реИред рдЖрдк рдЗрдиреНрд╣реЗрдВ .git/hooks рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рдЕрдВрджрд░ рдкрд╛рдПрдБрдЧреЗред рдпреЗ .sample рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЪрд▓рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЪрд▓реЗрдВ, рддреЛ рдмрд╕ .sample рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣рдЯрд╛ рджреЗрдВред
рдЖрдк hooks рдХрд┐рд╕реА рднреА executable рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, pre-commit hook рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рдЖрдк рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдЯреЗрдЬреНрдб рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ "To-do" рдХрдореЗрдВрдЯреНрд╕ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗ рдФрд░ рдЕрдЧрд░ рдХреЛрдИ рдорд┐рд▓реЗ рддреЛ рдХрдорд┐рдЯ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░ рджреЗред рдпрд╛рдиреА рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдХрдорд┐рдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ, Git тАЬTo-doтАЭ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрдореЗрдВрдЯреНрд╕ рд╕реНрдХреИрди рдХрд░реЗрдЧрд╛ рдФрд░ рд▓рдВрдмрд┐рдд рдХрд╛рд░реНрдп рдорд┐рд▓реЗ рддреЛ рдЕрд╕рдлрд▓ рдХрд░ рджреЗрдЧрд╛ред рдЗрд╕реА рддрд░рд╣ рдЖрдк post-commit, pre-merge, pre-push рдФрд░ рдЕрдиреНрдп git рдПрдХреНрд╢рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо hooks рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
Git Hooks рдХреЗ рдкреНрд░рдХрд╛рд░
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП Git hooks рдХреЗ рджреЛ рдкреНрд░рдХрд╛рд░ рд╕рдордЭрддреЗ рд╣реИрдВред┬а
рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб hooks: рд╢реНрд░реЗрдгрд┐рдпрд╛рдБ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЙрджрд╛рд╣рд░рдг
рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб hooks рд╕реНрдерд╛рдиреАрдп рдорд╢реАрдиреЛрдВ рдкрд░ Git рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЗ рджреМрд░рд╛рди рдЪрд▓рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрдорд┐рдЯ, рд░рд┐рдмреЗрд╕рд┐рдВрдЧ, рдФрд░ рдкреБрд╢ред рдпрд╣рд╛рдБ рдХреБрдЫ рд▓реЛрдХрдкреНрд░рд┐рдп рдХреНрд▓рд╛рдЗрдВрдЯ hooks рдФрд░ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рджрд┐рдП рдЧрдП рд╣реИрдВред
- pre-commit: рдпрд╣ рдХрдорд┐рдЯ рд╕рдВрджреЗрд╢ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЪрд▓рддрд╛ рд╣реИред рдЗрд╕реЗ рдХрдорд┐рдЯ рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдб рд╕реНрдЯрд╛рдЗрд▓ рд▓рд╛рдЧреВ рдХрд░рдиреЗ, рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдиреЗ, рдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдПрд░рд░ рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред┬а
- prepare-commit-msg: Git рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдорд┐рдЯ рд╕рдВрджреЗрд╢ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд▓реЗрдХрд┐рди рдПрдбрд┐рдЯрд░ рдЦреБрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЪрд▓рддрд╛ рд╣реИред рдпрд╣ hook рдХрд╕реНрдЯрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЙрдЬрд┐рдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рдВрджреЗрд╢ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдпрд╛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред┬а
- commit-msg: рдХрдорд┐рдЯ рд╕рдВрджреЗрд╢ рд╕реЗрд╡ рд╣реЛрдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рд▓реЗрдХрд┐рди Git рдХреЗ рдХрдорд┐рдЯ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЪрд▓рддрд╛ рд╣реИред рдпрд╣ рдлрд╝реЙрд░реНрдореИрдЯрд┐рдВрдЧ, рд╕рдВрд░рдЪрдирд╛, рдпрд╛ рдЯреИрдЧрд┐рдВрдЧ рдЬреИрд╕реЗ рдХрдорд┐рдЯ рд╕рдВрджреЗрд╢ рдирд┐рдпрдо рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдЕрдВрддрд┐рдо рдЪреЗрдХрдкреЙрдЗрдВрдЯ рд╣реИред
- post-commit: рдХрдорд┐рдЯ рдмрдирдиреЗ рдХреЗ рдмрд╛рдж рдЪрд▓рддрд╛ рд╣реИред рдЗрд╕реЗ рдЕрдХреНрд╕рд░ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди (рдЬреИрд╕реЗ рдХрдорд┐рдЯ рдХреЗ рдмрд╛рдж Slack рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛) рдпрд╛ рд▓реЙрдЧрд┐рдВрдЧ (рдХрдорд┐рдЯ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕рд╣реЗрдЬрдирд╛) рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- post-checkout: рд╕рдлрд▓
git checkout рдХрдорд╛рдВрдб рдХреЗ рдмрд╛рдж рдЪрд▓рддрд╛ рд╣реИред рдпрд╣ рддрдм рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдмреНрд░рд╛рдВрдЪ рдмрджрд▓рддреЗ рд╣реИрдВ рдпрд╛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХрдорд┐рдЯ рдпрд╛ рдкрд╛рде рдХреЛ рдЪреЗрдХрдЖрдЙрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдЬрд╝ рд░реАрдмрд┐рд▓реНрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЯреЗрдореНрдк рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдирдИ рдмреНрд░рд╛рдВрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- post-merge: рд╕рдлрд▓ рдорд░реНрдЬ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рдж рдЪрд▓рддрд╛ рд╣реИред рдЗрд╕реЗ рдЕрдХреНрд╕рд░ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдЬрд╝ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ, рдорд░реНрдЬ рд╕рдВрджреЗрд╢ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ, рдпрд╛ рдХреИрд╢ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- pre-rebase: рд░рд┐рдмреЗрд╕ рдСрдкрд░реЗрд╢рди рд╕реЗ рдкрд╣рд▓реЗ рдЪрд▓рддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдкреНрд░реЛрдЯреЗрдХреНрдЯреЗрдб рдмреНрд░рд╛рдВрдЪреЗрдЬрд╝ рдкрд░ рд░рд┐рдмреЗрд╕ рд░реЛрдХрдиреЗ, рд░рд┐рдмреЗрд╕ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдиреЗ, рдпрд╛ рдЕрдирдХрдореАрдЯреЗрдб рдмрджрд▓рд╛рд╡ рд╣реЛрдиреЗ рдкрд░ рд░рд┐рдмреЗрд╕ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- pre-push: рдкреБрд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЪрд▓рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░реЛрдЯреЗрдХреНрдЯреЗрдб рдмреНрд░рд╛рдВрдЪреЗрдЬрд╝ рдкрд░ рдкреБрд╢ рд░реЛрдХрдиреЗ рдпрд╛ рдкреНрд░реА-рдкреБрд╢ рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
- post-rewrite: Git рджреНрд╡рд╛рд░рд╛ рдХрдорд┐рдЯреНрд╕ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд░реА-рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЪрд▓рддрд╛ рд╣реИред рдпрд╣
git commit --amend (рдЬреЛ рдЖрдЦрд╝рд┐рд░реА рдХрдорд┐рдЯ рдХреЛ рд░реА-рд░рд╛рдЗрдЯ рдХрд░рддрд╛ рд╣реИ) рдпрд╛ git rebase (рдЬреЛ рдХрдорд┐рдЯреНрд╕ рдХреА рд╢реГрдВрдЦрд▓рд╛ рдХреЛ рд░реА-рд░рд╛рдЗрдЯ рдХрд░рддрд╛ рд╣реИ) рдЬреИрд╕реЗ рдСрдкрд░реЗрд╢рдиреЛрдВ рдкрд░ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕реЗ рд░реЗрдлрд╝рд░реЗрдВрд╕реЗрдЬрд╝ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдпрд╛ рд░реА-рд░рд╛рдЗрдЯ рдХреЗ рдмрд╛рдж рдЯреЗрд╕реНрдЯ рдФрд░ CI рд╕реНрдЯреЗрдкреНрд╕ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
- pre-applypatch:
git am рдХрдорд╛рдВрдб рдЗрд╕реЗ рддрдм рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рдкреИрдЪ рд╡рд░реНрдХрд┐рдВрдЧ рдЯреНрд░реА рдкрд░ рд▓рдЧ рдЪреБрдХрд╛ рд╣реЛ рд▓реЗрдХрд┐рди рдирдпрд╛ рдХрдорд┐рдЯ рдмрдирдиреЗ рд╕реЗ рдкрд╣рд▓реЗред рдпрджрд┐ рдЗрд╕ hook рдХреЗ рдЪреЗрдХ рдЕрд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдиреЙрди-рдЬрд╝реАрд░реЛ рд╕реНрдЯреЗрдЯрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкреИрдЪ рдХреЛ рдХрдорд┐рдЯ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИред
- post-applypatch: Git рдЗрд╕реЗ рдкреИрдЪ рд▓рдЧрд╛рдиреЗ рдФрд░ рдХрдорд┐рдЯ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЪрд▓рд╛рддрд╛ рд╣реИред рдпрд╣ рдХрдорд┐рдЯ рдХреЛ рд░рджреНрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рд▓реЙрдЧрд┐рдВрдЧ рдпрд╛ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред
- applypatch-msg: Git рдЗрд╕реЗ
git am рджреНрд╡рд╛рд░рд╛ рдкреИрдЪ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЪрд▓рд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрдорд┐рдЯ рд╕рдВрджреЗрд╢ рдХреА рдЬрд╛рдБрдЪ рдпрд╛ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВред
рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб hooks: рд╢реНрд░реЗрдгрд┐рдпрд╛рдБ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ
рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб hooks рд░рд┐рдореЛрдЯ Git рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ рдФрд░ рддрдм рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рд░рд┐рдореЛрдЯ рдЗрд╡реЗрдВрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐рд╕реА рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдкрд░ рдкреБрд╢ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рдмрд╛рдж рдореЗрдВред
- pre-receive: рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡рд░ рдЗрд╕реЗ рдкреБрд╢ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЪрд▓рд╛рддрд╛ рд╣реИред рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рднреА рдпреВрдЬрд╝рд░реНрд╕ рдореЗрдВ рд╕реБрд╕рдВрдЧрдд рдХреЛрдб рд╕реНрдЯрд╛рдЗрд▓ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдпрд╛ рдмрджрд▓рд╛рд╡ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- update: рдЬрд╣рд╛рдБ pre-receive рдкреНрд░рддрд┐ рдкреБрд╢ рдПрдХ рдмрд╛рд░ рдЪрд▓рддрд╛ рд╣реИ, рд╡рд╣реАрдВ update hook рдПрдХ рд╣реА рдкреБрд╢ рдореЗрдВ рдмрджрд▓реЗ рдЬрд╛ рд░рд╣реЗ рд╣рд░ рд░реЗрдлрд╝рд░реЗрдВрд╕ (рдмреНрд░рд╛рдВрдЪ рдпрд╛ рдЯреИрдЧ) рдХреЗ рд▓рд┐рдП рдЪрд▓рддрд╛ рд╣реИред
- post-receive: git push рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЪрд▓рддрд╛ рд╣реИред рдЗрд╕реЗ рдЕрдХреНрд╕рд░ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рднреЗрдЬрдиреЗ, рд╡рд┐рд╕реНрддреГрдд рд▓реЙрдЧрд┐рдВрдЧ, рдпрд╛ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- post-update: рдкреБрд╢ рдореЗрдВ рд╕рднреА рд░реЗрдлрд╝рд░реЗрдВрд╕реЗрдЬрд╝ рдЕрдкрдбреЗрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЪрд▓рддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рд╕рд░рд▓ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ post-receive рдХреЗ рд╡рд┐рдкрд░реАрдд рдпрд╣ рд╣рд░ рд░реЗрдлрд╝рд░реЗрдВрд╕ рдЕрдкрдбреЗрдЯ рдХреЗ рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП рд▓реЙрдЧ рджреЛрдиреЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
- reference-transaction: рдпрд╣ рддрдм рдлрд╛рдпрд░ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рд░реЗрдлрд╝рд░реЗрдВрд╕ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рддреИрдпрд╛рд░, рдХрдорд┐рдЯ рдпрд╛ рдЕрдмреЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрдИ рдмрд╛рд░ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд╣реА рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рдореЗрдВ рдХрдИ рд░реЗрдлрд╝рд░реЗрдВрд╕реЗрдЬрд╝ рдкрд░ рдЕрдкрдбреЗрдЯреНрд╕ рд╡реИрд▓рд┐рдбреЗрдЯ/рд░рд┐рдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдпрд╛ ref рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рд▓реЙрдЧ рдФрд░ рдСрдбрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
- push-to-checkout: рддрдм рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдРрд╕реЗ рдмреНрд░рд╛рдВрдЪ рдкрд░ git push рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд░рд┐рдореЛрдЯ рдкрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЪреЗрдХрдЖрдЙрдЯ рд╣реИред рдЗрд╕ hook рд╕реЗ рдЖрдк рдкреБрд╢ рдХреЗ рдмрд╛рдж рд╕рд░реНрд╡рд░ рдкрд░ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрджрд▓рд╛рд╡ рд▓реЙрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рд╡рд░реНрдХрд┐рдВрдЧ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдкреБрд╢ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- pre-auto-gc: Git рджреНрд╡рд╛рд░рд╛ рдСрдЯреЛрдореИрдЯрд┐рдХ рдЧрд╛рд░реНрдмреЗрдЬ рдХрд▓реЗрдХреНрд╢рди рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдЪрд▓рддрд╛ рд╣реИред рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧрд╛рд░реНрдмреЗрдЬ рдХрд▓реЗрдХреНрд╢рди рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЛ рд▓реЙрдЧ рдХрд░рдиреЗ, рднрд╛рд░реА рд╕рдВрд╕рд╛рдзрди рдЙрдкрдпреЛрдЧ рдХреЗ рджреМрд░рд╛рди рдЗрд╕реЗ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ, рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- proc-receive: рдЬрдм git-receive-pack рдХрдорд╛рдВрдб рдЗрдирдХрдорд┐рдВрдЧ рдкреБрд╢ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ рддрдм рдЪрд▓рддрд╛ рд╣реИред рдпрд╣ рд░рд┐рдореЛрдЯ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдореЗрдВ рд░реЗрдлрд╝рд░реЗрдВрд╕реЗрдЬрд╝ (рдмреНрд░рд╛рдВрдЪ рдФрд░ рдЯреИрдЧ) рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред
Git Hooks рд╕реЗрдЯ рдХрд░рдирд╛
рдЗрд╕ рд╕реЗрдХреНрд╢рди рдореЗрдВ, рдЖрдкрдХреЛ git hooks рдЗрдВрд╕реНрдЯреЙрд▓ рдФрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЪрд░рдг рдорд┐рд▓реЗрдВрдЧреЗред рдЖрдк рдпрд╣ рднреА рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╢реБрд░реБрдЖрдд рд╕реЗ рдХрд╕реНрдЯрдо hooks рдХреИрд╕реЗ рдмрдирд╛рдПрдБред┬а
рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рддрд░реАрдХрд╛
рдЬрдм рдЖрдк рдХреЛрдИ Git рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, Git рдЕрдкрдиреЗ-рдЖрдк .git/hooks рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ hooks рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрдирд╛ рджреЗрддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдирд╛ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдЙрд╕ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдХреА рд░реВрдЯ рдкрд░ рдЬрд╛рдПрдБ рдЬрд╣рд╛рдБ рдЖрдкрдиреЗ git init рдЪрд▓рд╛рдпрд╛ рдерд╛ред рд╡рд╣рд╛рдБ рд╕реЗ рд╣рд┐рдбрди .git рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдФрд░ рдлрд┐рд░ hooks рд╕рдмрдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдЦреЛрд▓реЗрдВред рдПрдХ рд╕рд╛рдзрд╛рд░рдг cd рдХрдорд╛рдВрдб рдпрд╣ рд╕рдм рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ hooks рд╕рдмрдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рддрдХ рдкрд╣реБрдБрдЪ рджреЗрддрд╛ рд╣реИред
cd .git/hooksрд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдЕрдВрджрд░ рдЬрд╛рдиреЗ рдкрд░, рдЖрдкрдХреЛ .sample рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдбрд┐рдлрд╝реЙрд▓реНрдЯ hooks рджрд┐рдЦреЗрдВрдЧреЗред рдХрд┐рд╕реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ hook рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕ hook рд╕реЗ .sample рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣рдЯрд╛рдПрдБ рдФрд░ рдЙрд╕реЗ executable рдмрдирд╛рдПрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, pre-commit hook рд╕реЗ .sample рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рджрд┐рдпрд╛ рдХрдорд╛рдВрдб рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
mv .git/hooks/pre-commit.sample .git/hooks/pre-commitрд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдЗрд╕рдХреЗ рдмрд╛рдж, рдиреАрдЪреЗ рджрд┐рдП рдХрдорд╛рдВрдб рд╕реЗ рдЗрд╕реЗ executable рдмрдирд╛рдПрдБ:
chmod +x .git/hooks/pre-commitрд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдЗрддрдирд╛ рдХрд░рдиреЗ рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ hooks рдХрд╛ рд╕рдВрдкрд╛рджрди рдФрд░ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдХрд╡рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╢реБрд░реБрдЖрдд рд╕реЗ рдХрд╕реНрдЯрдо hooks рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдпреЗ рдЪрд░рдг рдЕрдкрдирд╛рдПрдБред
.git/hooks/ рдореЗрдВ рдирдИ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛рдПрдБ:
nano .git/hooks/commit-msgрд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдБред рдЙрджрд╛рд╣рд░рдг:
#!/bin/sh
echo "тЬЕ Commit message hook triggered"рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рд╕реЗрд╡ рдХрд░реЗрдВ рдФрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ, рдлрд┐рд░ рдЗрд╕реЗ executable рдмрдирд╛рдПрдБ:
chmod +x .git/hooks/commit-msg рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЬрдм рднреА рдХрдорд┐рдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, hooks рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВ " Commit message hook triggered"
рдХрд╕реНрдЯрдо hooks рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рднреА рд╣реИред рдЬрдм рдЖрдк рдХреЛрдИ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, Git рдбрд┐рдлрд╝реЙрд▓реНрдЯ hooks рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЗрдиреНрд╣реЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдбрд┐рдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред┬а
рдпрд╣ рдРрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдЬрдм рдЖрдк git init рдЪрд▓рд╛рддреЗ рд╣реИрдВ, Git рдЧреНрд▓реЛрдмрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреА рд╕рд╛рдордЧреНрд░реА рдирдИ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдХреА .git/ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ hooks рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЧреНрд▓реЛрдмрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдХрд╕реНрдЯрдо hook рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреА рдмрдирд╛рдИ рд╣рд░ рдирдИ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рд╡реЗ рдХрд╕реНрдЯрдо hooks рдЕрдкрдиреЗ-рдЖрдк рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░ рд▓реЗрдЧреАред
Hook рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдирд╛ рдФрд░ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░рдирд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдпрд╣ рддрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рд╡рд╣ рдЕрд╕реНрдкрд╖реНрдЯ рдХрдорд┐рдЯ рд╕рдВрджреЗрд╢ рдкрдХрдбрд╝рдирд╛ рд╣реИ, рдЧрд▓рддреА рд╕реЗ рдкреБрд╢ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдирд╛ рд╣реИ, рдпрд╛ рдХреИрд╢ рд╕рд╛рдлрд╝ рдХрд░рдирд╛ рд╣реИ? рдЙрджреНрджреЗрд╢реНрдп рдкрд╣рд▓реЗ рд╕реЗ рддрдп рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ git hooks рдЕрд▓рдЧ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрд┐рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред┬а
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдХрдорд┐рдЯ рд╕рдВрджреЗрд╢ рд╢реИрд▓реА рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк commit-msg hook рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдЖрдк рдореБрдЦреНрдп рдмреНрд░рд╛рдВрдЪ рдкрд░ рдХреБрдЫ рдЦрд╛рд╕ рдкреБрд╢ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд╛рдо pre-push hook рд╕реЗ рдХрд░реЗрдВред┬а
рдЬрдм рдЖрдк hook рдЪреБрди рд▓реЗрдВ, рдЕрдЧрд▓рд╛ рдирд┐рд░реНрдгрдп рднрд╛рд╖рд╛ рдХрд╛ рд╣реИред macOS рдФрд░ Linux рдкрд░ рдПрдХ рдЫреЛрдЯреА-рд╕реА Bash (рдпрд╛ рд╕рд╛рдзрд╛рд░рдг sh) рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдХреНрд╕рд░ рдХрд╛рдлрд╝реА рд╣реЛрддреА рд╣реИред Windows рдкрд░ рдХреБрдЫ рдЯреАрдореЗрдВ PowerShell рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрддреА рд╣реИрдВред┬а
рдпрджрд┐ рдЖрдкрдХрд╛ рд░реЗрдкреЛ рдмрд╣реБрднрд╛рд╖реА рд╣реИ, рддреЛ рдЖрдк Python рдпрд╛ Node.js рдЬреИрд╕реЗ рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдкрд╕рдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕рдм рдПрдХ рд╣реА рд▓реЙрдЬрд┐рдХ рдЪрд▓рд╛ рд╕рдХреЗрдВред рдЗрд╕рд▓рд┐рдП, рдКрдкрд░ shebang (#!/bin/sh, #!/usr/bin/env python3, рдЖрджрд┐) рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рддрд╛рдХрд┐ Git рдХреЛ рдкрддрд╛ рд╣реЛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ execute рдХрд░рдирд╛ рд╣реИред
рдПрдХ рд╕рд╛рдзрд╛рд░рдг pre-commit hook рдЙрджрд╛рд╣рд░рдг рдЬреЛ .env рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХрдорд┐рдЯ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ API keys рдХреЛ рдЧрд▓рддреА рд╕реЗ рдкреБрд╢ рд╣реЛрдиреЗ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИред
#!/bin/sh
# Block committing secrets
if git diff --cached --name-only | grep -q ".env"; then
echo "тЭМ .env file detected in commit! Remove it before committing."
exit 1
fi
exit 0рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдЬрдм рдЖрдк hooks рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВ, рддреЛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдЙрдиреНрд╣реЗрдВ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд░реАрдиреЗрдо рдХрд░ рджреЗрдирд╛ (pre-commit рдХреЛ pre-commit.off рдореЗрдВ рдмрджрд▓рдирд╛) рдпрд╛ рдЙрдирдХреА execute рдЕрдиреБрдорддрд┐ рд╣рдЯрд╛ рджреЗрдирд╛ред┬а
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛ, рддреЛ рдХрдорд┐рдЯ hooks рдХреЛ рд╕реНрдХрд┐рдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП git commit --no-verify рдФрд░ рдкреБрд╢ hooks рдХреЛ рд╕реНрдХрд┐рдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП git push --no-verify рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЖрдк git config core.hooksPath /dev/null рд╕реЗ Git рдХреЛ рдХрд┐рд╕реА рдЦрд╛рд▓реА рдлрд╝реЛрд▓реНрдбрд░ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдХреЗ hooks рдХреЛ рдЧреНрд▓реЛрдмрд▓реА рднреА рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Git Hooks рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдФрд░ рдЙрджрд╛рд╣рд░рдг
Git hooks рдЖрдкрдХреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ, рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ, рдФрд░ рдЧреБрдгрд╡рддреНрддрд╛ рдорд╛рдирдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИрдВред┬а
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдСрдЯреЛрдореЗрд╢рди рдкрд░рд┐рджреГрд╢реНрдп
рдХреЛрдб рд╕реНрдЯрд╛рдЗрд▓ рдпрд╛ рд▓рд┐рдВрдЯрд┐рдВрдЧ рд▓рд╛рдЧреВ рдХрд░рдирд╛: pre-commit hook рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдХреЛрдб рдлрд╝реЙрд░реНрдореИрдЯрд┐рдВрдЧ рдСрдЯреЛрдореЗрдЯ рдХрд░рдиреЗ рдФрд░ рдХрдорд┐рдЯ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП pre-commit hook рдореЗрдВ prettier рдЕрдкрдиреЗ-рдЖрдк рдлрд╝реЙрд░реНрдореИрдЯрд┐рдВрдЧ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдХрдорд┐рдЯ рд╕реЗ рдкрд╣рд▓реЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рд╕реНрдЯреЗрдЬ рдХрд░ рджреЗрддрд╛ рд╣реИред рдЙрд╕рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд▓рд┐рдВрдЯрд░ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХрдорд┐рдЯ рддрднреА рд╕рдлрд▓ рд╣реЛрдЧрд╛ рдЬрдм рд▓рд┐рдВрдЯрд┐рдВрдЧ рдкрд╛рд╕ рд╣реЛред рдпрджрд┐ рдЕрд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХрдорд┐рдЯ рд░реБрдХ рдЬрд╛рдПрдЧрд╛ред
#!/bin/sh
# Collect staged JS/TS files
FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(js|ts|tsx)$')
[ -z "$FILES" ] && exit 0
echo "Formatting with Prettier..."
npx --yes prettier --write $FILES
# Re-stage files that Prettier changed
echo "$FILES" | xargs git add
echo "Linting with ESLint..."
npx --yes eslint $FILES
STATUS=$?
if [ $STATUS -ne 0 ]; then
echo "ESLint found issues. Fix them or commit with --no-verify if needed."
exit $STATUS
fi
echo "Pre-commit checks passed."
exit 0рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдПрдБ: рдЖрдк hooks рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреЛ рдкреБрд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдПрдБред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рджрд┐рдпрд╛ pre-push hook рдЖрдкрдХреЗ рд░реЗрдкреЛ рдореЗрдВ рдЙрдкрд▓рдмреНрдз pytests рдЕрдкрдиреЗ-рдЖрдк рдЦреЛрдЬрдХрд░ рдкреБрд╢ рд╕реЗ рдкрд╣рд▓реЗ рдЪрд▓рд╛рддрд╛ рд╣реИред
#!/bin/sh
echo "Running tests before push..."
pytest -q
STATUS=$?
[ $STATUS -eq 0 ] || { echo "Tests failed. Push aborted."; exit $STATUS;рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдХреЛ рдХрдорд┐рдЯ рд╣реЛрдиреЗ рд╕реЗ рдЕрдкрдиреЗ-рдЖрдк рдмреНрд▓реЙрдХ рдХрд░реЗрдВ: .env, .pem, рдпрд╛ .key рдЬреИрд╕реА рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЕрдХреНрд╕рд░ рд╕реАрдХреНрд░реЗрдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВред рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ pre-commit hook рдЙрджрд╛рд╣рд░рдг рдРрд╕реЗ рдкреИрдЯрд░реНрди рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдорд┐рд▓реЗ рддреЛ рдХрдорд┐рдЯ рдмреНрд▓реЙрдХ рдХрд░ рджреЗрддрд╛ рд╣реИред
#!/bin/sh
set -e
STAGED=$(git diff --cached --name-only --diff-filter=ACM)
# Block dotenv and private keys
echo "$STAGED" | grep -E '\.env(\.|$)|(^|/)\.env$|\.pem$|\.key$|id_rsa$' >/dev/null 2>&1 && {
echo "Sensitive file detected in staged changes. Remove it from the commit."
exit 1
}рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдкреНрд░рднрд╛рд╡реА Git Hooks рд▓рд┐рдЦрдиреЗ рдХреЗ рдЯрд┐рдкреНрд╕
рдпрд╣рд╛рдБ рд╡реЗ рдЯрд┐рдкреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ Git hooks рд▓рд┐рдЦрддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧреА рд▓рдЧреЗ рд╣реИрдВред┬а
Hooks рдХреЛ рддреЗрдЬрд╝ рд░рдЦреЗрдВ
Hooks рд╣рд░ рдмрд╛рд░ рдХреБрдЫ Git рдПрдХреНрд╢рди рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдиреЗ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╣рд▓реНрдХрд╛ рд░рдЦреЗрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрдбрд╝реЗ рдЯреЗрд╕реНрдЯ рд╕реВрдЯ рд╣реИрдВ, рддреЛ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдиреАрдп hooks рдХреЗ рдмрдЬрд╛рдп CI рдореЗрдВ рдЪрд▓рд╛рдПрдБред рд╣рд░ рдХрдорд┐рдЯ рдкрд░ рдкреВрд░реЗ рд░реЗрдкреЛ рдореЗрдВ рд▓рд┐рдВрдЯрд░реНрд╕, рдлрд╝реЙрд░реНрдореИрдЯрд░реНрд╕, рдпрд╛ рдЪреЗрдХреНрд╕ рдЪрд▓рд╛рдирд╛ рдЖрдкрдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдмрджрд▓реА рд╣реБрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рддрдХ рдЪреЗрдХ рд╕реАрдорд┐рдд рдХрд░реЗрдВред
рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рд░рдЦреЗрдВ┬а
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ hooks рдЕрд▓рдЧ-рдЕрд▓рдЧ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВред рдкреЛрд░реНрдЯреЗрдмрд▓ shebangs рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд▓рд╛рдЗрди рдПрдВрдбрд┐рдВрдЧреНрд╕ рд╕реБрд╕рдВрдЧрдд рд░рдЦреЗрдВ (CRLF рдХреЗ рдмрдЬрд╛рдп LF), рдФрд░ рдПрдмреНрд╕реЛрд▓реНрдпреВрдЯ рдкрд╛рде рд╣рд╛рд░реНрдбрдХреЛрдб рди рдХрд░реЗрдВред┬а
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, PATH рдФрд░ рд▓реЛрдХрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдЬреИрд╕реЗ npm run lint рдпрд╛ python -m рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдХрдИ рдкрд░рд┐рд╡реЗрд╢реЛрдВ рдореЗрдВ рдЪрд▓реЗред
рдбреАрдмрдЧрд┐рдВрдЧ рд░рдгрдиреАрддрд┐рдпрд╛рдБ
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреИрд╕реЗ рдЪрд▓ рд░рд╣реА рд╣реИ рдЗрд╕реЗ рдЯреНрд░реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддреГрдд рд▓реЙрдЧрд┐рдВрдЧ рдпрд╛ рдХреЛрдИ рдбрд┐рдмрдЧ рдлрд╝реНрд▓реИрдЧ (рдЙрджрд╛рд╣рд░рдг, HOOK_DEBUG=1) рдЬреЛрдбрд╝реЗрдВред рд╡рд░реНрддрдорд╛рди рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА, рдмреНрд░рд╛рдВрдЪ, рдпрд╛ рд╕реНрдЯреЗрдЬ рд╣реЛ рд░рд╣реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдЬреИрд╕реЗ рд╡рд┐рд╡рд░рдг рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВред рдЗрд╕рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдирд╛ рдФрд░ рдЬрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдЖ рд░рд╣реА рд╣реИ рд╡рд╣рд╛рдБ рддрдХ рдкрд╣реБрдБрдЪрдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд┐рднрд┐рдиреНрди рдЗрдирдкреБрдЯреНрд╕ рдХреЗ рд╕рд╛рде hooks рдЯреЗрд╕реНрдЯ рдХрд░реЗрдВ рдФрд░ рдмрджрд▓рд╛рд╡ рдкреБрд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдлреЗрд▓реНрдпреЛрд░ рд╕реАрдирд╛рд░рд┐рдпреЛ рд╕рд┐рдореБрд▓реЗрдЯ рдХрд░реЗрдВред рдпрджрд┐ рдХреЛрдИ hook рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рдЧрддрд┐ рд░реЛрдХ рджреЗ, рддреЛ рдЖрдк Git рдХреЗ --no-verify рдлрд╝реНрд▓реИрдЧ рд╕реЗ рдЙрд╕реЗ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдРрд╕реЗ environment variables рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ hooks рдХреЛ рд╕реНрдХрд┐рдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рд╣реЛрдВред
рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдореНрд╕ рдореЗрдВ рд╕реБрд╕рдВрдЧрдд рд╡реНрдпрд╡рд╣рд╛рд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, OS-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдорд╛рдВрдб рд╕реЗ рдмрдЪреЗрдВ, рдФрд░ рдкреЛрд░реНрдЯреЗрдмрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВред
Hooks рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдХрд░реЗрдВ
рдЕрдЪреНрдЫрд╛ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдЯреАрдо рдХреА рд╕рдордЭ рдмрдврд╝рд╛рддрд╛ рд╣реИ рдФрд░ рдирдП рд╕рджрд╕реНрдпреЛрдВ рдХрд╛ рдСрдирдмреЛрд░реНрдбрд┐рдВрдЧ рдЖрд╕рд╛рди рдХрд░рддрд╛ рд╣реИред рдПрдХ рдХреЗрдВрджреНрд░реАрдп README рдмрдирд╛рдП рд░рдЦреЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рд░ hook рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп, рд╡реНрдпрд╡рд╣рд╛рд░, рдФрд░ рдЙрдкрдпреЛрдЧ рджрд┐рдпрд╛ рд╣реЛред рдЗрд╕рдореЗрдВ рд░рди рдХреИрд╕реЗ рдХрд░реЗрдВ, рдкреНрд░реАрд░рд┐рдХреНрд╡рд┐рдЬрд┐рдЯреНрд╕, рдЯреНрд░рдмрд▓рд╢реВрдЯрд┐рдВрдЧ, рдФрд░ рдмрд╛рдпрдкрд╛рд╕рд┐рдВрдЧ рдЯрд┐рдкреНрд╕ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред рд╕рд╛рде рд╣реА, рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди/рд╕реЗрдЯрдЕрдк рдирд┐рд░реНрджреЗрд╢ рднреА рджреЗрдВред┬а
Git Hooks рдХреЗ рдЙрдиреНрдирдд рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди рддрдХрдиреАрдХреЗрдВ рдФрд░ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдПрдБ
рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рдПрдбрд╡рд╛рдВрд╕реНрдб рдпреВрдЬрд╝рд░ рд╣реИрдВ, рддреЛ рдпреЗ рдЯрд┐рдкреНрд╕ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдкрд░рдлрд╝реЙрд░рдореЗрдВрд╕ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди
рдЬрдЯрд┐рд▓ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рдкрд░рдлрд╝реЙрд░рдореЗрдВрд╕ рдмреЗрд╣рддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдмрдЪрдХрд░ рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдШрдЯрд╛рдПрдБред рдЗрд╕рд╕реЗ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕рдордп рдХрдо рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдлреЗрд▓реНрдпреЛрд░ рдкреЙрдЗрдВрдЯреНрд╕ рднреА рдШрдЯрддреЗ рд╣реИрдВред┬а
рд▓рд┐рдВрдЯрд┐рдВрдЧ рдЬреИрд╕реЗ рдорд╣рдБрдЧреЗ рдкреНрд░реЛрд╕реЗрд╕ рдХреЗ рдирддреАрдЬреЗ рдХреИрд╢ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдлрд╝рд╛рдЗрд▓реЗрдВ рди рдмрджрд▓реА рд╣реЛрдВ рддреЛ рдЙрдиреНрд╣реЗрдВ рджреЛрдмрд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред┬а
рдпрджрд┐ hooks рдореЗрдВ рдХрдИ рдЪреЗрдХреНрд╕ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдкреИрд░реЗрд▓рд▓ рдЪрд▓рд╛рдПрдБ рддрд╛рдХрд┐ рд╡реЗ рд╕рд╛рде-рд╕рд╛рде рдЪрд▓реЗрдВред рд╕рд╛рде рд╣реА, hook рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ рдореЙрдбреНрдпреБрд▓рд░ рдмрдирд╛рдПрдБред рдпрд╛рдиреА hooks рдХреЛ рдЫреЛрдЯреЗ, рдкреБрди: рдЙрдкрдпреЛрдЧ рдпреЛрдЧреНрдп рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреА рддрд░рд╣ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХрд░реЗрдВ рдЬреЛ рд╕рдВрджрд░реНрдн рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЗрд╡рд▓ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣рд┐рд╕реНрд╕реЗ рдЪрд▓рд╛рдПрдБред
Hook рдЪреЗрдирд┐рдВрдЧ рдФрд░ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди
рдПрдХ рд╣реА git рдЗрд╡реЗрдВрдЯ рдореЗрдВ рдХрдИ hooks рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП hook рдЪреЗрдирд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, pre-commit hook рдореЗрдВ рдЖрдк рдкрд╣рд▓реЗ рд▓рд┐рдВрдЯрд┐рдВрдЧ, рдлрд┐рд░ рдЯреЗрд╕реНрдЯ, рдФрд░ рдлрд┐рд░ рдХреЛрдб рдлрд╝реЙрд░реНрдореИрдЯрд┐рдВрдЧтАФрд╕рдмрдХреЛ рдЪреЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд░ рдХрдорд╛рдВрдб рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдЪрд▓рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдХреЛрдИ рдЕрд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ (рдиреЙрди-рдЬрд╝реАрд░реЛ рд╕реНрдЯреЗрдЯрд╕), рддреЛ рдмрд╛рдж рдХреЗ рдХрдорд╛рдВрдбреНрд╕ рд╕реНрдХрд┐рдк рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЦрд╝рд░рд╛рдм рдХрдорд┐рдЯ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХреЗред┬а
рдЬрдм hook рдПрдХреНрд╢рдиреНрд╕ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрдВ, рддреЛ рд╕рдордп рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдкреИрд░реЗрд▓рд▓ рднреА рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╣реАрдВ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВред
рдХреЙрдиреНрдлрд╝рд┐рдЧ рдкреНрд░рдмрдВрдзрди┬а
рд╣рд░ рд░реЗрдкреЛ рдХреА рдЕрдкрдиреА .git/hooks рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╣реЛрддреА рд╣реИред рдпрд╛рдиреА рдпрджрд┐ рдЖрдк рдХрдИ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рд╡рд╣реА рдЪреЗрдХреНрд╕ (рдорд╛рди рд▓реЗрдВ, рд▓рд┐рдВрдЯрд┐рдВрдЧ) рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рд╣рд░ рдЬрдЧрд╣ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛ред рдмреЗрд╣рддрд░ рддрд░реАрдХрд╝рд╛ рд╣реИ hooks рдХреЛ рдХреЗрдВрджреНрд░реАрдХреГрдд рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рддрд╛рдХрд┐ рд╕рднреА рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реАрдЬрд╝ рдЙрдиреНрд╣реЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХреЗрдВ рдФрд░ рдЪрд▓рд╛ рд╕рдХреЗрдВред
рдЖрдк рдпрд╣ рдПрдХ рдХрдорд╛рдВрдб рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: git config --global core.hooksPath ~/.githooksред рдпрд╣ Git рдХреЛ ~/.githooks рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ hooks рдвреВрдБрдврдиреЗ рдХреЛ рдХрд╣рддрд╛ рд╣реИред рд╡рд╣рд╛рдБ рдмрдирд╛рдП рдЧрдП рдХрд┐рд╕реА рднреА hook рдХреЛ рдЖрдкрдХреА рд╕рднреА рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реАрдЬрд╝ рдЕрдкрдиреЗ-рдЖрдк рд╕рд╛рдЭрд╛ рдХрд░реЗрдВрдЧреАред
рдЖрдк рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ (JSON рдпрд╛ YAML) рд╕реЗ hook рд▓реЙрдЬрд┐рдХ рдХреЛ рдЕрдзрд┐рдХ рдбрд╛рдпрдирд╛рдорд┐рдХ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд░ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд▓реЙрдЬрд┐рдХ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХрд╛ hook рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрд╕ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рд╣реА рдирд┐рдпрдо рдЕрдкрдиреЗ-рдЖрдк рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдХрдВрдбреАрд╢рдирд▓ рдПрдХреНрдЬрд╝реАрдХреНрдпреВрд╢рди
Hook рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЗ рдЕрдВрджрд░ рд╕рд░рд▓ рд╢рд░реНрддреЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡реЗ рдХреЗрд╡рд▓ рддрдм рдЪрд▓реЗрдВ рдЬрдм рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд╡рд░реНрддрдорд╛рди рдмреНрд░рд╛рдВрдЪ рдирд╛рдо рдЬрд╛рдБрдЪрдирд╛, рдХреМрди-рд╕реА рдлрд╝рд╛рдЗрд▓реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрджрд▓реАрдВ рдЙрдиреНрд╣реЗрдВ рджреЗрдЦрдирд╛, рдпрд╛ рдРрд╕рд╛ environment variable рдкрдврд╝рдирд╛ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реЛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╕реНрдХрд┐рдк рдХрд░рдирд╛ рд╣реИред
рдФрд░ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП, pre-commit рдЬреИрд╕реЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬрд╣рд╛рдБ рдЖрдк рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рдЪрд░рдг рдореЗрдВ рдХреМрди-рд╕реЗ hooks рдЪрд▓реЗрдВрдЧреЗред рдЖрдк рдХрдВрдбреАрд╢рдирд▓ рд▓реЙрдЬрд┐рдХ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХреЗрд╡рд▓ рдХреБрдЫ рдмреНрд░рд╛рдВрдЪреЗрдЬрд╝ рдкрд░ hooks рдЪрд▓рд╛рдирд╛, variables рд╕реЗ hooks рд╕реНрдХрд┐рдк рдХрд░рдирд╛, рдпрд╛ рдЯрд╛рдЗрдо-рдЖрдзрд╛рд░рд┐рдд рд╢рд░реНрддреЗрдВ рдЬреЛрдбрд╝рдирд╛ред рдЗрд╕рд╕реЗ рдЖрдкрдХреЗ hook рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдбрд╛рдпрдирд╛рдорд┐рдХ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рдЕрдиреБрд░реВрдк рдврд▓рддреЗ рд╣реИрдВред
рд╕рд╣рдпреЛрдЧ рдФрд░ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреА рд░рдгрдиреАрддрд┐рдпрд╛рдБ┬а
рдЖрдк git hooks рдХреЛ рдХреЗрдВрджреНрд░реАрдХреГрдд рдХрд░ рдЯреАрдореЛрдВ рдФрд░ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реАрдЬрд╝ рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
Git рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕
рдЬрдм рдЖрдк рдХреЛрдИ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, Git git/hooks рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рддрд╣рдд рдХреБрдЫ рдбрд┐рдлрд╝реЙрд▓реНрдЯ hooks рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпреЗ Git рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдЖрддреЗ рд╣реИрдВред
рдХрд╕реНрдЯрдо hooks рдХреЛ рдХреЗрдВрджреНрд░реАрдп рд░реВрдк рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ Git рдЯреЗрдореНрдкрд▓реЗрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрдирд╛рдПрдБ, рдЕрдкрдиреЗ hooks рд╡рд╣рд╛рдБ рд▓рд┐рдЦреЗрдВ, рдФрд░ Git рдХреЛ рдЧреНрд▓реЛрдмрд▓реА рдЗрд╕ рдирдП рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░ рджреЗрдВред┬а
git config --global init.templateDir /path/to/hooks-templateрд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░реАрдХреЗ рдореЗрдВ hooks рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЬрд╝рди рдХрдВрдЯреНрд░реЛрд▓ рдХреА рдХрдореА рд╣реИред рдпрд╣ рддрдм рдЦрд╛рд╕ рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрдм рдЖрдкрдХреЗ hooks рдХрдо рд╣реА рдмрджрд▓рддреЗ рд╣реЛрдВред рдпрджрд┐ рдЖрдк hooks рдХреЛ рдЕрдХреНрд╕рд░ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд░реНрдЬрд╝рди рдХрдВрдЯреНрд░реЛрд▓ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЕрдЧрд▓рд╛ рддрд░реАрдХрд╛ рдЕрдкрдирд╛рдПрдБред
рдХреЗрдВрджреНрд░реАрдп git рд░реЗрдкреЛ
рдПрдХ рд╕рдорд░реНрдкрд┐рдд, рд╡рд░реНрдЬрд╝рди-рдирд┐рдпрдВрддреНрд░рд┐рдд, рдХреЗрдВрджреНрд░реАрдп рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдмрдирд╛рдПрдБ рдФрд░ рдЕрдкрдиреЗ рд╕рднреА рдХрд╕реНрдЯрдо hook рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдЙрд╕ рд░реЗрдкреЛ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реЗрдкреЛ рд╕реЗ рдЕрд▓рдЧред рддрд╛рдХрд┐ рдЖрдк hooks рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдбрдмреЗрд╕ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХреЗрдВред┬а
рдЗрди hooks рдХреЛ рдорд╛рдирдХреАрдХреГрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛рдиреА рдХрд┐рд╕реА рдПрдХ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рд╕реЗ рдмрдБрдзреЗ рдкрд╛рде рдпрд╛ рд╡реИрд▓реНрдпреВрдЬрд╝ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВред
рдпрд╣ рд╕реЗрдЯрдЕрдк рдЯреАрдореЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдХреЛрдИ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдЦреАрдВрдЪ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рд╕рд┐рдВрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИред┬а
рдФрд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рддрд░реАрдХрд╛ рд╣реИ рдПрдХ рд╕реЗрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬреЛ рдХреЗрдВрджреНрд░реАрдп hooks рд░реЗрдкреЛ рдХреЛ рдХреНрд▓реЛрди рдХрд░реЗ рдФрд░ hook рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА .git/hooks рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдХреЙрдкреА рдХрд░ рджреЗред рдЙрджрд╛рд╣рд░рдг рд╕реЗрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ:┬а
#!/usr/bin/env bash
set -euo pipefail
# Location of the shared hooks template repo
HOOKS_TEMPLATE_REPO="[email protected]:your-org/git-hooks-template.git"
HOOKS_TEMPLATE_DIR="$HOME/.git-hooks-template"
# Clone or update the template repo
echo "Cloning hooks template repo..."
git clone "$HOOKS_TEMPLATE_REPO" "$HOOKS_TEMPLATE_DIR"
# The repo where you want hooks installed
TARGET_REPO="${1:-$(pwd)}"
TARGET_HOOKS_DIR="$TARGET_REPO/.git/hooks"
# --- Copy strategy ---
echo "Copying hooks into $TARGET_HOOKS_DIR..."
cp -r "$HOOKS_TEMPLATE_DIR/"* "$TARGET_HOOKS_DIR/"
# 4. Make sure hooks are executable
chmod +x "$TARGET_HOOKS_DIR"/* || true
echo "тЬЕ Hooks installed successfully into $TARGET_REPO"рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк symlinks рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА .git/hooks рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ рдЕрдкрдиреЗ рд╡рд░реНрдЬрд╝рди-рдХрдВрдЯреНрд░реЛрд▓реНрдб hooks рд░реЗрдкреЛ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ рдЬреИрд╕реЗ рд╣реА рдЖрдк рдХреЗрдВрджреНрд░реАрдп рд░реЗрдкреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗ, hooks рдЕрдкрдиреЗ-рдЖрдк рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рдПрдБрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ symlink рдЙрд╕реА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рднрд░реЛрд╕реЗрдордВрдж рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, hooks рдХреЗ рд░рдЦрд░рдЦрд╛рд╡ рдХреА рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдПрдБред рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп pull requests рд╕реЗ hooks рдореЗрдВ рдмрджрд▓рд╛рд╡ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░реЗрдВ, рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдмрд╛рдж рд╣реА рдорд░реНрдЬ рдХрд░реЗрдВ, рдФрд░ рдЬреИрд╕реЗ-рдЬреИрд╕реЗ hooks рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдВ, рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдЕрдкрдбреЗрдЯ рд░рдЦреЗрдВред┬а
рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рд╕рд╛рде Git Hooks рдХрд╛ рдПрдХреАрдХрд░рдг
Git hooks рдХрдВрдЯреАрдиреНрдпреВрд╕ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди (CI) рдореЗрдВ рдмрдбрд╝реА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддреЗ рд╣реИрдВред рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, CI рдХрд╛ рдорддрд▓рдм рд╣реИ рдмрд╛рд░-рдмрд╛рд░ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдорд░реНрдЬ рдХрд░рдирд╛, рдлрд┐рд░ рдмрд┐рд▓реНрдбреНрд╕ рдФрд░ рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдХрд░ рд╢реБрд░реБрдЖрддреА рдЪрд░рдг рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдБ рдкрдХрдбрд╝рдирд╛ред Jenkins, GitHub Actions, рдпрд╛ GitLab CI рдЬреИрд╕реЗ CI/CD рдЯреВрд▓реНрд╕ рдХреЗ рд╕рд╛рде hooks рдХреЛ рдЬреЛрдбрд╝рдХрд░, рдЖрдк Git рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрд┐рд▓реНрдбреНрд╕ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рдРрдкреНрд▓рд┐рдХреЗрд╢рдВрд╕ рдХреЛ рдбрд┐рдкреНрд▓реЙрдп рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб pre-receive hook рдкреБрд╢ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ Git рд╕рд░реНрд╡рд░ рдкрд░ рдХрд╕реНрдЯрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрд╕рдлрд▓ рд╣реЛрддреА рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рдкреБрд╢ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджреЗрддрд╛ рд╣реИред рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрд╕ рдмреНрд░рд╛рдВрдЪ рдкрд░ рдирд╡реАрдирддрдо CI рдмрд┐рд▓реНрдб рдкрд╛рд╕ рд╣реБрдИ рдереА рдпрд╛ рдирд╣реАрдВ, рдкреБрд╢ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗред рдЙрд╕ CI рд░рди рдореЗрдВ рдХреЛрдб рдХрд╡рд░реЗрдЬ рдЪреЗрдХ, рдпреВрдирд┐рдЯ/рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдЯреЗрд╕реНрдЯ, рдпрд╛ рд╕реБрд░рдХреНрд╖рд╛ рд╕реНрдХреИрди рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
Hooks рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рднреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред post-receive hook рдПрдХ webhook рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдХреЛрдб main рдореЗрдВ рдорд░реНрдЬ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдкрдиреЗ-рдЖрдк build тЖТ deploy тЖТ release рдЪрдХреНрд░ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред
рд╕реБрд░рдХреНрд╖рд╛ рд╕рдВрдмрдВрдзреА рд╡рд┐рдЪрд╛рд░ рдФрд░ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдПрдБ┬а
рдпрджрд┐ рдЖрдк рдЖрд╕рд╛рди рд╕рд╣рдпреЛрдЧ рдФрд░ рд╕рд╛рдЭрд╛ рд╕рддреНрдп рдХреЗ рд▓рд┐рдП рдХреЗрдВрджреНрд░реАрдп hooks рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЕрдирдзрд┐рдХреГрдд рдкрд╣реБрдБрдЪ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП hooks рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдкрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдлрд╝рд╛рдЗрд▓ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред рдХреЗрд╡рд▓ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред┬а
рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ hook рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реЗ рдЗрдирдкреБрдЯреНрд╕ рдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХреЛ рд╡реЗрд▓рд┐рдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдХреЛрдб рдЗрдВрдЬреЗрдХреНрд╢рди рд╣рдорд▓реЛрдВ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдЕрд▓реНрдлрд╝рд╛рдиреНрдпреВрдореЗрд░рд┐рдХ рдФрд░ рдбреИрд╢ рд╡рд╛рд▓реЗ рдмреНрд░рд╛рдВрдЪ рдирд╛рдореЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реБрдП рд╕рдЦреНрдд рдкреИрдЯрд░реНрди рдХреЗ рд╡рд┐рд░реБрджреНрдз рдЗрдирдкреБрдЯреНрд╕ рд╡реЗрд▓рд┐рдбреЗрдЯ рдХрд░реЗрдВ, рдпрд╛ рдРрд╕реЗ рдЯреИрдЧреНрд╕ рдЬреЛ vMAJOR.MINOR.PATCH рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реЛрдВред┬а
рдХрднреА рднреА hook рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдореЗрдВ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рд╣рд╛рд░реНрдбрдХреЛрдб рди рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП environment variables рдпрд╛ рд╕рдорд░реНрдкрд┐рдд рд╕реАрдХреНрд░реЗрдЯ рдореИрдиреЗрдЬрдореЗрдВрдЯ рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЖрдк Gitleaks рдЬреИрд╕реЗ рдЯреВрд▓реНрд╕ рдХреЛ pre-commit hooks рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЬрд┐рди рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдЖрдк рдХрдорд┐рдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВ рдЙрдирдореЗрдВ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд╛ рд╕реНрдХреИрди рдЪрд▓ рд╕рдХреЗрдВред
рдХреЛрдИ рдЖрдкрдХреЗ hook рдХреЛ рдХрд┐рд╕реА рджреВрд╕рд░реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдХреЛрдб рдпрд╛ рдЬрд╛рдирдХрд╛рд░реА рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ hooks рдХрд┐рди рдбреЛрдореЗрдиреНрд╕ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕реЗ рд╕реАрдорд┐рдд рд░рдЦреЗрдВред рдЕрдирдЬрд╛рди рдбреЗрд╕реНрдЯрд┐рдиреЗрд╢рди рд╕рд░реНрд╡рд░реНрд╕ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА рдпрд╛ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╕рд╛рде рд╣реА, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рд▓реЙрдЧреНрд╕ рдбрд┐рд╕реНрдкреНрд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рдЧреЛрдкрдиреАрдп рдЬрд╛рдирдХрд╛рд░реА рди рджрд┐рдЦрд╛рдПрдБред┬а
рдирд┐рд╖реНрдХрд░реНрд╖
Git hooks рдЖрдкрдХреЗ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рд╕реАрдзреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдорд╛рдирдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕рд╢рдХреНрдд рддрд░реАрдХрд╛ рд╣реИрдВред рд╡реЗ рдХреЛрдб рд╕реНрдЯрд╛рдЗрд▓ рдФрд░ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рд╕реЗ рд▓реЗрдХрд░ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ рддрдХ рд╣рд░ рдЪреАрдЬрд╝ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред
рдЙрдиреНрд╣реЗрдВ рд╕рдордЭрджрд╛рд░реА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдШрдЯрд╛рддреЗ рд╣реИрдВ, рд╕рдордп рдмрдЪрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЯреАрдореЛрдВ рдХреЗ рдмреАрдЪ рд╕рд╣рдпреЛрдЧ рдХреЛ рдФрд░ рд╕рд╣рдЬ рдмрдирд╛рддреЗ рд╣реИрдВред
рд╕рд░рд▓ pre-commit рдЪреЗрдХреНрд╕ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВ, рдлрд┐рд░ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди, рдХреЗрдВрджреНрд░реАрдп рдкреНрд░рдмрдВрдзрди, рдпрд╛ CI/CD рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдЬреИрд╕реЗ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рд╕реЗрдЯрдЕрдк рдЖрдЬрд╝рдорд╛рдПрдБред рдпрджрд┐ рдЖрдк Git рдпреВрдЬрд╝рд░ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдХреМрд╢рд▓ рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдбрд╡рд╛рдВрд╕реНрдб Git рдХреЛрд░реНрд╕ рджреЗрдЦреЗрдВред
Git hooks рдЖрдкрдХреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рдХрдорд┐рдЯ рдпрд╛ рдкреБрд╢ рдЬреИрд╕реЗ Git рдПрдХреНрд╢рдиреЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рдмрд╛рдж рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдХрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВред рд╡реЗ рд╢реБрд░реБрдЖрддреА рдЪрд░рдг рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдБ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ, рдорд╛рдирдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЕрдкрдиреЗ-рдЖрдк рдареАрдХ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдкрдиреЗ рдХреЛрдб рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдорд╛рдирдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреА рд╣реИред рдЖрдк рдЙрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рдРрд╕реЗ hook рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрдорд┐рдЯ рд╕реЗ рдкрд╣рд▓реЗ рдЪрд▓рддрд╛ рд╣реИред рдЕрдм, рдЬрдм рднреА рдХреЛрдИ рдХрдорд┐рдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛, hook рдЪрд▓реЗрдЧрд╛ред рдпрджрд┐ рдХреЛрдб hook рдореЗрдВ рджрд┐рдП рдЧрдП рдЪреЗрдХ рдкрд╛рд╕ рдХрд░ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдХрдорд┐рдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдирд╣реАрдВ рддреЛ рдХрдорд┐рдЯ рдмреНрд▓реЙрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рд╕рдорд╕реНрдпрд╛рдПрдБ рдмрддрд╛рдиреЗ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред рдЖрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрдорд┐рдЯ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡реЗ рд╕рдорд╕реНрдпрд╛рдПрдБ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдБред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ Git hooks рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд╣ рд╕рдм рдХрд╡рд░ рдХрд░реВрдВрдЧрд╛ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЬрд╝рд░реВрд░рдд рд╣реИтАФрд╡реЗ рдХреНрдпрд╛ рд╣реИрдВ, рдХреМрди-рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
Git Hooks рдХреНрдпрд╛ рд╣реИрдВ?
Git hooks рддрдм рдЕрдкрдиреЗ-рдЖрдк рдХрд╕реНрдЯрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдЬрдм рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ Git рдПрдХреНрд╢рди рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрдорд┐рдЯ, рдкреБрд╢ рдпрд╛ рдорд░реНрдЬ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рдмрд╛рдж рдореЗрдВред рд╡реЗ Git рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдЯ-рдЗрди рдЖрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред
рдЬрдм рдЖрдк рдХреЛрдИ Git рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, Git рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ hooks рдмрдирд╛ рджреЗрддрд╛ рд╣реИред рдЖрдк рдЗрдиреНрд╣реЗрдВ
.git/hooksрдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рдЕрдВрджрд░ рдкрд╛рдПрдБрдЧреЗред рдпреЗ.sampleрдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЪрд▓рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЪрд▓реЗрдВ, рддреЛ рдмрд╕.sampleрдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣рдЯрд╛ рджреЗрдВредрдЖрдк hooks рдХрд┐рд╕реА рднреА executable рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, pre-commit hook рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рдЖрдк рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдЯреЗрдЬреНрдб рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ "To-do" рдХрдореЗрдВрдЯреНрд╕ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗ рдФрд░ рдЕрдЧрд░ рдХреЛрдИ рдорд┐рд▓реЗ рддреЛ рдХрдорд┐рдЯ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░ рджреЗред рдпрд╛рдиреА рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдХрдорд┐рдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ, Git тАЬTo-doтАЭ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрдореЗрдВрдЯреНрд╕ рд╕реНрдХреИрди рдХрд░реЗрдЧрд╛ рдФрд░ рд▓рдВрдмрд┐рдд рдХрд╛рд░реНрдп рдорд┐рд▓реЗ рддреЛ рдЕрд╕рдлрд▓ рдХрд░ рджреЗрдЧрд╛ред рдЗрд╕реА рддрд░рд╣ рдЖрдк post-commit, pre-merge, pre-push рдФрд░ рдЕрдиреНрдп git рдПрдХреНрд╢рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо hooks рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
Git Hooks рдХреЗ рдкреНрд░рдХрд╛рд░
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП Git hooks рдХреЗ рджреЛ рдкреНрд░рдХрд╛рд░ рд╕рдордЭрддреЗ рд╣реИрдВред┬а
рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб hooks: рд╢реНрд░реЗрдгрд┐рдпрд╛рдБ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЙрджрд╛рд╣рд░рдг
рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб hooks рд╕реНрдерд╛рдиреАрдп рдорд╢реАрдиреЛрдВ рдкрд░ Git рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЗ рджреМрд░рд╛рди рдЪрд▓рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрдорд┐рдЯ, рд░рд┐рдмреЗрд╕рд┐рдВрдЧ, рдФрд░ рдкреБрд╢ред рдпрд╣рд╛рдБ рдХреБрдЫ рд▓реЛрдХрдкреНрд░рд┐рдп рдХреНрд▓рд╛рдЗрдВрдЯ hooks рдФрд░ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рджрд┐рдП рдЧрдП рд╣реИрдВред
git checkoutрдХрдорд╛рдВрдб рдХреЗ рдмрд╛рдж рдЪрд▓рддрд╛ рд╣реИред рдпрд╣ рддрдм рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдмреНрд░рд╛рдВрдЪ рдмрджрд▓рддреЗ рд╣реИрдВ рдпрд╛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХрдорд┐рдЯ рдпрд╛ рдкрд╛рде рдХреЛ рдЪреЗрдХрдЖрдЙрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдЬрд╝ рд░реАрдмрд┐рд▓реНрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЯреЗрдореНрдк рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдирдИ рдмреНрд░рд╛рдВрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредgit commit --amend(рдЬреЛ рдЖрдЦрд╝рд┐рд░реА рдХрдорд┐рдЯ рдХреЛ рд░реА-рд░рд╛рдЗрдЯ рдХрд░рддрд╛ рд╣реИ) рдпрд╛git rebase(рдЬреЛ рдХрдорд┐рдЯреНрд╕ рдХреА рд╢реГрдВрдЦрд▓рд╛ рдХреЛ рд░реА-рд░рд╛рдЗрдЯ рдХрд░рддрд╛ рд╣реИ) рдЬреИрд╕реЗ рдСрдкрд░реЗрд╢рдиреЛрдВ рдкрд░ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕реЗ рд░реЗрдлрд╝рд░реЗрдВрд╕реЗрдЬрд╝ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдпрд╛ рд░реА-рд░рд╛рдЗрдЯ рдХреЗ рдмрд╛рдж рдЯреЗрд╕реНрдЯ рдФрд░ CI рд╕реНрдЯреЗрдкреНрд╕ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВредgit amрдХрдорд╛рдВрдб рдЗрд╕реЗ рддрдм рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рдкреИрдЪ рд╡рд░реНрдХрд┐рдВрдЧ рдЯреНрд░реА рдкрд░ рд▓рдЧ рдЪреБрдХрд╛ рд╣реЛ рд▓реЗрдХрд┐рди рдирдпрд╛ рдХрдорд┐рдЯ рдмрдирдиреЗ рд╕реЗ рдкрд╣рд▓реЗред рдпрджрд┐ рдЗрд╕ hook рдХреЗ рдЪреЗрдХ рдЕрд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдиреЙрди-рдЬрд╝реАрд░реЛ рд╕реНрдЯреЗрдЯрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкреИрдЪ рдХреЛ рдХрдорд┐рдЯ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИредgit amрджреНрд╡рд╛рд░рд╛ рдкреИрдЪ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЪрд▓рд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрдорд┐рдЯ рд╕рдВрджреЗрд╢ рдХреА рдЬрд╛рдБрдЪ рдпрд╛ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВредрд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб hooks: рд╢реНрд░реЗрдгрд┐рдпрд╛рдБ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ
рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб hooks рд░рд┐рдореЛрдЯ Git рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ рдФрд░ рддрдм рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рд░рд┐рдореЛрдЯ рдЗрд╡реЗрдВрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐рд╕реА рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдкрд░ рдкреБрд╢ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рдмрд╛рдж рдореЗрдВред
Git Hooks рд╕реЗрдЯ рдХрд░рдирд╛
рдЗрд╕ рд╕реЗрдХреНрд╢рди рдореЗрдВ, рдЖрдкрдХреЛ git hooks рдЗрдВрд╕реНрдЯреЙрд▓ рдФрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЪрд░рдг рдорд┐рд▓реЗрдВрдЧреЗред рдЖрдк рдпрд╣ рднреА рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╢реБрд░реБрдЖрдд рд╕реЗ рдХрд╕реНрдЯрдо hooks рдХреИрд╕реЗ рдмрдирд╛рдПрдБред┬а
рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рддрд░реАрдХрд╛
рдЬрдм рдЖрдк рдХреЛрдИ Git рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, Git рдЕрдкрдиреЗ-рдЖрдк
.git/hooksрдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ hooks рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрдирд╛ рджреЗрддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдирд╛ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдЙрд╕ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдХреА рд░реВрдЯ рдкрд░ рдЬрд╛рдПрдБ рдЬрд╣рд╛рдБ рдЖрдкрдиреЗgit initрдЪрд▓рд╛рдпрд╛ рдерд╛ред рд╡рд╣рд╛рдБ рд╕реЗ рд╣рд┐рдбрди.gitрдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдФрд░ рдлрд┐рд░ hooks рд╕рдмрдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдЦреЛрд▓реЗрдВред рдПрдХ рд╕рд╛рдзрд╛рд░рдгcdрдХрдорд╛рдВрдб рдпрд╣ рд╕рдм рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ hooks рд╕рдмрдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рддрдХ рдкрд╣реБрдБрдЪ рджреЗрддрд╛ рд╣реИредрдЕрдВрджрд░ рдЬрд╛рдиреЗ рдкрд░, рдЖрдкрдХреЛ
.sampleрдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдбрд┐рдлрд╝реЙрд▓реНрдЯ hooks рджрд┐рдЦреЗрдВрдЧреЗред рдХрд┐рд╕реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ hook рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕ hook рд╕реЗ.sampleрдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣рдЯрд╛рдПрдБ рдФрд░ рдЙрд╕реЗ executable рдмрдирд╛рдПрдВредрдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, pre-commit hook рд╕реЗ
.sampleрдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рджрд┐рдпрд╛ рдХрдорд╛рдВрдб рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВредрдЗрд╕рдХреЗ рдмрд╛рдж, рдиреАрдЪреЗ рджрд┐рдП рдХрдорд╛рдВрдб рд╕реЗ рдЗрд╕реЗ executable рдмрдирд╛рдПрдБ:
рдЗрддрдирд╛ рдХрд░рдиреЗ рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ hooks рдХрд╛ рд╕рдВрдкрд╛рджрди рдФрд░ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдХрд╡рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╢реБрд░реБрдЖрдд рд╕реЗ рдХрд╕реНрдЯрдо hooks рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдпреЗ рдЪрд░рдг рдЕрдкрдирд╛рдПрдБред
.git/hooks/рдореЗрдВ рдирдИ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛рдПрдБ:рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдБред рдЙрджрд╛рд╣рд░рдг:
рд╕реЗрд╡ рдХрд░реЗрдВ рдФрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ, рдлрд┐рд░ рдЗрд╕реЗ executable рдмрдирд╛рдПрдБ:
рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЬрдм рднреА рдХрдорд┐рдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, hooks рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВ
" Commit message hook triggered"рдХрд╕реНрдЯрдо hooks рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рднреА рд╣реИред рдЬрдм рдЖрдк рдХреЛрдИ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, Git рдбрд┐рдлрд╝реЙрд▓реНрдЯ hooks рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЗрдиреНрд╣реЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдбрд┐рдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред┬а
рдпрд╣ рдРрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдЬрдм рдЖрдк
git initрдЪрд▓рд╛рддреЗ рд╣реИрдВ, Git рдЧреНрд▓реЛрдмрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреА рд╕рд╛рдордЧреНрд░реА рдирдИ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдХреА.git/рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ hooks рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЧреНрд▓реЛрдмрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдХрд╕реНрдЯрдо hook рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреА рдмрдирд╛рдИ рд╣рд░ рдирдИ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рд╡реЗ рдХрд╕реНрдЯрдо hooks рдЕрдкрдиреЗ-рдЖрдк рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░ рд▓реЗрдЧреАредHook рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдирд╛ рдФрд░ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░рдирд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдпрд╣ рддрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рд╡рд╣ рдЕрд╕реНрдкрд╖реНрдЯ рдХрдорд┐рдЯ рд╕рдВрджреЗрд╢ рдкрдХрдбрд╝рдирд╛ рд╣реИ, рдЧрд▓рддреА рд╕реЗ рдкреБрд╢ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдирд╛ рд╣реИ, рдпрд╛ рдХреИрд╢ рд╕рд╛рдлрд╝ рдХрд░рдирд╛ рд╣реИ? рдЙрджреНрджреЗрд╢реНрдп рдкрд╣рд▓реЗ рд╕реЗ рддрдп рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ git hooks рдЕрд▓рдЧ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрд┐рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред┬а
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдХрдорд┐рдЯ рд╕рдВрджреЗрд╢ рд╢реИрд▓реА рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк commit-msg hook рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдЖрдк рдореБрдЦреНрдп рдмреНрд░рд╛рдВрдЪ рдкрд░ рдХреБрдЫ рдЦрд╛рд╕ рдкреБрд╢ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд╛рдо pre-push hook рд╕реЗ рдХрд░реЗрдВред┬а
рдЬрдм рдЖрдк hook рдЪреБрди рд▓реЗрдВ, рдЕрдЧрд▓рд╛ рдирд┐рд░реНрдгрдп рднрд╛рд╖рд╛ рдХрд╛ рд╣реИред macOS рдФрд░ Linux рдкрд░ рдПрдХ рдЫреЛрдЯреА-рд╕реА Bash (рдпрд╛ рд╕рд╛рдзрд╛рд░рдг sh) рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдХреНрд╕рд░ рдХрд╛рдлрд╝реА рд╣реЛрддреА рд╣реИред Windows рдкрд░ рдХреБрдЫ рдЯреАрдореЗрдВ PowerShell рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрддреА рд╣реИрдВред┬а
рдпрджрд┐ рдЖрдкрдХрд╛ рд░реЗрдкреЛ рдмрд╣реБрднрд╛рд╖реА рд╣реИ, рддреЛ рдЖрдк Python рдпрд╛ Node.js рдЬреИрд╕реЗ рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдкрд╕рдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕рдм рдПрдХ рд╣реА рд▓реЙрдЬрд┐рдХ рдЪрд▓рд╛ рд╕рдХреЗрдВред рдЗрд╕рд▓рд┐рдП, рдКрдкрд░ shebang (#!/bin/sh, #!/usr/bin/env python3, рдЖрджрд┐) рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рддрд╛рдХрд┐ Git рдХреЛ рдкрддрд╛ рд╣реЛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ execute рдХрд░рдирд╛ рд╣реИред
рдПрдХ рд╕рд╛рдзрд╛рд░рдг pre-commit hook рдЙрджрд╛рд╣рд░рдг рдЬреЛ
.envрдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХрдорд┐рдЯ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ API keys рдХреЛ рдЧрд▓рддреА рд╕реЗ рдкреБрд╢ рд╣реЛрдиреЗ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИредрдЬрдм рдЖрдк hooks рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВ, рддреЛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдЙрдиреНрд╣реЗрдВ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд░реАрдиреЗрдо рдХрд░ рджреЗрдирд╛ (pre-commit рдХреЛ pre-commit.off рдореЗрдВ рдмрджрд▓рдирд╛) рдпрд╛ рдЙрдирдХреА execute рдЕрдиреБрдорддрд┐ рд╣рдЯрд╛ рджреЗрдирд╛ред┬а
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛ, рддреЛ рдХрдорд┐рдЯ hooks рдХреЛ рд╕реНрдХрд┐рдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
git commit --no-verifyрдФрд░ рдкреБрд╢ hooks рдХреЛ рд╕реНрдХрд┐рдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПgit push --no-verifyрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЖрдкgit config core.hooksPath /dev/nullрд╕реЗ Git рдХреЛ рдХрд┐рд╕реА рдЦрд╛рд▓реА рдлрд╝реЛрд▓реНрдбрд░ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдХреЗ hooks рдХреЛ рдЧреНрд▓реЛрдмрд▓реА рднреА рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредGit Hooks рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдФрд░ рдЙрджрд╛рд╣рд░рдг
Git hooks рдЖрдкрдХреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ, рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ, рдФрд░ рдЧреБрдгрд╡рддреНрддрд╛ рдорд╛рдирдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИрдВред┬а
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдСрдЯреЛрдореЗрд╢рди рдкрд░рд┐рджреГрд╢реНрдп
рдХреЛрдб рд╕реНрдЯрд╛рдЗрд▓ рдпрд╛ рд▓рд┐рдВрдЯрд┐рдВрдЧ рд▓рд╛рдЧреВ рдХрд░рдирд╛: pre-commit hook рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдХреЛрдб рдлрд╝реЙрд░реНрдореИрдЯрд┐рдВрдЧ рдСрдЯреЛрдореЗрдЯ рдХрд░рдиреЗ рдФрд░ рдХрдорд┐рдЯ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП pre-commit hook рдореЗрдВ prettier рдЕрдкрдиреЗ-рдЖрдк рдлрд╝реЙрд░реНрдореИрдЯрд┐рдВрдЧ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдХрдорд┐рдЯ рд╕реЗ рдкрд╣рд▓реЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рд╕реНрдЯреЗрдЬ рдХрд░ рджреЗрддрд╛ рд╣реИред рдЙрд╕рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд▓рд┐рдВрдЯрд░ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХрдорд┐рдЯ рддрднреА рд╕рдлрд▓ рд╣реЛрдЧрд╛ рдЬрдм рд▓рд┐рдВрдЯрд┐рдВрдЧ рдкрд╛рд╕ рд╣реЛред рдпрджрд┐ рдЕрд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХрдорд┐рдЯ рд░реБрдХ рдЬрд╛рдПрдЧрд╛ред
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдПрдБ: рдЖрдк hooks рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреЛ рдкреБрд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдПрдБред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рджрд┐рдпрд╛ pre-push hook рдЖрдкрдХреЗ рд░реЗрдкреЛ рдореЗрдВ рдЙрдкрд▓рдмреНрдз pytests рдЕрдкрдиреЗ-рдЖрдк рдЦреЛрдЬрдХрд░ рдкреБрд╢ рд╕реЗ рдкрд╣рд▓реЗ рдЪрд▓рд╛рддрд╛ рд╣реИред
рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдХреЛ рдХрдорд┐рдЯ рд╣реЛрдиреЗ рд╕реЗ рдЕрдкрдиреЗ-рдЖрдк рдмреНрд▓реЙрдХ рдХрд░реЗрдВ:
.env,.pem, рдпрд╛.keyрдЬреИрд╕реА рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЕрдХреНрд╕рд░ рд╕реАрдХреНрд░реЗрдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВред рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ pre-commit hook рдЙрджрд╛рд╣рд░рдг рдРрд╕реЗ рдкреИрдЯрд░реНрди рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдорд┐рд▓реЗ рддреЛ рдХрдорд┐рдЯ рдмреНрд▓реЙрдХ рдХрд░ рджреЗрддрд╛ рд╣реИредрдкреНрд░рднрд╛рд╡реА Git Hooks рд▓рд┐рдЦрдиреЗ рдХреЗ рдЯрд┐рдкреНрд╕
рдпрд╣рд╛рдБ рд╡реЗ рдЯрд┐рдкреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ Git hooks рд▓рд┐рдЦрддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧреА рд▓рдЧреЗ рд╣реИрдВред┬а
Hooks рдХреЛ рддреЗрдЬрд╝ рд░рдЦреЗрдВ
Hooks рд╣рд░ рдмрд╛рд░ рдХреБрдЫ Git рдПрдХреНрд╢рди рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдиреЗ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╣рд▓реНрдХрд╛ рд░рдЦреЗрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрдбрд╝реЗ рдЯреЗрд╕реНрдЯ рд╕реВрдЯ рд╣реИрдВ, рддреЛ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдиреАрдп hooks рдХреЗ рдмрдЬрд╛рдп CI рдореЗрдВ рдЪрд▓рд╛рдПрдБред рд╣рд░ рдХрдорд┐рдЯ рдкрд░ рдкреВрд░реЗ рд░реЗрдкреЛ рдореЗрдВ рд▓рд┐рдВрдЯрд░реНрд╕, рдлрд╝реЙрд░реНрдореИрдЯрд░реНрд╕, рдпрд╛ рдЪреЗрдХреНрд╕ рдЪрд▓рд╛рдирд╛ рдЖрдкрдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдмрджрд▓реА рд╣реБрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рддрдХ рдЪреЗрдХ рд╕реАрдорд┐рдд рдХрд░реЗрдВред
рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рд░рдЦреЗрдВ┬а
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ hooks рдЕрд▓рдЧ-рдЕрд▓рдЧ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВред рдкреЛрд░реНрдЯреЗрдмрд▓ shebangs рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд▓рд╛рдЗрди рдПрдВрдбрд┐рдВрдЧреНрд╕ рд╕реБрд╕рдВрдЧрдд рд░рдЦреЗрдВ (CRLF рдХреЗ рдмрдЬрд╛рдп LF), рдФрд░ рдПрдмреНрд╕реЛрд▓реНрдпреВрдЯ рдкрд╛рде рд╣рд╛рд░реНрдбрдХреЛрдб рди рдХрд░реЗрдВред┬а
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп,
PATHрдФрд░ рд▓реЛрдХрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдЬреИрд╕реЗnpm run lintрдпрд╛python -mрдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдХрдИ рдкрд░рд┐рд╡реЗрд╢реЛрдВ рдореЗрдВ рдЪрд▓реЗредрдбреАрдмрдЧрд┐рдВрдЧ рд░рдгрдиреАрддрд┐рдпрд╛рдБ
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреИрд╕реЗ рдЪрд▓ рд░рд╣реА рд╣реИ рдЗрд╕реЗ рдЯреНрд░реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддреГрдд рд▓реЙрдЧрд┐рдВрдЧ рдпрд╛ рдХреЛрдИ рдбрд┐рдмрдЧ рдлрд╝реНрд▓реИрдЧ (рдЙрджрд╛рд╣рд░рдг,
HOOK_DEBUG=1) рдЬреЛрдбрд╝реЗрдВред рд╡рд░реНрддрдорд╛рди рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА, рдмреНрд░рд╛рдВрдЪ, рдпрд╛ рд╕реНрдЯреЗрдЬ рд╣реЛ рд░рд╣реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдЬреИрд╕реЗ рд╡рд┐рд╡рд░рдг рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВред рдЗрд╕рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдирд╛ рдФрд░ рдЬрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдЖ рд░рд╣реА рд╣реИ рд╡рд╣рд╛рдБ рддрдХ рдкрд╣реБрдБрдЪрдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИредрд╡рд┐рднрд┐рдиреНрди рдЗрдирдкреБрдЯреНрд╕ рдХреЗ рд╕рд╛рде hooks рдЯреЗрд╕реНрдЯ рдХрд░реЗрдВ рдФрд░ рдмрджрд▓рд╛рд╡ рдкреБрд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдлреЗрд▓реНрдпреЛрд░ рд╕реАрдирд╛рд░рд┐рдпреЛ рд╕рд┐рдореБрд▓реЗрдЯ рдХрд░реЗрдВред рдпрджрд┐ рдХреЛрдИ hook рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рдЧрддрд┐ рд░реЛрдХ рджреЗ, рддреЛ рдЖрдк Git рдХреЗ
--no-verifyрдлрд╝реНрд▓реИрдЧ рд╕реЗ рдЙрд╕реЗ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдРрд╕реЗ environment variables рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ hooks рдХреЛ рд╕реНрдХрд┐рдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рд╣реЛрдВредрдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдореНрд╕ рдореЗрдВ рд╕реБрд╕рдВрдЧрдд рд╡реНрдпрд╡рд╣рд╛рд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, OS-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдорд╛рдВрдб рд╕реЗ рдмрдЪреЗрдВ, рдФрд░ рдкреЛрд░реНрдЯреЗрдмрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВред
Hooks рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдХрд░реЗрдВ
рдЕрдЪреНрдЫрд╛ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдЯреАрдо рдХреА рд╕рдордЭ рдмрдврд╝рд╛рддрд╛ рд╣реИ рдФрд░ рдирдП рд╕рджрд╕реНрдпреЛрдВ рдХрд╛ рдСрдирдмреЛрд░реНрдбрд┐рдВрдЧ рдЖрд╕рд╛рди рдХрд░рддрд╛ рд╣реИред рдПрдХ рдХреЗрдВрджреНрд░реАрдп README рдмрдирд╛рдП рд░рдЦреЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рд░ hook рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп, рд╡реНрдпрд╡рд╣рд╛рд░, рдФрд░ рдЙрдкрдпреЛрдЧ рджрд┐рдпрд╛ рд╣реЛред рдЗрд╕рдореЗрдВ рд░рди рдХреИрд╕реЗ рдХрд░реЗрдВ, рдкреНрд░реАрд░рд┐рдХреНрд╡рд┐рдЬрд┐рдЯреНрд╕, рдЯреНрд░рдмрд▓рд╢реВрдЯрд┐рдВрдЧ, рдФрд░ рдмрд╛рдпрдкрд╛рд╕рд┐рдВрдЧ рдЯрд┐рдкреНрд╕ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред рд╕рд╛рде рд╣реА, рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди/рд╕реЗрдЯрдЕрдк рдирд┐рд░реНрджреЗрд╢ рднреА рджреЗрдВред┬а
Git Hooks рдХреЗ рдЙрдиреНрдирдд рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди рддрдХрдиреАрдХреЗрдВ рдФрд░ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдПрдБ
рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рдПрдбрд╡рд╛рдВрд╕реНрдб рдпреВрдЬрд╝рд░ рд╣реИрдВ, рддреЛ рдпреЗ рдЯрд┐рдкреНрд╕ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдкрд░рдлрд╝реЙрд░рдореЗрдВрд╕ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди
рдЬрдЯрд┐рд▓ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рдкрд░рдлрд╝реЙрд░рдореЗрдВрд╕ рдмреЗрд╣рддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдмрдЪрдХрд░ рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдШрдЯрд╛рдПрдБред рдЗрд╕рд╕реЗ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕рдордп рдХрдо рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдлреЗрд▓реНрдпреЛрд░ рдкреЙрдЗрдВрдЯреНрд╕ рднреА рдШрдЯрддреЗ рд╣реИрдВред┬а
рд▓рд┐рдВрдЯрд┐рдВрдЧ рдЬреИрд╕реЗ рдорд╣рдБрдЧреЗ рдкреНрд░реЛрд╕реЗрд╕ рдХреЗ рдирддреАрдЬреЗ рдХреИрд╢ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдлрд╝рд╛рдЗрд▓реЗрдВ рди рдмрджрд▓реА рд╣реЛрдВ рддреЛ рдЙрдиреНрд╣реЗрдВ рджреЛрдмрд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред┬а
рдпрджрд┐ hooks рдореЗрдВ рдХрдИ рдЪреЗрдХреНрд╕ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдкреИрд░реЗрд▓рд▓ рдЪрд▓рд╛рдПрдБ рддрд╛рдХрд┐ рд╡реЗ рд╕рд╛рде-рд╕рд╛рде рдЪрд▓реЗрдВред рд╕рд╛рде рд╣реА, hook рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ рдореЙрдбреНрдпреБрд▓рд░ рдмрдирд╛рдПрдБред рдпрд╛рдиреА hooks рдХреЛ рдЫреЛрдЯреЗ, рдкреБрди: рдЙрдкрдпреЛрдЧ рдпреЛрдЧреНрдп рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреА рддрд░рд╣ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХрд░реЗрдВ рдЬреЛ рд╕рдВрджрд░реНрдн рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЗрд╡рд▓ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣рд┐рд╕реНрд╕реЗ рдЪрд▓рд╛рдПрдБред
Hook рдЪреЗрдирд┐рдВрдЧ рдФрд░ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди
рдПрдХ рд╣реА git рдЗрд╡реЗрдВрдЯ рдореЗрдВ рдХрдИ hooks рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП hook рдЪреЗрдирд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, pre-commit hook рдореЗрдВ рдЖрдк рдкрд╣рд▓реЗ рд▓рд┐рдВрдЯрд┐рдВрдЧ, рдлрд┐рд░ рдЯреЗрд╕реНрдЯ, рдФрд░ рдлрд┐рд░ рдХреЛрдб рдлрд╝реЙрд░реНрдореИрдЯрд┐рдВрдЧтАФрд╕рдмрдХреЛ рдЪреЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд░ рдХрдорд╛рдВрдб рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдЪрд▓рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдХреЛрдИ рдЕрд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ (рдиреЙрди-рдЬрд╝реАрд░реЛ рд╕реНрдЯреЗрдЯрд╕), рддреЛ рдмрд╛рдж рдХреЗ рдХрдорд╛рдВрдбреНрд╕ рд╕реНрдХрд┐рдк рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЦрд╝рд░рд╛рдм рдХрдорд┐рдЯ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХреЗред┬а
рдЬрдм hook рдПрдХреНрд╢рдиреНрд╕ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрдВ, рддреЛ рд╕рдордп рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдкреИрд░реЗрд▓рд▓ рднреА рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╣реАрдВ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВред
рдХреЙрдиреНрдлрд╝рд┐рдЧ рдкреНрд░рдмрдВрдзрди┬а
рд╣рд░ рд░реЗрдкреЛ рдХреА рдЕрдкрдиреА
.git/hooksрдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╣реЛрддреА рд╣реИред рдпрд╛рдиреА рдпрджрд┐ рдЖрдк рдХрдИ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рд╡рд╣реА рдЪреЗрдХреНрд╕ (рдорд╛рди рд▓реЗрдВ, рд▓рд┐рдВрдЯрд┐рдВрдЧ) рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рд╣рд░ рдЬрдЧрд╣ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛ред рдмреЗрд╣рддрд░ рддрд░реАрдХрд╝рд╛ рд╣реИ hooks рдХреЛ рдХреЗрдВрджреНрд░реАрдХреГрдд рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рддрд╛рдХрд┐ рд╕рднреА рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реАрдЬрд╝ рдЙрдиреНрд╣реЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХреЗрдВ рдФрд░ рдЪрд▓рд╛ рд╕рдХреЗрдВредрдЖрдк рдпрд╣ рдПрдХ рдХрдорд╛рдВрдб рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
git config --global core.hooksPath ~/.githooksред рдпрд╣ Git рдХреЛ~/.githooksрдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ hooks рдвреВрдБрдврдиреЗ рдХреЛ рдХрд╣рддрд╛ рд╣реИред рд╡рд╣рд╛рдБ рдмрдирд╛рдП рдЧрдП рдХрд┐рд╕реА рднреА hook рдХреЛ рдЖрдкрдХреА рд╕рднреА рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реАрдЬрд╝ рдЕрдкрдиреЗ-рдЖрдк рд╕рд╛рдЭрд╛ рдХрд░реЗрдВрдЧреАредрдЖрдк рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ (JSON рдпрд╛ YAML) рд╕реЗ hook рд▓реЙрдЬрд┐рдХ рдХреЛ рдЕрдзрд┐рдХ рдбрд╛рдпрдирд╛рдорд┐рдХ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд░ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд▓реЙрдЬрд┐рдХ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХрд╛ hook рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрд╕ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рд╣реА рдирд┐рдпрдо рдЕрдкрдиреЗ-рдЖрдк рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдХрдВрдбреАрд╢рдирд▓ рдПрдХреНрдЬрд╝реАрдХреНрдпреВрд╢рди
Hook рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЗ рдЕрдВрджрд░ рд╕рд░рд▓ рд╢рд░реНрддреЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡реЗ рдХреЗрд╡рд▓ рддрдм рдЪрд▓реЗрдВ рдЬрдм рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд╡рд░реНрддрдорд╛рди рдмреНрд░рд╛рдВрдЪ рдирд╛рдо рдЬрд╛рдБрдЪрдирд╛, рдХреМрди-рд╕реА рдлрд╝рд╛рдЗрд▓реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрджрд▓реАрдВ рдЙрдиреНрд╣реЗрдВ рджреЗрдЦрдирд╛, рдпрд╛ рдРрд╕рд╛ environment variable рдкрдврд╝рдирд╛ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реЛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╕реНрдХрд┐рдк рдХрд░рдирд╛ рд╣реИред
рдФрд░ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП, pre-commit рдЬреИрд╕реЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬрд╣рд╛рдБ рдЖрдк рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рдЪрд░рдг рдореЗрдВ рдХреМрди-рд╕реЗ hooks рдЪрд▓реЗрдВрдЧреЗред рдЖрдк рдХрдВрдбреАрд╢рдирд▓ рд▓реЙрдЬрд┐рдХ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХреЗрд╡рд▓ рдХреБрдЫ рдмреНрд░рд╛рдВрдЪреЗрдЬрд╝ рдкрд░ hooks рдЪрд▓рд╛рдирд╛, variables рд╕реЗ hooks рд╕реНрдХрд┐рдк рдХрд░рдирд╛, рдпрд╛ рдЯрд╛рдЗрдо-рдЖрдзрд╛рд░рд┐рдд рд╢рд░реНрддреЗрдВ рдЬреЛрдбрд╝рдирд╛ред рдЗрд╕рд╕реЗ рдЖрдкрдХреЗ hook рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдбрд╛рдпрдирд╛рдорд┐рдХ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рдЕрдиреБрд░реВрдк рдврд▓рддреЗ рд╣реИрдВред
рд╕рд╣рдпреЛрдЧ рдФрд░ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреА рд░рдгрдиреАрддрд┐рдпрд╛рдБ┬а
рдЖрдк git hooks рдХреЛ рдХреЗрдВрджреНрд░реАрдХреГрдд рдХрд░ рдЯреАрдореЛрдВ рдФрд░ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реАрдЬрд╝ рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
Git рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕
рдЬрдм рдЖрдк рдХреЛрдИ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, Git
git/hooksрдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рддрд╣рдд рдХреБрдЫ рдбрд┐рдлрд╝реЙрд▓реНрдЯ hooks рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпреЗ Git рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдЖрддреЗ рд╣реИрдВредрдХрд╕реНрдЯрдо hooks рдХреЛ рдХреЗрдВрджреНрд░реАрдп рд░реВрдк рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ Git рдЯреЗрдореНрдкрд▓реЗрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрдирд╛рдПрдБ, рдЕрдкрдиреЗ hooks рд╡рд╣рд╛рдБ рд▓рд┐рдЦреЗрдВ, рдФрд░ Git рдХреЛ рдЧреНрд▓реЛрдмрд▓реА рдЗрд╕ рдирдП рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░ рджреЗрдВред┬а
рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░реАрдХреЗ рдореЗрдВ hooks рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЬрд╝рди рдХрдВрдЯреНрд░реЛрд▓ рдХреА рдХрдореА рд╣реИред рдпрд╣ рддрдм рдЦрд╛рд╕ рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрдм рдЖрдкрдХреЗ hooks рдХрдо рд╣реА рдмрджрд▓рддреЗ рд╣реЛрдВред рдпрджрд┐ рдЖрдк hooks рдХреЛ рдЕрдХреНрд╕рд░ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд░реНрдЬрд╝рди рдХрдВрдЯреНрд░реЛрд▓ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЕрдЧрд▓рд╛ рддрд░реАрдХрд╛ рдЕрдкрдирд╛рдПрдБред
рдХреЗрдВрджреНрд░реАрдп git рд░реЗрдкреЛ
рдПрдХ рд╕рдорд░реНрдкрд┐рдд, рд╡рд░реНрдЬрд╝рди-рдирд┐рдпрдВрддреНрд░рд┐рдд, рдХреЗрдВрджреНрд░реАрдп рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдмрдирд╛рдПрдБ рдФрд░ рдЕрдкрдиреЗ рд╕рднреА рдХрд╕реНрдЯрдо hook рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдЙрд╕ рд░реЗрдкреЛ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реЗрдкреЛ рд╕реЗ рдЕрд▓рдЧред рддрд╛рдХрд┐ рдЖрдк hooks рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдбрдмреЗрд╕ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХреЗрдВред┬а
рдЗрди hooks рдХреЛ рдорд╛рдирдХреАрдХреГрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛рдиреА рдХрд┐рд╕реА рдПрдХ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рд╕реЗ рдмрдБрдзреЗ рдкрд╛рде рдпрд╛ рд╡реИрд▓реНрдпреВрдЬрд╝ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВред
рдпрд╣ рд╕реЗрдЯрдЕрдк рдЯреАрдореЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдХреЛрдИ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдЦреАрдВрдЪ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рд╕рд┐рдВрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИред┬а
рдФрд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рддрд░реАрдХрд╛ рд╣реИ рдПрдХ рд╕реЗрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬреЛ рдХреЗрдВрджреНрд░реАрдп hooks рд░реЗрдкреЛ рдХреЛ рдХреНрд▓реЛрди рдХрд░реЗ рдФрд░ hook рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА
.git/hooksрдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдХреЙрдкреА рдХрд░ рджреЗред рдЙрджрд╛рд╣рд░рдг рд╕реЗрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ:┬ардПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк symlinks рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА
.git/hooksрдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ рдЕрдкрдиреЗ рд╡рд░реНрдЬрд╝рди-рдХрдВрдЯреНрд░реЛрд▓реНрдб hooks рд░реЗрдкреЛ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ рдЬреИрд╕реЗ рд╣реА рдЖрдк рдХреЗрдВрджреНрд░реАрдп рд░реЗрдкреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗ, hooks рдЕрдкрдиреЗ-рдЖрдк рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рдПрдБрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ symlink рдЙрд╕реА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИредрдЗрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рднрд░реЛрд╕реЗрдордВрдж рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, hooks рдХреЗ рд░рдЦрд░рдЦрд╛рд╡ рдХреА рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдПрдБред рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп pull requests рд╕реЗ hooks рдореЗрдВ рдмрджрд▓рд╛рд╡ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░реЗрдВ, рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдмрд╛рдж рд╣реА рдорд░реНрдЬ рдХрд░реЗрдВ, рдФрд░ рдЬреИрд╕реЗ-рдЬреИрд╕реЗ hooks рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдВ, рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдЕрдкрдбреЗрдЯ рд░рдЦреЗрдВред┬а
рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рд╕рд╛рде Git Hooks рдХрд╛ рдПрдХреАрдХрд░рдг
Git hooks рдХрдВрдЯреАрдиреНрдпреВрд╕ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди (CI) рдореЗрдВ рдмрдбрд╝реА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддреЗ рд╣реИрдВред рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, CI рдХрд╛ рдорддрд▓рдм рд╣реИ рдмрд╛рд░-рдмрд╛рд░ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдорд░реНрдЬ рдХрд░рдирд╛, рдлрд┐рд░ рдмрд┐рд▓реНрдбреНрд╕ рдФрд░ рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдХрд░ рд╢реБрд░реБрдЖрддреА рдЪрд░рдг рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдБ рдкрдХрдбрд╝рдирд╛ред Jenkins, GitHub Actions, рдпрд╛ GitLab CI рдЬреИрд╕реЗ CI/CD рдЯреВрд▓реНрд╕ рдХреЗ рд╕рд╛рде hooks рдХреЛ рдЬреЛрдбрд╝рдХрд░, рдЖрдк Git рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрд┐рд▓реНрдбреНрд╕ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рдРрдкреНрд▓рд┐рдХреЗрд╢рдВрд╕ рдХреЛ рдбрд┐рдкреНрд▓реЙрдп рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб pre-receive hook рдкреБрд╢ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ Git рд╕рд░реНрд╡рд░ рдкрд░ рдХрд╕реНрдЯрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрд╕рдлрд▓ рд╣реЛрддреА рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рдкреБрд╢ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджреЗрддрд╛ рд╣реИред рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрд╕ рдмреНрд░рд╛рдВрдЪ рдкрд░ рдирд╡реАрдирддрдо CI рдмрд┐рд▓реНрдб рдкрд╛рд╕ рд╣реБрдИ рдереА рдпрд╛ рдирд╣реАрдВ, рдкреБрд╢ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗред рдЙрд╕ CI рд░рди рдореЗрдВ рдХреЛрдб рдХрд╡рд░реЗрдЬ рдЪреЗрдХ, рдпреВрдирд┐рдЯ/рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдЯреЗрд╕реНрдЯ, рдпрд╛ рд╕реБрд░рдХреНрд╖рд╛ рд╕реНрдХреИрди рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
Hooks рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рднреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред post-receive hook рдПрдХ webhook рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдХреЛрдб main рдореЗрдВ рдорд░реНрдЬ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдкрдиреЗ-рдЖрдк build тЖТ deploy тЖТ release рдЪрдХреНрд░ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред
рд╕реБрд░рдХреНрд╖рд╛ рд╕рдВрдмрдВрдзреА рд╡рд┐рдЪрд╛рд░ рдФрд░ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдПрдБ┬а
рдпрджрд┐ рдЖрдк рдЖрд╕рд╛рди рд╕рд╣рдпреЛрдЧ рдФрд░ рд╕рд╛рдЭрд╛ рд╕рддреНрдп рдХреЗ рд▓рд┐рдП рдХреЗрдВрджреНрд░реАрдп hooks рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЕрдирдзрд┐рдХреГрдд рдкрд╣реБрдБрдЪ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП hooks рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдкрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдлрд╝рд╛рдЗрд▓ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред рдХреЗрд╡рд▓ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред┬а
рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ hook рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реЗ рдЗрдирдкреБрдЯреНрд╕ рдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХреЛ рд╡реЗрд▓рд┐рдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдХреЛрдб рдЗрдВрдЬреЗрдХреНрд╢рди рд╣рдорд▓реЛрдВ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдЕрд▓реНрдлрд╝рд╛рдиреНрдпреВрдореЗрд░рд┐рдХ рдФрд░ рдбреИрд╢ рд╡рд╛рд▓реЗ рдмреНрд░рд╛рдВрдЪ рдирд╛рдореЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реБрдП рд╕рдЦреНрдд рдкреИрдЯрд░реНрди рдХреЗ рд╡рд┐рд░реБрджреНрдз рдЗрдирдкреБрдЯреНрд╕ рд╡реЗрд▓рд┐рдбреЗрдЯ рдХрд░реЗрдВ, рдпрд╛ рдРрд╕реЗ рдЯреИрдЧреНрд╕ рдЬреЛ
vMAJOR.MINOR.PATCHрд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реЛрдВред┬ардХрднреА рднреА hook рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдореЗрдВ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рд╣рд╛рд░реНрдбрдХреЛрдб рди рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП environment variables рдпрд╛ рд╕рдорд░реНрдкрд┐рдд рд╕реАрдХреНрд░реЗрдЯ рдореИрдиреЗрдЬрдореЗрдВрдЯ рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЖрдк Gitleaks рдЬреИрд╕реЗ рдЯреВрд▓реНрд╕ рдХреЛ pre-commit hooks рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЬрд┐рди рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдЖрдк рдХрдорд┐рдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВ рдЙрдирдореЗрдВ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд╛ рд╕реНрдХреИрди рдЪрд▓ рд╕рдХреЗрдВред
рдХреЛрдИ рдЖрдкрдХреЗ hook рдХреЛ рдХрд┐рд╕реА рджреВрд╕рд░реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдХреЛрдб рдпрд╛ рдЬрд╛рдирдХрд╛рд░реА рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ hooks рдХрд┐рди рдбреЛрдореЗрдиреНрд╕ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕реЗ рд╕реАрдорд┐рдд рд░рдЦреЗрдВред рдЕрдирдЬрд╛рди рдбреЗрд╕реНрдЯрд┐рдиреЗрд╢рди рд╕рд░реНрд╡рд░реНрд╕ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА рдпрд╛ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╕рд╛рде рд╣реА, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рд▓реЙрдЧреНрд╕ рдбрд┐рд╕реНрдкреНрд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рдЧреЛрдкрдиреАрдп рдЬрд╛рдирдХрд╛рд░реА рди рджрд┐рдЦрд╛рдПрдБред┬а
рдирд┐рд╖реНрдХрд░реНрд╖
Git hooks рдЖрдкрдХреЗ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рд╕реАрдзреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдорд╛рдирдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕рд╢рдХреНрдд рддрд░реАрдХрд╛ рд╣реИрдВред рд╡реЗ рдХреЛрдб рд╕реНрдЯрд╛рдЗрд▓ рдФрд░ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рд╕реЗ рд▓реЗрдХрд░ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ рддрдХ рд╣рд░ рдЪреАрдЬрд╝ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред
рдЙрдиреНрд╣реЗрдВ рд╕рдордЭрджрд╛рд░реА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдШрдЯрд╛рддреЗ рд╣реИрдВ, рд╕рдордп рдмрдЪрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЯреАрдореЛрдВ рдХреЗ рдмреАрдЪ рд╕рд╣рдпреЛрдЧ рдХреЛ рдФрд░ рд╕рд╣рдЬ рдмрдирд╛рддреЗ рд╣реИрдВред
рд╕рд░рд▓ pre-commit рдЪреЗрдХреНрд╕ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВ, рдлрд┐рд░ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди, рдХреЗрдВрджреНрд░реАрдп рдкреНрд░рдмрдВрдзрди, рдпрд╛ CI/CD рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдЬреИрд╕реЗ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рд╕реЗрдЯрдЕрдк рдЖрдЬрд╝рдорд╛рдПрдБред рдпрджрд┐ рдЖрдк Git рдпреВрдЬрд╝рд░ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдХреМрд╢рд▓ рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдбрд╡рд╛рдВрд╕реНрдб Git рдХреЛрд░реНрд╕ рджреЗрдЦреЗрдВред