๋ถ์ฐ ์์ค ์ ์ด ์์คํ ์ธ 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
