
๋์ ๋ถ์ฐ ์์ค ์ฝ๋ ๊ด๋ฆฌ ์์คํ ๋ฆด๋ฆฌ์ค ํ๋ด 2.55์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก๋ Rust๋ฅผ ์ฌ์ฉํ ๊ธฐ๋ณธ ๋น๋ ํ์ฑํ, ๊ตฌํ ๋ฑ์ด ์์ต๋๋ค. Linux fsmonitor ํ๋ก์ธ์ค, ์ฆ๋ถ MIDX ์ธ๋ฑ์ค ์ฌ๊ตฌ์ฑ์ ์ํ ์๋ก์ด ์ ๋ต, ์ปค๋ฐ ์์ ์ ์ํ git history fixup ๋ช ๋ น์ด, ๊ฐ์ฒด ๊ฐ์ฉ์ฑ ๋นํธ๋งต ์์ฑ ์ต์ ํ, ํ ์ ๋ณ๋ ฌ ์คํ ์ง์, git format-rev ๋ช ๋ น์ด. Git ์ฝ๋ ๋ฐฐํฌ์ GPLv2+์ ๋ฐ๋ผ ๋ผ์ด์ผ์ค๊ฐ ๋ถ์ฌ๋์์ต๋๋ค.
์ด๋ฒ ์ ๋ฒ์ ์๋ ์ด์ ๋ฆด๋ฆฌ์ค์ ๋น๊ตํ์ฌ 100๋ช ์ ๊ฐ๋ฐ์๊ฐ ์ฐธ์ฌํ์ฌ ์ค๋นํ 505๊ฐ์ ๋ณ๊ฒฝ ์ฌํญ์ด ํฌํจ๋์ด ์์ผ๋ฉฐ, ๊ทธ์ค 33๋ช ์ Git ๊ฐ๋ฐ์ ์ฒ์ ์ฐธ์ฌํ ๊ฐ๋ฐ์์ ๋๋ค.
์ฃผ์ ํ์ ์ฌํญ (๊นํ๋ธ ๋ธ๋ก๊ทธ, gitlab.com/blog, gitlab.com/git-scm):
- ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํจ ๋ Rust ์ปดํฌ๋ํธ ์ง์. rustc ์ปดํ์ผ๋ฌ. ์ถ๊ฐ ๋น๋ ์ข ์์ฑ์ ํฌํจ๋ฉ๋๋ค. Rust ์์ด ๋น๋ํ๋ ค๋ฉด make ์ ํธ๋ฆฌํฐ๋ฅผ ์คํํ ๋ NO_RUST=1 ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ meson configure๋ฅผ ์คํํ ๋ -Drust=disabled ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. Rust๋ฅผ ์ฌ์ฉํ ๋น๋๋ฅผ ๋นํ์ฑํํ๋ ๊ธฐ๋ฅ์ Git 3.0๊น์ง ์ง์๋๋ฉฐ, Git 3.0์์๋ Rust๊ฐ ์์ ํ ์ ๊ฑฐ๋ ์์ ์ ๋๋ค. ํฌํจ๋จ ํ์ ์ข ์์ฑ ์ค์๋ Rust ์ธ์ด๊ฐ ํฌํจ๋์ด ์๋๋ฐ, ์ด ์ธ์ด๋ SHA-1๊ณผ SHA-256 ํด์ ๊ตฌ์ฑ ๊ฐ์ ์ด์์ฑ์ ์ํ ๋ ์ด์ด์ ๊ฐ๋ณ ๊ธธ์ด ์ ์ ์ธ์ฝ๋ฉ ๋ฐ ๋์ฝ๋ฉ๊ณผ ๊ฐ์ ์ผ๋ถ ๋ด๋ถ ํจ์๋ฅผ ๊ตฌํํฉ๋๋ค. ํฅํ์๋ Git์ ๋ ์ค์ํ ๋ด๋ถ ๊ตฌ์ฑ ์์๋ค์ด Rust๋ก ์ฌ์์ฑ๋ ์์ ์ ๋๋ค.
- ์คํํ์๊ฒgit ๊ธฐ๋ก""git history fixup" ์์ ์ด ์ปค๋ฐ ๊ธฐ๋ก ์ฌ์์ฑ ๋๊ตฌ์ ์ถ๊ฐ๋์์ต๋๋ค. ์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ปค๋ฐ ๊ธฐ๋ก์ ์ฌ์์ฑํ ์ ์์ต๋๋ค. fixup ์์ ์ ํตํด `git add` ๋ช ๋ น์ผ๋ก ์ถ๊ฐ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ด์ ์ปค๋ฐ์ผ๋ก ์ด๋ํ๊ณ ์ดํ์ ๋ชจ๋ ์ปค๋ฐ์ ์๋์ผ๋ก ์ฌ์์ฑํ ์ ์์ผ๋ฉฐ, ์ด๋ `git commit --fixup=` ๋ช ๋ น๊ณผ ์ ์ฌํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ git rebase --autosquash๋ฅผ ์คํํฉ๋๋ค. ~.
- ํ๋ซํผ์ฉ Linux ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค๊ฐ ๊ตฌํ๋์์ต๋๋ค. fsmonitorํ์ผ ์์คํ ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํ๋ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํฉ๋๋ค. inotify ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด `git status`์ ๊ฐ์ ๋ช ๋ น์ ์คํํ ๋ ์ ์ฒด ์์ ๋๋ ํ ๋ฆฌ๋ฅผ ํ์ํ์ง ์๊ณ ๋ ์คํํ ์ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ `git install` ๋ช ๋ น์ด๋ฅผ ํตํด ํ์ฑํํ ์ ์์ต๋๋ค.์ฝ์ด.fs๋ชจ๋ํฐ".
- `git repack` ๋ช ๋ น์ด์ ์๋ก์ด `--write-midx=incremental` ์ต์ ์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด ์ต์ ์ ์ฆ๋ถ MIDX ์ธ๋ฑ์ค(๋ฉํฐํฉ ์ธ๋ฑ์ค)์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํ๋ ์๋ก์ด ์ ๋ต์ ๊ตฌํํ์ฌ ์ ์ฒด ์ธ๋ฑ์ค๋ฅผ ๋ค์ ํจํนํ ํ์์ฑ์ ์์ ์ค๋๋ค. ์ฆ๋ถ ๋ฉํฐํฉ ์ธ๋ฑ์ค๋ ํฉํ์ผ ์ ์ฒด์ ๊ฑธ์ณ ๊ฐ์ฒด์ ๋ถํฌ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ๋จ์ผ ๋ํ ์ธ๋ฑ์ค ๋์ ๋ ์ด์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ฐ ๋ ์ด์ด๋ ํน์ ๊ฐ์์ ํฉํ์ผ์ ํฌํจํ๋ฉฐ ๋ณ๋์ ๋นํธ๋งต ํ์ผ์ ์ ์ฅ๋ฉ๋๋ค. ์ด ๊ตฌ์กฐ๋ฅผ ํตํด ๊ธฐ์กด ๋ ์ด์ด๋ฅผ ์ฌ๊ตฌ์ถํ์ง ์๊ณ ๋ ์ ํฉํ์ผ์ ๊ฐ์ฒด ์ ๋ณด๋ฅผ ์ธ๋ฑ์ค์ ์ ๋ ์ด์ด๋ฅผ ์ถ๊ฐํ์ฌ ์ธ๋ฑ์ค์ ๋ฐ์ํ ์ ์์ต๋๋ค. `git repack --write-midx=incremental` ๋ช ๋ น์ด๋ ์ต๊ทผ์ ์์ฑ๋ ํฉํ์ผ์ ํฌํจํ๋ ์ ๋ ์ด์ด๋ฅผ ์ฆ๋ถ MIDX ์ธ๋ฑ์ค์ ์ถ๊ฐํฉ๋๋ค. ์ด ์๋ก์ด ๋ช ๋ น์ด๋ฅผ `--geometric repository` ํจํน ๋ชจ๋์ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ํฉํ์ผ์ ์ ๊ฐ์ฒด๋ฅผ ํ๋์ ๋ ํฐ ํฉํ์ผ๋ก ๊ฒฐํฉํ๊ณ , ํ์ํ ๊ฒฝ์ฐ ์ฆ๋ถ MIDX ์ธ๋ฑ์ค์ ์ธ์ ํ ์ฌ๋ฌ ๋ ์ด์ด๋ฅผ ํจํนํ๊ณ ๋ณํฉํ ์ ์์ต๋๋ค. ์ด ์ ๋ต์ ํตํด git repack์ ์ต์์ ๋ ์ด์ด๋ง ๋ค์ ์์ฑํ๊ณ ์ด์ ์ ๋ ํฐ ๋ ์ด์ด๋ ๊ทธ๋๋ก ์ ์งํ ์ ์์ผ๋ฉฐ, ์ ์ฒด ๋ ์ด์ด ์๋ฅผ ์ ์ฒด ๊ฐ์ฒด ์์ ๋ก๊ทธ์ ๋น๋กํ๋๋ก ์ ์งํจ์ผ๋ก์จ ๋ ์ด์ด ์ฒด์ธ์ ๋ฌด๋ถ๋ณํ ์ฆ๊ฐ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
- ๊ฐ์ฒด ๊ฐ์ฉ์ฑ ๋นํธ๋งต ์์ฑ์ ๋ถํ์ํ ์ฌ๊ท, ๊ฐ์ฒด ์์น ์บ์ฑ, XOR ์ฐ์ฐ ์ ๋นํธ๋งต ์ ๋ ฌ, ๊ทธ๋ฆฌ๊ณ ์ ์ฌ ๋ณํฉ ๋นํธ๋งต ์์ฑ์ ์ํ ์ฝ๋ ์ฌ๊ตฌ์ฑ ๋ฑ์ ์ ๊ฑฐํ๋ ์๋ก์ด ๊ฐ์ฒด ํธ๋ฆฌ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ํตํด ํฌ๊ฒ ์ต์ ํ๋์์ต๋๋ค.์ ์ฌ ๋ณํฉํ ์คํธ ์ ์ฅ์์์ ์ต์ ํ๋ฅผ ํตํด ๋นํธ๋งต ์์ฑ ์๊ฐ์ด 612์ด์์ 294์ด๋ก ๋จ์ถ๋์์ต๋๋ค.
- ๋ ๋ฆฝ์ ์ธ ์์ ์ ๋ณ๋ ฌ๋ก ์คํํ ์ ์๋ ๊ธฐ๋ฅ์ด ๊ตฌํ๋์์ต๋๋ค. ํํฌ ์ค์ ํ์ผ์์ ๊ณต์ ์ํ์ ์ํฅ์ ๋ฏธ์น๊ฑฐ๋ ์ด๋ฅผ ๊ณ ๋ คํ๋ ํํฌ(์: ์ปค๋ฐ ๋ ธํธ ๋ณ๊ฒฝ, ์ธ๋ฑ์ค ๋ฐ ์์ ํธ๋ฆฌ ๊ฒ์ฌ)๋ ๋ณ๋ ฌ๋ก ์คํํ ์ ์์ต๋๋ค. ํ์ง๋ง ๋ฆฐํฐ ๊ฒ์ฌ ๋ฐ ๋จ์ ํ ์คํธ ํํฌ๋ ๋ณ๋ ฌ๋ก ์คํํ ์ ์์ต๋๋ค. ๋ณ๋ ฌ ์คํ์ ํ์ฉํ๋ ํํฌ๋ `hook.hook_name.parallel = true` ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑํฉ๋๋ค. ๋์์ ์คํํ ์ ์๋ ์์ ์๋ `hook.jobs` ๋งค๊ฐ๋ณ์์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค. .jobs ๋๋ -j ๋ช ๋ น์ค ์ต์ .
- ์ด์ `git pack-objects --path-walk` ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ `blob:none`, `blob:limit=`์ ๊ฐ์ ํํฐ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. , ํธ๋ฆฌ:0, ๊ฐ์ฒด:์ ํ= , ๋๋ฌธ๋๋ฌธ: ๊ทธ๋ฆฌ๊ณ ๊ฒฐํฉํฉ๋๋ค. ํ ์คํธ์์ --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 ์๋ฒ์ ๋ธ๋์น๋ฅผ ํธ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฉ์ธ ๋ธ๋์น๋ฅผ ๊ธฐ๋ณธ ์๋ฒ๋ฟ๋ง ์๋๋ผ ๋ฏธ๋ฌ ์๋ฒ์๋ ํธ์ํ๋ ค๋ฉด GitHub, GitLab ๋ฐ ๋ฏธ๋ฌ ์๋ฒ๋ก ๊ตฌ์ฑ๋ ๊ฒ์ ๊ทธ๋ฃน์ ๋ง๋ค ์ ์์ต๋๋ค.
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 ํํฐ๋ง
- `--max-count-oldest=` ์ต์ ์ด `git log` ๋ฐ `git rev-list` ๋ช ๋ น์ด์ ์ถ๊ฐ๋์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ํน์ ๋ฒ์ ๋ด์์ ๊ฐ์ฅ ์ค๋๋ N๊ฐ์ ์ปค๋ฐ์ ์ ํํ ์ ์์ต๋๋ค.
์ถ์ฒ : linux.org.ru
