Git 2.39 ์†Œ์Šค ์ œ์–ด ์‹œ์Šคํ…œ ์ถœ์‹œ

๋‘ ๋‹ฌ ๊ฐ„์˜ ๊ฐœ๋ฐœ ๋์— ๋ถ„์‚ฐ ์†Œ์Šค ์ œ์–ด ์‹œ์Šคํ…œ Git 2.39๊ฐ€ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Git์€ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๊ณ  ์•ˆ์ •์ ์ธ ๊ณ ์„ฑ๋Šฅ ๋ฒ„์ „ ์ œ์–ด ์‹œ์Šคํ…œ ์ค‘ ํ•˜๋‚˜๋กœ ๋ถ„๊ธฐ ๋ฐ ๋ณ‘ํ•ฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์œ ์—ฐํ•œ ๋น„์„ ํ˜• ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ก์˜ ๋ฌด๊ฒฐ์„ฑ๊ณผ ์†Œ๊ธ‰ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์ €ํ•ญ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ ์ปค๋ฐ‹์—์„œ ์ „์ฒด ์ด์ „ ๊ธฐ๋ก์˜ ์•”์‹œ์  ํ•ด์‹ฑ์ด ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ฐœ๋ฐœ์ž์˜ ๋””์ง€ํ„ธ ์„œ๋ช…์œผ๋กœ ๊ฐœ๋ณ„ ํƒœ๊ทธ์™€ ์ปค๋ฐ‹์„ ์ธ์ฆํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด์ „ ๋ฒ„์ „์— ๋น„ํ•ด ์ƒˆ ๋ฒ„์ „์—๋Š” 483๋ช…์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฐธ์—ฌํ•˜์—ฌ 86๊ฐœ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํฌํ•จ๋˜์—ˆ์œผ๋ฉฐ, ์ด ์ค‘ 31๋ช…์ด ์ฒ˜์Œ์œผ๋กœ ๊ฐœ๋ฐœ์— ์ฐธ์—ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ํ˜์‹ :

  • ๋ณ€๊ฒฝ ๋‚ด์—ญ์˜ ํ†ต๊ณ„์™€ ํ•จ๊ป˜ ์š”์•ฝ์„ ํ‘œ์‹œํ•˜๋„๋ก ์„ค๊ณ„๋œ "git shortlog" ๋ช…๋ น์— ์ž‘์„ฑ์ž ๋˜๋Š” ์ปค๋ฏธํ„ฐ์— ๊ตญํ•œ๋˜์ง€ ์•Š๊ณ  ํ•„๋“œ๋ณ„๋กœ ์ปค๋ฐ‹์„ ์ž„์˜๋กœ ๊ทธ๋ฃนํ™”ํ•˜๊ธฐ ์œ„ํ•œ "-group" ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "๊ณต๋™ ์ž‘์„ฑ์ž" ํ•„๋“œ์— ์–ธ๊ธ‰๋œ ๋„์šฐ๋ฏธ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๋ณ€๊ฒฝ ํšŸ์ˆ˜์— ๋Œ€ํ•œ ์ •๋ณด์™€ ํ•จ๊ป˜ ๊ฐœ๋ฐœ์ž ๋ชฉ๋ก์„ ํ‘œ์‹œํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: git shortlog -ns --group=author - -๊ทธ๋ฃน=์˜ˆ๊ณ ํŽธ:๊ณต๋™ ์ž‘์„ฑ์ž

    Shortlog ์ถœ๋ ฅ์€ ํ˜•์‹ ์ง€์ •์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง‘๊ณ„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ "--group" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ณต์žกํ•œ ๋ณด๊ณ ์„œ ์ƒ์„ฑ์„ ํฌ๊ฒŒ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ์ถ”๊ฐ€ ์ •๋ ฌ ๋ช…๋ น์ด ํ•„์š”ํ•˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŠน์ • ๋ฆด๋ฆฌ์Šค์— ๋Œ€ํ•ด ๋งค๋‹ฌ ์ˆ˜๋ฝ๋œ ์ปค๋ฐ‹ ์ˆ˜์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๋ณด๊ณ ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. git shortlog v2.38.0.. โ€”date='format:%Y-%m' โ€”group=' %cd' -s 2 2022-08 47 2022-09 405 2022-10 194 2022-11 5 2022-12 ์ด์ „์—๋Š” ์œ ์‚ฌํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด sort ๋ฐ uniq ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค: git log v2.38.0 .. โ€”๋‚ ์งœ='ํ˜•์‹:%Y -%m' โ€”ํ˜•์‹='%cd' | ์ •๋ ฌ | ์œ ๋‹ˆํฌ -c

  • ์ €์žฅ์†Œ์—์„œ ์ฐธ์กฐ๋˜์ง€ ์•Š๊ณ (๋ธŒ๋žœ์น˜๋‚˜ ํƒœ๊ทธ๋กœ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š”) ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด๋ฅผ ํŒจํ‚นํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ "cruft packs" ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ๊ธฐ๋Šฅ์ด ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๊ฐœ์ฒด๋Š” ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ์— ์˜ํ•ด ์‚ญ์ œ๋˜์ง€๋งŒ ๊ฒฝ์Ÿ ์กฐ๊ฑด์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์‚ญ์ œ๋˜๊ธฐ ์ „์— ํŠน์ • ์‹œ๊ฐ„ ๋™์•ˆ ์ €์žฅ์†Œ์— ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. "cruft packs" ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๋ชจ๋“  ๊ฐœ์ฒด๋ฅผ ํ•˜๋‚˜์˜ ํŒฉ ํŒŒ์ผ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ณ , ".mtimes" ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ๋ณ„๋„์˜ ํŒŒ์ผ์— ์ €์žฅ๋œ ๋ณ„๋„์˜ ํ…Œ์ด๋ธ”์— ๊ฐ ๊ฐœ์ฒด์˜ ์ˆ˜์ • ์‹œ๊ฐ„์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ˆ˜์ • ์‹œ๊ฐ„๊ณผ ์ค‘๋ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๊ฐœ์ฒด๊ฐ€ ์‹ค์ œ๋กœ ์‚ญ์ œ๋˜๊ธฐ ์ „์— ์ €์žฅ์†Œ์— ๋‚จ์•„ ์žˆ๋Š” ์‹œ๊ฐ„์€ "โ€”prune=" ์˜ต์…˜์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. " ๊ทธ๋Ÿฌ๋‚˜ ์‚ญ์ œํ•˜๊ธฐ ์ „์— ์ง€์—ฐํ•˜๋Š” ๊ฒƒ์€ ๊ฒฝ์Ÿ ์กฐ๊ฑด์œผ๋กœ ์ธํ•œ ์ €์žฅ์†Œ ์†์ƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ์ƒ๋‹นํžˆ ํšจ๊ณผ์ ์ด๊ณ  ์‹ค์šฉ์ ์ธ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ 100% ์‹ ๋ขฐํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์†์ƒ๋œ ์ €์žฅ์†Œ๋ฅผ ๋” ์‰ฝ๊ฒŒ ๋ณต์›ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ƒˆ ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” "git repack" ๋ช…๋ น์— "--expire-to" ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ๊ฐœ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‚ญ์ œ๋œ ๋ชจ๋“  ๊ฐ์ฒด์˜ ๋ณต์‚ฌ๋ณธ. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ง€๋‚œ 5๋ถ„ ๋™์•ˆ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๊ฐœ์ฒด๋ฅผ backup.git ํŒŒ์ผ์— ์ €์žฅํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: git repack --cruft --cruft-expiration=5. Minutes.ago -d --expire -to=../backup.git

  • ๋ถ€๋ถ„ ๋ณต์ œ(์ŠคํŒŒ์Šค ์ฒดํฌ์•„์›ƒ)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ถ€๋ถ„ ์ธ๋ฑ์Šค(์ŠคํŒŒ์Šค ์ธ๋ฑ์Šค)๊ฐ€ ์žˆ๋Š” ์˜์—ญ์„ ๊ฒ€์ƒ‰ํ•  ๋•Œ "git grep -cached" ์ž‘์—… ์†๋„๊ฐ€ ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ตœ๋Œ€ 70%). ์ด์ „์—๋Š” "-cached" ์˜ต์…˜์„ ์ง€์ •ํ•˜๋ฉด ๋จผ์ € ์ผ๋ฐ˜ ์ธ๋ฑ์Šค์—์„œ ๊ฒ€์ƒ‰์ด ์ˆ˜ํ–‰๋œ ๋‹ค์Œ ๋ถ€๋ถ„ ์ธ๋ฑ์Šค์—์„œ ๊ฒ€์ƒ‰์ด ์ˆ˜ํ–‰๋˜์–ด ๋Œ€๊ทœ๋ชจ ์ €์žฅ์†Œ์—์„œ ๊ฒ€์ƒ‰ํ•  ๋•Œ ๋ˆˆ์— ๋„๋Š” ์ง€์—ฐ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  • "git push" ์ž‘์—… ์ค‘์— ์ƒˆ ๊ฐœ์ฒด๊ฐ€ ์ €์žฅ์†Œ์— ๋ฐฐ์น˜๋˜๊ธฐ ์ „ ์„œ๋ฒ„์˜ ์ผ๊ด€์„ฑ ํ™•์ธ์ด ๊ฐ€์†ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 7๋งŒ ๊ฐœ์˜ ๋งํฌ๊ฐ€ ์žˆ๋Š” ํ…Œ์ŠคํŠธ ์ €์žฅ์†Œ(๊ทธ ์ค‘ 3%๋งŒ์ด ํ‘ธ์‹œ ์ž‘์—…์œผ๋กœ ์ฒ˜๋ฆฌ๋จ)์—์„œ ํ™•์ธํ•  ๋•Œ ์„ ์–ธ๋œ ๋งํฌ๋งŒ ๊ณ„์‚ฐํ•˜๋„๋ก ์ „ํ™˜ํ•จ์œผ๋กœ์จ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ํ™•์ธ ์‹œ๊ฐ„์„ 4.5๋ฐฐ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ์—์„œ ์ž ์žฌ์ ์ธ ์ •์ˆ˜ ์˜ค๋ฒ„ํ”Œ๋กœ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด "git apply" ๋ช…๋ น์€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํŒจ์น˜์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ํŒจ์น˜ ํฌ๊ธฐ๊ฐ€ 1GB๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ์ด์ œ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ์ž ์žฌ์ ์ธ ์ทจ์•ฝ์ ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด HTTP/2์™€ ํ•จ๊ป˜ GIT_TRACE_CURL=3 ๋˜๋Š” GIT_CURL_VERBOSE=1 ์˜ต์…˜๊ณผ ํ•จ๊ป˜ h1h2 ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ๋•Œ ์„ค์ •๋œ ํ—ค๋”์—์„œ ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ •๋ฆฌํ•˜๋„๋ก ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์— ๋Œ€ํ•œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์ธ ๋ธŒ๋žœ์น˜์—์„œ ์ฒดํฌ์•„์›ƒ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ "git Symbolic-ref HEAD" ๋ช…๋ น์€ ์ด์ œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ ์ด๋ฆ„์ด ์•„๋‹Œ ๋Œ€์ƒ ๋ธŒ๋žœ์น˜์˜ ์ด๋ฆ„์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ์ด์ „ ๋ถ„๊ธฐ์˜ ์„ค๋ช…์„ ํŽธ์ง‘ํ•˜๊ธฐ ์œ„ํ•ด "--edit-description" ์˜ต์…˜("git Branch โ€”edit-description @{-1}")์— @{-1} ์ธ์ˆ˜์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ‘œ์ค€ ์ž…๋ ฅ์„ ํ†ตํ•ด ์˜ต์…˜ ๋ชฉ๋ก์„ ์ „๋‹ฌํ•˜๋Š” "git merge-tree --stdin" ๋ช…๋ น์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋„คํŠธ์›Œํฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” fsmonitor ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€