Rust ์ง€์›์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋œ Git 2.55 ๋ฆด๋ฆฌ์Šค

๋ถ„์‚ฐ ์†Œ์Šค ์ œ์–ด ์‹œ์Šคํ…œ์ธ Git 2.55 ๋ฒ„์ „์ด ๋ฐœํ‘œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ Rust ๋นŒ๋“œ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํ•จ๋˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค. Linux fsmonitor ํ”„๋กœ์„ธ์Šค, ์ฆ๋ถ„ MIDX ์ธ๋ฑ์Šค๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๋Š” ์ƒˆ๋กœ์šด ์ „๋žต, ์ปค๋ฐ‹์„ ์ˆ˜์ •ํ•˜๋Š” "git history fixup" ๋ช…๋ น์–ด, ๊ฐ์ฒด ๊ฐ€์šฉ์„ฑ ๋น„ํŠธ๋งต ์ƒ์„ฑ ์ตœ์ ํ™”, ๋ณ‘๋ ฌ ํ›„ํฌ ์‹คํ–‰ ์ง€์›, ๊ทธ๋ฆฌ๊ณ  "git format-rev" ๋ช…๋ น์–ด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. Git์€ GPLv2+ ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

์ด์ „ ๋ฒ„์ „๊ณผ ๋น„๊ตํ•˜์—ฌ ์ƒˆ ๋ฒ„์ „์—๋Š” 100๋ช…์˜ ๊ฐœ๋ฐœ์ž(๊ทธ์ค‘ 33๋ช…์€ Git ๊ฐœ๋ฐœ์— ์ฒ˜์Œ ์ฐธ์—ฌํ•œ ๊ฐœ๋ฐœ์ž)์˜ ๋„์›€์œผ๋กœ ์ค€๋น„๋œ 505๊ฐœ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ์ƒˆ ๊ธฐ๋Šฅ(1, 2, 3):

  • Rust ์–ธ์–ด ๊ตฌ์„ฑ ์š”์†Œ ์ง€์›์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. rustc ์ปดํŒŒ์ผ๋Ÿฌ
    Rust๊ฐ€ ๋นŒ๋“œ ์ข…์†์„ฑ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Rust ์—†์ด ๋นŒ๋“œํ•˜๋ ค๋ฉด `make` ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ `NO_RUST=1` ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ `meson configure`๋ฅผ ์‹คํ–‰ํ•  ๋•Œ `-Drust=disabled` ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. Rust๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋นŒ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์€ Rust๊ฐ€ ํ•„์ˆ˜ ์ข…์†์„ฑ์œผ๋กœ ํฌํ•จ๋˜๋Š” Git 3.0๊นŒ์ง€ ์ง€์›๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. Rust๋Š” SHA-1๊ณผ SHA-256 ํ•ด์‹œ ๊ตฌ์„ฑ ๊ฐ„์˜ ์ด์‹์„ฑ์„ ์œ„ํ•œ ๋ ˆ์ด์–ด์™€ ๊ฐ€๋ณ€ ๊ธธ์ด ์ •์ˆ˜ ์ธ์ฝ”๋”ฉ ๋ฐ ๋””์ฝ”๋”ฉ๊ณผ ๊ฐ™์€ ์ผ๋ถ€ ๋‚ด๋ถ€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ํ–ฅํ›„ Git์˜ ๋” ์ค‘์š”ํ•œ ๋‚ด๋ถ€ ๊ธฐ๋Šฅ๋“ค์ด Rust๋กœ ์žฌ์ž‘์„ฑ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.
  • ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ์ˆ˜์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์‹คํ—˜์ ์ธ "git history" ๋ช…๋ น์–ด๊ฐ€ ์ปค๋ฐ‹์„ ์ˆ˜์ •ํ•˜๋Š” "git history fixup" ์ž‘์—…์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "fixup" ์ž‘์—…์„ ์‚ฌ์šฉํ•˜๋ฉด "git add"๋กœ ์ถ”๊ฐ€๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ด์ „ ์ปค๋ฐ‹์œผ๋กœ ์ด๋™ํ•˜๊ณ  ์ดํ›„์˜ ๋ชจ๋“  ์ปค๋ฐ‹์„ ์ž๋™์œผ๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” "git commit --fixup=" ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. "๊ทธ๋ฆฌ๊ณ  "git rebase --autosquash"๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ~ยป.
  • ํ”Œ๋žซํผ์šฉ Linux ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ inotify ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค์ธ fsmonitor๊ฐ€ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด "git status"์™€ ๊ฐ™์€ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ ์ „์ฒด ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•˜์ง€ ์•Š๊ณ ๋„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ "core.fsmonitor" ์„ค์ •์„ ํ†ตํ•ด ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • `git repack` ๋ช…๋ น์–ด์— `--write-midx=incremental` ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์€ ์ฆ๋ถ„ MIDX ์ธ๋ฑ์Šค(๋ฉ€ํ‹ฐํŒฉ ์ธ๋ฑ์Šค)์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ƒˆ๋กœ์šด ์ „๋žต์„ ๊ตฌํ˜„ํ•˜์—ฌ ์ „์ฒด ์ธ๋ฑ์Šค๋ฅผ ๋‹ค์‹œ ํŒจํ‚ค์ง•ํ•  ํ•„์š”์„ฑ์„ ์—†์• ์ค๋‹ˆ๋‹ค. ์ฆ๋ถ„ ๋ฉ€ํ‹ฐํŒฉ ์ธ๋ฑ์Šค๋Š” ํŒฉํŒŒ์ผ ์ „์ฒด์— ๊ฑธ์ณ ๊ฐ์ฒด์˜ ๋ถ„ํฌ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋‹จ์ผ ๋Œ€ํ˜• ์ธ๋ฑ์Šค ๋Œ€์‹  ๋ ˆ์ด์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ ˆ์ด์–ด๋Š” ํŠน์ • ๊ฐœ์ˆ˜์˜ ํŒฉํŒŒ์ผ์„ ํฌํ•จํ•˜๋ฉฐ ๋ณ„๋„์˜ ๋น„ํŠธ๋งต ํŒŒ์ผ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ๊ธฐ์กด ๋ ˆ์ด์–ด๋ฅผ ์žฌ๊ตฌ์ถ•ํ•˜์ง€ ์•Š๊ณ ๋„ ์ƒˆ ํŒฉํŒŒ์ผ์˜ ๊ฐ์ฒด ์ •๋ณด๋ฅผ ์ธ๋ฑ์Šค์— ์ถ”๊ฐ€ํ•˜๊ณ  ์ƒˆ ๋ ˆ์ด์–ด๋ฅผ ์ธ๋ฑ์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    `git repack --write-midx=incremental` ๋ช…๋ น์–ด๋Š” ์ตœ๊ทผ ์ƒ์„ฑ๋œ ํŒฉํŒŒ์ผ์„ ํฌํ•จํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ ˆ์ด์–ด๋ฅผ ์ฆ๋ถ„ MIDX ์ธ๋ฑ์Šค์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋ฅผ `--geometric` ์ €์žฅ์†Œ ํŒจํ‚น ๋ชจ๋“œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ํŒฉํŒŒ์ผ์˜ ์ƒˆ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜์˜ ๋” ํฐ ํŒฉํŒŒ์ผ๋กœ ๊ฒฐํ•ฉํ•˜๊ณ , ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ฆ๋ถ„ MIDX ์ธ๋ฑ์Šค์˜ ์ธ์ ‘ํ•œ ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด๋ฅผ ํŒจํ‚นํ•˜๊ณ  ๋ณ‘ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ „๋žต์„ ํ†ตํ•ด `git repack`์€ ์ƒ์œ„ ๋ ˆ์ด์–ด๋งŒ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๊ณ  ์ด์ „์˜ ๋” ํฐ ๋ ˆ์ด์–ด๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ „์ฒด ๋ ˆ์ด์–ด ์ˆ˜๋ฅผ ์ „์ฒด ๊ฐ์ฒด ์ˆ˜์˜ ๋กœ๊ทธ์— ๋น„๋ก€ํ•˜๋„๋ก ์œ ์ง€ํ•จ์œผ๋กœ์จ ๋ ˆ์ด์–ด ์ฒด์ธ์˜ ๋ฌด๋ถ„๋ณ„ํ•œ ์ฆ๊ฐ€๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐ์ฒด ๊ฐ€์šฉ์„ฑ ๋น„ํŠธ๋งต ์ƒ์„ฑ ๊ณผ์ •์ด ์ƒˆ๋กœ์šด ๊ฐ์ฒด ํŠธ๋ฆฌ ์ˆœํšŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ํฌ๊ฒŒ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ถˆํ•„์š”ํ•œ ์žฌ๊ท€ ํ˜ธ์ถœ์„ ์ œ๊ฑฐํ•˜๊ณ , ๊ฐ์ฒด ์œ„์น˜ ์บ์‹ฑ์„ ์—†์• ๋ฉฐ, XOR ์—ฐ์‚ฐ ์ „ ๋น„ํŠธ๋งต ์ •๋ ฌ์„ ์ƒ๋žตํ•˜๊ณ , ์œ ์‚ฌ ๋ณ‘ํ•ฉ ๋น„ํŠธ๋งต ์ƒ์„ฑ ์ฝ”๋“œ๋ฅผ ์žฌ์ž‘์—…ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ €์žฅ์†Œ์—์„œ ์ด๋Ÿฌํ•œ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ๋น„ํŠธ๋งต ์ƒ์„ฑ ์‹œ๊ฐ„์ด 612์ดˆ์—์„œ 294์ดˆ๋กœ ๋‹จ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ œ ์„ค์ • ํŒŒ์ผ์—์„œ ๋…๋ฆฝ์ ์ธ ํ›…์„ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปค๋ฐ‹ ๋…ธํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ธ๋ฑ์Šค ๋ฐ ์ž‘์—… ํŠธ๋ฆฌ๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ํ›…์ฒ˜๋Ÿผ ๊ณต์œ  ์ƒํƒœ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฑฐ๋‚˜ ์ด๋ฅผ ๊ณ ๋ คํ•˜๋Š” ํ›…์€ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฆฐํ„ฐ ๊ฒ€์‚ฌ ๋ฐ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ›…์€ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ‘๋ ฌ ์‹คํ–‰์„ ํ—ˆ์šฉํ•˜๋Š” ํ›…์€ "hook.hook_name.parallel = true" ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—… ์ˆ˜๋Š” hook.jobs ์„ค์ •์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. .jobs ๋˜๋Š” "-j" ๋ช…๋ น์ค„ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
  • ์ด์ œ "git pack-objects --path-walk" ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "blob:none", "blob:limit="์™€ ๊ฐ™์€ ํ•„ํ„ฐ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ", "tree:0", "object:type= ยป, ยซ๋“œ๋ฌธ: " ๋ฐ "๊ฒฐํ•ฉ:". ํ…Œ์ŠคํŠธ์—์„œ "--path-walk"๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋ธ”๋กญ์„ ์ œ๊ฑฐํ•˜๋ฉด ์ƒ์„ฑ๋œ ํŒฉ ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ 16% ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ปค๋ฐ‹ ๋ชฉ๋ก์ด๋‚˜ ์ž„์˜์˜ ํ…์ŠคํŠธ์— ์–ธ๊ธ‰๋œ ์ˆ˜์ • ๋ฒ„์ „ ๋ฐ ๊ฐ์ฒด ์ด๋ฆ„์˜ ํ˜•์‹์„ ์ง€์ •ํ•˜๋Š” "git format-rev" ๋ช…๋ น์–ด๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ์ปค๋ฐ‹ ๋ฉ”๋ชจ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ›…์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).

    git last-modified | git format-rev --stdin-mode=text --format=%an

    Junio โ€‹โ€‹โ€‹โ€‹C Hamano ๋‚ด์žฅ/commit.c

  • ์ •๋ณด ๋ฉ”์‹œ์ง€ ๋ฐ ์˜ค๋ฅ˜ ํ…์ŠคํŠธ ์ „์†ก ์‹œ ๋Œ€๋ถ€๋ถ„์˜ ํ„ฐ๋ฏธ๋„ ์ œ์–ด ์‹œํ€€์Šค์— ๋Œ€ํ•œ ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ์•…์„ฑ ํ”„๋กœ๊ทธ๋žจ์— ์ ‘๊ทผํ•  ๋•Œ ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ ์ด๋Ÿฌํ•œ ์ด์Šค์ผ€์ดํ”„ ์‹œํ€€์Šค๋Š” ์ปค์„œ ์ด๋™ ๋ฐ ํ…์ŠคํŠธ ์ง€์šฐ๊ธฐ์™€ ๊ฐ™์€ ์ถœ๋ ฅ์„ ์ˆจ๊ธฐ๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์š”์†Œ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฅผ ์œ„ํ•œ ์ด์Šค์ผ€์ดํ”„ ์‹œํ€€์Šค ์ง€์›์€ ์œ ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ œ `git checkout -m` ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ถฉ๋Œํ•˜๋Š” ๋กœ์ปฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ž๋™์œผ๋กœ stash ์˜์—ญ์— ์ €์žฅ๋˜๋ฏ€๋กœ ์ฆ‰์‹œ ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ด์ œ "git push" ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹จ์ผ ๋ช…๋ น์œผ๋กœ ์—ฌ๋Ÿฌ ์™ธ๋ถ€ Git ์„œ๋ฒ„์— ๋ธŒ๋žœ์น˜๋ฅผ ํ‘ธ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋ฅผ ๋ฉ”์ธ ์„œ๋ฒ„๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฏธ๋Ÿฌ ์„œ๋ฒ„์—๋„ ํ‘ธ์‹œํ•˜๋ ค๋ฉด "publish" ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ "github", "gitlab" ๋ฐ "mirror":

    git config remotes.publish "github gitlab mirror"
    git push publish main

  • ์ด์ œ "git log --graph" ๋ช…๋ น์–ด์— "--graph-lane-limit=" ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ยป ๋ธŒ๋žœ์น˜๋ฅผ ์‹œ๊ฐํ™”ํ•  ๋•Œ ์„ธ๋กœ ๋ง‰๋Œ€์˜ ๊ฐœ์ˆ˜๋ฅผ ์ œํ•œํ•˜์—ฌ ๋ธŒ๋žœ์น˜ ์ˆ˜๊ฐ€ ๋งŽ์€ ์ €์žฅ์†Œ์—์„œ ์ปค๋ฐ‹ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•  ๊ณต๊ฐ„์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

    ...
    * | | | | 619931f561 'dl/posix-unused-warning-clang' ๋ธŒ๋žœ์น˜ ๋ณ‘ํ•ฉ
    |\ \ \ \ \
    | * | | | ~ cf48887610 compat/posix.h: GIT_GNUC_PREREQ() ๋น„๊ต ๊ฐ„์†Œํ™”
    | * | | | ~ ffd45926dc compat/posix.h: GIT_GNUC_PREREQ() ๋ฐ UNUSED ์ •๋ฆฌ
    |\ \ \ \ \~
    | * | | | ~3f5203eeb4 ls-files: lstat ์ „์— pathspec ํ•„ํ„ฐ๋ง

  • ์ด์ œ "git log" ๋ฐ "git rev-list" ๋ช…๋ น์— "--max-count-oldest=" ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ๋ฒ”์œ„ ๋‚ด์—์„œ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ N๊ฐœ์˜ ์ปค๋ฐ‹์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

DDoS ๋ณดํ˜ธ, VPS VDS ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ์œ„ํ•œ ์•ˆ์ •์ ์ธ ํ˜ธ์ŠคํŒ… ๊ตฌ์ž… ๐Ÿ”ฅ DDoS ๊ณต๊ฒฉ ๋ฐฉ์ง€ ๊ธฐ๋Šฅ์ด ํƒ‘์žฌ๋œ ์•ˆ์ •์ ์ธ ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…, VPS ๋ฐ VDS ์„œ๋ฒ„๋ฅผ ๊ตฌ๋งคํ•˜์„ธ์š” | ProHoster