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

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

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

  • "git log" ๋ฐ "git show" ๋ช…๋ น์—๋Š” ์ด์ œ "-remerge-diff" ์˜ต์…˜์ด ์žˆ์–ด ์ „์ฒด ๋ณ‘ํ•ฉ ๊ฒฐ๊ณผ์™€ "merge" ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•œ ํ›„ ์ปค๋ฐ‹์— ๋ฐ˜์˜๋œ ์‹ค์ œ ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ‘ํ•ฉ ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•œ ๊ฒฐ๊ณผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ "git show" ๋ช…๋ น์€ ๋‹ค์–‘ํ•œ ์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๋“ค์—ฌ์“ฐ๊ธฐํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜ ์Šคํฌ๋ฆฐ์ƒท์—์„œ ๋“ค์—ฌ์“ฐ๊ธฐ๊ฐ€ ์—†๋Š” "+/-" ์ค„์€ ์ฒซ ๋ฒˆ์งธ ๋ถ„๊ธฐ์˜ ์ฃผ์„์—์„œ sha1์˜ ์ด๋ฆ„์„ oid๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ์ถฉ๋Œ์˜ ๋งˆ์ง€๋ง‰ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ๊ณ  ๋“ค์—ฌ์“ฐ๊ธฐ๊ฐ€ ์žˆ๋Š” "+/-"๋Š” ์ดˆ๊ธฐ dwim_ref() ํ•จ์ˆ˜์˜ ๋‘ ๋ฒˆ์งธ ๋ถ„๊ธฐ์— ์ถ”๊ฐ€ ์ธ์ˆ˜์˜ ์ถœํ˜„์œผ๋กœ ์ธํ•œ ์ถฉ๋Œ ํ•ด๊ฒฐ.
    Git 2.36 ์†Œ์Šค ์ œ์–ด ์‹œ์Šคํ…œ ์ถœ์‹œ

    "--remerge-diff" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ƒ์œ„ ๋ธŒ๋žœ์น˜๋ณ„๋กœ ์ถฉ๋Œ ํ•ด๊ฒฐ ์ฐจ์ด๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ๋ณ‘ํ•ฉ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ํŒŒ์ผ๊ณผ ์ถฉ๋Œ์ด ํ•ด๊ฒฐ๋œ ํŒŒ์ผ์˜ ์ „์ฒด์ ์ธ ์ฐจ์ด์ ์„ ๋ณด์—ฌ์ค€๋‹ค.

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

  • fsync() ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ†ตํ•ด ๋””์Šคํฌ ์บ์‹œ ํ”Œ๋Ÿฌ์‹œ ๋™์ž‘์„ ๊ตฌ์„ฑํ•˜๋Š” ์œ ์—ฐ์„ฑ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ core.fsyncObjectFiles ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋‘ ๊ฐœ์˜ ๊ตฌ์„ฑ ๋ณ€์ˆ˜ core.fsync ๋ฐ core.fsyncMethod๋กœ ๋ถ„ํ• ๋˜์–ด ๊ฐœ์ฒด ํŒŒ์ผ(.git/objects)๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋งํฌ( .git /refs), reflog ๋ฐ ํŒฉ ํŒŒ์ผ.

    core.fsync ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์“ฐ๊ธฐ ์ž‘์—… ํ›„์— fsync๊ฐ€ ์ถ”๊ฐ€๋กœ ํ˜ธ์ถœ๋  ๋‚ด๋ถ€ Git ๊ตฌ์กฐ ๋ชฉ๋ก์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. core.fsyncMethod ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์บ์‹œ๋ฅผ ํ”Œ๋Ÿฌ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด fsync๋ฅผ ์„ ํƒํ•˜์—ฌ ๋™์ผํ•œ ์ด๋ฆ„์˜ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ writeout-only๋ฅผ ์ง€์ •ํ•˜์—ฌ ํŽ˜์ด์ง€ ์บ์‹œ ์“ฐ๊ธฐ ์ €์žฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ .git ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๊ณต์œ  ์„น์…˜์œผ๋กœ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์„ ์กฐ์ž‘ํ•˜๋Š” ์ทจ์•ฝ์ ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์ €์žฅ์†Œ ์†Œ์œ ์ž ํ™•์ธ์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ชจ๋“  git ๋ช…๋ น ์‹คํ–‰์€ ์ž์ฒด ".git" ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ๋งŒ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ €์žฅ์†Œ๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ์†ํ•œ ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. safe.directory ์„ค์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋™์ž‘์„ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Git ๊ฐœ์ฒด์˜ ์†Œ์Šค ์ฝ˜ํ…์ธ ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ "git cat-file" ๋ช…๋ น์€ ์ด์ „์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ "--batch" ๋ฐ "--batch-check"๋ฅผ ๋ณด์™„ํ•˜๋Š” "--batch-command" ์˜ต์…˜์œผ๋กœ ๋ณด์™„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. โ€ ๋ช…๋ น์€ ์ฝ˜ํ…์ธ ๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด โ€œcontent <๊ฐ์ฒด>โ€๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด โ€œinfo <object>โ€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถœ๋ ฅ ์œ ํ˜•์„ ์ ์‘์ ์œผ๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ถœ๋ ฅ ๋ฒ„ํผ๋ฅผ ํ”Œ๋Ÿฌ์‹œํ•˜๋Š” "flush" ๋ช…๋ น์ด ์ง€์›๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ์ฒด ํŠธ๋ฆฌ์˜ ๋‚ด์šฉ ๋ชฉ๋ก์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ "git ls-tree" ๋ช…๋ น์— "-name-only"์™€ ์œ ์‚ฌํ•˜๊ฒŒ "-oid-only"("-object-only") ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. โ€, ์Šคํฌ๋ฆฝํŠธ ํ˜ธ์ถœ์„ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ์ฒด ์‹๋ณ„์ž๋งŒ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ชจ๋“œ, ์œ ํ˜•, ์ด๋ฆ„ ๋ฐ ํฌ๊ธฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์ž์‹ ๋งŒ์˜ ์ถœ๋ ฅ ํ˜•์‹์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” "--format" ์˜ต์…˜๋„ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • "git bisect run" ๋ช…๋ น์€ ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ ์‹คํ–‰ ํŒŒ์ผ ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ์ด ๊ฒฝ์šฐ ์ฝ”๋“œ 126 ๋˜๋Š” 127๊ณผ ํ•จ๊ป˜ ์˜ค๋ฅ˜๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฐ์ง€๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค(์ด์ „์—๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  ๊ฐœ์ •ํŒ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค). .
  • ๋กœ์ปฌ ์‹œ์Šคํ…œ์— ์ด๋ฏธ ์žˆ๋Š” ์ฝ˜ํ…์ธ ์— ๋Œ€ํ•ด ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ์•Œ๋ฆฌ์ง€ ์•Š๊ณ  ๋ชจ๋“  ๊ฐœ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด "git fetch" ๋ช…๋ น์— --refetch ์˜ต์…˜์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋™์ž‘์€ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์ด ๋ถˆํ™•์‹คํ•  ๋•Œ ์˜ค๋ฅ˜๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ๋ฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • "git update-index", "git checkout-index", "git read-tree" ๋ฐ "git clean" ๋ช…๋ น์€ ์ด์ œ ๋ถ€๋ถ„ ์ธ๋ฑ์Šค(ํฌ์†Œ ์ธ๋ฑ์Šค)๋ฅผ ์ง€์›ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ๋ถ€๋ถ„ ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๊ณต๊ฐ„์„ ์ ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค. (์ŠคํŒŒ์Šค ์ฒดํฌ์•„์›ƒ).
  • "git clone โ€”filter=... โ€”recurse-submodules" ๋ช…๋ น์˜ ๋™์ž‘์ด ๋ณ€๊ฒฝ๋˜์–ด ์ด์ œ ํ•˜์œ„ ๋ชจ๋“ˆ์ด ๋ถ€๋ถ„์ ์œผ๋กœ ๋ณต์ œ๋ฉ๋‹ˆ๋‹ค(์ด์ „์—๋Š” ์ด๋Ÿฌํ•œ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ ํ•„ํ„ฐ๊ฐ€ ๊ธฐ๋ณธ ์ฝ˜ํ…์ธ ์—๋งŒ ์ ์šฉ๋˜์—ˆ๊ณ  ํ•˜์œ„ ๋ชจ๋“ˆ์€ ํ•„ํ„ฐ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ์™„์ „ํžˆ ๋ณต์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค).
  • "git Bundle" ๋ช…๋ น์—๋Š” ๋ถ€๋ถ„ ๋ณต์ œ ์ž‘์—…๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์ฝ˜ํ…์ธ ๋ฅผ ์„ ํƒ์ ์œผ๋กœ ๋ฐฐ์น˜ํ•˜๊ธฐ ์œ„ํ•œ ํ•„ํ„ฐ ์ง€์ •์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜์œ„ ๋ชจ๋“ˆ์„ ์žฌ๊ท€์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด "git Branch" ๋ช…๋ น์— "--recurse-submodules" ์˜ต์…˜์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Userdiff๋Š” Kotlin ์–ธ์–ด๋ฅผ ์œ„ํ•œ ์ƒˆ๋กœ์šด ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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