Git

Git Hooks

meteorqz6 2025. 5. 10. 18:11

Git Hooks

: Git๊ณผ ๊ด€๋ จํ•œ ํŠน์ • ์ด๋ฒคํŠธ์— ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ

ํฌ๊ฒŒ Client-side Hooks, Server-side Hooks๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

 

ํด๋ผ์ด์–ธํŠธ ํ›…์˜ ์‹คํ–‰ ์œ„์น˜๋Š” ๊ฐœ๋ฐœ์ž ๋กœ์ปฌ Git์ด๊ณ , ์˜ˆ์‹œ ์ด๋ฒคํŠธ๋กœ pre-commit, commit-msg, pre-push ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„ ํ›…์€ Git ์„œ๋ฒ„ ์ธก ์ €์žฅ์†Œ์—์„œ ์‹คํ–‰๋˜๊ณ , ์˜ˆ์‹œ ์ด๋ฒคํŠธ๋กœ pre-receive, update, post-receive ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด ๊ธ€์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ ํ›…์— ๋Œ€ํ•ด์„œ ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 ํด๋ผ์ด์–ธํŠธ ํ›…(Client-side Hooks)

ํ›… ์ด๋ฆ„ ์‹คํ–‰ ์‹œ์  ๋Œ€ํ‘œ ์‚ฌ์šฉ ์˜ˆ์‹œ
 pre-commit ์ปค๋ฐ‹ ์ง์ „ ์ฝ”๋“œ ๋ฆฐํŠธ, ํ…Œ์ŠคํŠธ ์‹คํ–‰, ํŒŒ์ผ ํฌ๋งท ๊ฒ€์‚ฌ
commit-msg ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ž‘์„ฑ ์งํ›„ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ํฌ๋งท ๊ฒ€์ฆ
prepare-commit-msg ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์—๋””ํ„ฐ ์—ด๊ธฐ ์ „ ์ž๋™ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ž‘์„ฑ
post-commit ์ปค๋ฐ‹ ์™„๋ฃŒ ํ›„ Slack ์•Œ๋ฆผ ์ „์†ก, log ์ž‘์„ฑ
pre-push ์›๊ฒฉ ์ €์žฅ์†Œ ํ‘ธ์‹œ ์ง์ „ ํ…Œ์ŠคํŠธ ์‹คํ–‰, ์ปค๋ฐ‹ ์ˆ˜ ์ œํ•œ
post-checkout ๋ธŒ๋žœ์น˜ ๋ณ€๊ฒฝ ํ›„ ํŠน์ • ํŒŒ์ผ ์ž๋™ ๋ณต์‚ฌ, ์„ค์ • ์ ์šฉ
post-merge ๋จธ์ง€ ์™„๋ฃŒ ํ›„ ์˜์กด์„ฑ ์„ค์น˜, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹คํ–‰

 

Git Hooks ์ ์šฉํ•ด๋ณด๊ธฐ

Git Hooks๋Š” .git/hooks ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. hook์€ ์‹คํ–‰๊ฐ€๋Šฅํ•œ ์Šคํฌ๋ฆฝํŠธ์ด๋ฉฐ, ์„ค์ •ํ•˜๊ณ ์ž ํ•˜๋Š” ํ›… ์ด๋ฆ„์„ ํ™•์žฅ์ž ์—†์ด ํŒŒ์ผ๋ช…์œผ๋กœ ์ง€์ •ํ•˜๋ฉด Git Hooks๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .git/hooks/pre-commit, .git/hooks/post-merge ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

Git Hooks๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ• : husky

Git Hooks๋Š” .git ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ .git ๋””๋ ‰ํ† ๋ฆฌ๋Š” ๋ฒ„์ „ ๊ด€๋ฆฌ ๋Œ€์ƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์ธ Git ์ฒด๊ณ„ ํ•˜์—๋Š” Git Hooks๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. 

 

husky๋Š” ํด๋ผ์ด์–ธํŠธ ํ›…์„ ์„ค์ •ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๋กœ, Git Hooks๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Node.js ๊ธฐ๋ฐ˜์˜ ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค. npm, yarn, pnpm ์ค‘ ํ•˜๋‚˜๋ฅผ ์ด์šฉํ•ด์„œ ์„ค์น˜ ๋ฐ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. 

 

์•„๋ž˜์˜ ๋ฐฉ์‹์ฒ˜๋Ÿผ pnpm์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š” ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด๋ดค์Šต๋‹ˆ๋‹ค. 

 

1. pnpm add --save-dev husky

2. pnpm exec husky init

3. ์›ํ•˜๋Š” ํ›… ํŒŒ์ผ ์ƒ์„ฑ

 

commit-msg ํ›…์€ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•œ ํ›„์— ์‹ค์ œ ์ปค๋ฐ‹์ด ์ €์žฅ๋˜๊ธฐ ์ง์ „์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ํ›…์€ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์˜ ํ˜•์‹์„ ์ž๋™ ๊ฒ€์ฆํ•˜์—ฌ ์ผ๊ด€๋œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค.

 

pre-commit ํ›…์€ ์ปค๋ฐ‹ ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ง์ „์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ํ›…์€ ์ปค๋ฐ‹ ์ „์— ์ฝ”๋“œ์— ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋‚˜ ์Šคํƒ€์ผ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š”์ง€ ์ž๋™ ํ™•์ธํ•ด์ค๋‹ˆ๋‹ค. ์‹คํŒจํ•˜๋ฉด ์ปค๋ฐ‹์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

 

 

์ฐธ๊ณ  ์ž๋ฃŒ

https://library.gabia.com/contents/8492/

 

๊ฐ€๋น„์•„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

IT ์ฝ˜ํ…์ธ  ํ—ˆ๋ธŒ

library.gabia.com

https://typicode.github.io/husky/get-started.html

 

Get started | Husky

 

typicode.github.io