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

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

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

  • ์ €์žฅ์†Œ์˜ ์ผ๋ถ€๋งŒ ํฌํ•จํ•˜๋Š” ๋ถ€๋ถ„ ์ธ๋ฑ์Šค(ํฌ์†Œ ์ธ๋ฑ์Šค) ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๋„๋ฆฌ ์‚ฌ์šฉ๋  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ถ€๋ถ„ ์ธ๋ฑ์Šค๋Š” ๋ถ€๋ถ„ ๋ณต์ œ(์ŠคํŒŒ์Šค ์ฒดํฌ์•„์›ƒ) ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ๋ถˆ์™„์ „ํ•œ ์ €์žฅ์†Œ ๋ณต์‚ฌ๋ณธ์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ์ €์žฅ์†Œ์—์„œ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ๊ณต๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” git show, git sparse-checkout ๋ฐ git stash ๋ช…๋ น์— ๋ถ€๋ถ„ ์ธ๋ฑ์Šค ํ†ตํ•ฉ์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ถ€๋ถ„ ์ธ๋ฑ์Šค ์‚ฌ์šฉ์œผ๋กœ ์ธํ•œ ๊ฐ€์žฅ ๋ˆˆ์— ๋„๋Š” ์„ฑ๋Šฅ ์ด์ ์€ "git stash" ๋ช…๋ น์—์„œ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ ์ผ๋ถ€ ์ƒํ™ฉ์—์„œ ์‹คํ–‰ ์†๋„๊ฐ€ 80% ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  • ์ €์žฅ์†Œ์—์„œ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š”(๋ธŒ๋žœ์น˜๋‚˜ ํƒœ๊ทธ์—์„œ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š”) ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๊ฐœ์ฒด๋ฅผ ํŒจํ‚นํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด "ํฌ๋Ÿฌํ”„ํŠธ ํŒฉ" ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๊ฐœ์ฒด๋Š” ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ์— ์˜ํ•ด ์‚ญ์ œ๋˜์ง€๋งŒ ๊ฒฝ์Ÿ ์กฐ๊ฑด์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์‚ญ์ œ๋˜๊ธฐ ์ „์— ํŠน์ • ์‹œ๊ฐ„ ๋™์•ˆ ์ €์žฅ์†Œ์— ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ๊ฐœ์ฒด์˜ ๋ฐœ์ƒ ๊ธฐ๊ฐ„์„ ์ถ”์ ํ•˜๋ ค๋ฉด ์œ ์‚ฌํ•œ ๊ฐœ์ฒด์˜ ๋ณ€๊ฒฝ ์‹œ๊ฐ„๊ณผ ํ•จ๊ป˜ ํƒœ๊ทธ๋ฅผ ์ฒจ๋ถ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ชจ๋“  ๊ฐœ์ฒด๊ฐ€ ๊ณตํ†ต ๋ณ€๊ฒฝ ์‹œ๊ฐ„์„ ๊ฐ–๋Š” ํ•˜๋‚˜์˜ ํŒฉ ํŒŒ์ผ์— ์ €์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ์•„์ง ์‚ญ์ œํ•  ์ˆ˜ ์—†๊ณ  ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ์ƒˆ๋กœ์šด ๊ฐœ์ฒด๊ฐ€ ๋งŽ์„ ๋•Œ ๊ฐ ๊ฐœ์ฒด๋ฅผ ๋ณ„๋„์˜ ํŒŒ์ผ์— ์ €์žฅํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ œ์•ˆ๋œ "cruft packs" ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๋ชจ๋“  ๊ฐœ์ฒด๋ฅผ ํ•˜๋‚˜์˜ ํŒฉ ํŒŒ์ผ์— ์ €์žฅํ•˜๊ณ  ".mtimes" ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ํŒŒ์ผ์— ์ €์žฅ๋œ ๋ณ„๋„์˜ ํ…Œ์ด๋ธ”์— ๊ฐ ๊ฐœ์ฒด์˜ ์ˆ˜์ • ์‹œ๊ฐ„์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Windows ๋ฐ macOS์˜ ๊ฒฝ์šฐ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”์ ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์–ด "git status"์™€ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์ „์ฒด ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด Watchman๊ณผ ๊ฐ™์€ FS์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”์ ํ•˜๋Š” ์™ธ๋ถ€ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ํ›„ํฌ๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ถ”๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜ ๋ฐ ๊ตฌ์„ฑ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ง€์ •๋œ ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์œผ๋ฉฐ "git config core.fsmonitor true" ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • "git sparse-checkout" ๋ช…๋ น์—์„œ ๋ถ€๋ถ„ ๋ณต์ œ๋ฅผ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ์„ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ธ "-cone" ๋ชจ๋“œ์— ๋Œ€ํ•œ ๋Œ€์•ˆ ์ง€์›์ด ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ์„ ์–ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ตœ์ ํ™” ๋ถ€๋ถ„ ์ธ๋ฑ์Šค ์‚ฌ์šฉ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ".gitignore" ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ณ„ ํŒŒ์ผ์„ ๋‚˜์—ดํ•˜๊ธฐ ์œ„ํ•œ ๋ณต์ œ ์ž‘์—…์ž…๋‹ˆ๋‹ค.
  • ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋””์Šคํฌ์— ํ”Œ๋Ÿฌ์‹œํ•˜๋„๋ก fsync() ํ˜ธ์ถœ์„ ๊ตฌ์„ฑํ•˜๋Š” ์œ ์—ฐ์„ฑ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "๋ฐฐ์น˜" ๋™๊ธฐํ™” ์ „๋žต์— ๋Œ€ํ•œ ์ง€์›์ด "core.fsyncMethod" ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋‹จ์ผ fsync()๋กœ ์žฌ์„ค์ •๋˜๋Š” ์“ฐ๊ธฐ ์ €์žฅ ์บ์‹œ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ˆ„์ ํ•˜์—ฌ ๋งŽ์€ ์ˆ˜์˜ ๊ฐœ๋ณ„ ํŒŒ์ผ์„ ์“ธ ๋•Œ ์ž‘์—… ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ€๋ฅด๋‹ค. "git add" ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ 500๊ฐœ์˜ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•œ ํ…Œ์ŠคํŠธ๋Š” ์ƒˆ ๋ชจ๋“œ๊ฐ€ ํ™œ์„ฑํ™”๋˜์—ˆ์„ ๋•Œ 0.15์ดˆ ๋งŒ์— ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฉฐ, fsync() ํ˜ธ์ถœ์€ ํŒŒ์ผ๋‹น 1.88์ดˆ๊ฐ€ ์†Œ์š”๋˜์—ˆ์œผ๋ฉฐ, fsync๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ - 0.06์ดˆ๊ฐ€ ์†Œ์š”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • "git log" ๋ฐ "git rev-list"์™€ ๊ฐ™์€ ๋ถ„๊ธฐ ์ˆœํšŒ ๋ช…๋ น์—๋Š” ์ด์ œ "X"๋ณด๋‹ค ์˜ค๋ž˜๋œ ์ปค๋ฐ‹์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋Š” "-since-as-filter=X" ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. "-since" ์˜ต์…˜๊ณผ ๋‹ฌ๋ฆฌ ์ƒˆ ๋ช…๋ น์€ ์ง€์ •๋œ ์‹œ๊ฐ„๋ณด๋‹ค ์˜ค๋ž˜๋œ ์ฒซ ๋ฒˆ์งธ ์ปค๋ฐ‹ ์ดํ›„์—๋„ ๊ฒ€์ƒ‰์„ ์ค‘์ง€ํ•˜์ง€ ์•Š๋Š” ํ•„ํ„ฐ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.
  • "git ์›๊ฒฉ" ๋ช…๋ น์—์„œ "-v" ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•˜๋ฉด ์ €์žฅ์†Œ์˜ ๋ถ€๋ถ„ ๋ณต์ œ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • "warn", "die" ๋ฐ "allow" ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” "transfer.credentialsInUrl" ์„ค์ •์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. "remote." ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ง€์ •๋œ ๊ฒฝ์šฐ .url" ์ผ๋ฐ˜ ํ…์ŠคํŠธ ์ž๊ฒฉ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•˜์—ฌ "๊ฐ€์ ธ์˜ค๊ธฐ" ๋˜๋Š” "ํ‘ธ์‹œ" ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋ฉด "transfer.credentialsInUrl" ์„ค์ •์ด "die"๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  "warn"์œผ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด์„œ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ Perl์—์„œ C๋กœ ๋‹ค์‹œ ์ž‘์„ฑ๋œ "git add -i" ๋ช…๋ น์˜ ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ์˜ ์ƒˆ๋กœ์šด ๊ตฌํ˜„์ด ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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