๋ถ์ฐ ์์ค ์ฝ๋ ๊ด๋ฆฌ ์์คํ ์ธ Git 2.56์ด ์ถ์๋์์ต๋๋ค. Git์ GPLv2+ ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค. ์ด์ ๋ฒ์ ๊ณผ ๋น๊ตํ์ฌ ์ด๋ฒ ์ ๋ฒ์ ์๋ 104๋ช ์ ๊ฐ๋ฐ์๊ฐ ์์ฑํ 748๊ฐ์ ๋ณ๊ฒฝ ์ฌํญ์ด ํฌํจ๋์ด ์์ผ๋ฉฐ, ๊ทธ์ค 39๋ช ์ Git ๊ฐ๋ฐ์ ์ฒ์ ์ฐธ์ฌํ ๊ฐ๋ฐ์์ ๋๋ค. ์ฃผ์ ์ ๊ธฐ๋ฅ(1, 2, 3):
- ๋ธ๋์น ๋ณํฉ ์ ์ถฉ๋์ ํด๊ฒฐํ๊ธฐ ์ํ "git add --resolved" ๋ชจ๋๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. ์ด ๋ชจ๋๋ ํ์ผ์์ ์ถฉ๋ ๋ง์ปค๋ฅผ ํ์ธํ๊ณ , ํ๋ ์ด์์ ํ์ผ์์ ๋ง์ปค๊ฐ ๊ฐ์ง๋๋ฉด ์ค๋ฅ๋ฅผ ๋ฐํํ๊ณ , ํ์ผ์ ์ธ๋ฑ์ฑํ์ง ์์ผ๋ฉฐ, ์์ ์ด ํ์ํ ํ์ผ ๋ชฉ๋ก์ ํ์ํฉ๋๋ค. "git add --update" ๋ช ๋ น๊ณผ ๋ฌ๋ฆฌ, ์ด ์๋ก์ด ๋ชจ๋๋ ์ถฉ๋ ์ํ์ ํ์ผ๋ง ์ฒ๋ฆฌํ๊ณ ์ถฉ๋๊ณผ ๊ด๋ จ ์๋ ๋ณ๊ฒฝ๋ ํ์ผ์ ๋ฌด์ํฉ๋๋ค. ๋ฐ๋ผ์ ์์ ๋๋ ํฐ๋ฆฌ์ ๋ฏธ์๋ฃ๋ ํธ์ง ๋ด์ฉ์ด ๋จ์ ์๋๋ผ๋ ๋ธ๋์น ๋ณํฉ์ ์์ ํ๊ฒ ์๋ฃํ ์ ์์ต๋๋ค("git add --update" ๋ช ๋ น์ ์์ ๋๋ ํฐ๋ฆฌ์์ ์ด์ ์ ์ถ์ ๋ ๋ชจ๋ ๋ณ๊ฒฝ ํ์ผ์ ์ธ๋ฑ์ค์ ์ถ๊ฐํฉ๋๋ค).
- ๋๊ท๋ชจ ์ ์ฅ์ ์์ ์๋๊ฐ ํฌ๊ฒ ํฅ์๋์์ต๋๋ค. ๋ธ๋์น ๋ณํฉ ๋ฐ ์ปค๋ฐ ๋น๊ต ์ ๊ฐ์ฅ ์ต๊ทผ์ ๊ณตํต ์ปค๋ฐ์ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ด ์ต์ ํ๋์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด์ ์ด ํ๋ก์ธ์ค๋ ํน์ ๋ธ๋์น์๋ง ์ํ๋ ์ปค๋ฐ์ ๊ณ ๋ คํ์ฌ ๊ฐ๋ฅํ ๋ชจ๋ ๊ณตํต ์กฐ์์ ์ฐพ์ ํ ์ฆ์ ์ค์บ์ ์ค์งํ๊ณ ๋ณ๊ฒฝ ์ด๋ ฅ์ ์ถ๊ฐ๋ก ํ์ํ๋ ๋ฐ ์๊ฐ์ ๋ญ๋นํ์ง ์์ต๋๋ค. ํ ์คํธํ ํ ์ ์ฅ์์์๋ ๊ฒ์ ์๋๊ฐ ํ๊ท 20๋ฐฐ ํฅ์๋์๊ณ , ๋ค๋ฅธ ์ ์ฅ์์์๋ ์ต๋ 70๋ฐฐ๊น์ง ํฅ์๋์์ต๋๋ค. ์ด ๊ฒฐ๊ณผ๋ ์ปค๋์ด ์ค์น๋ ์ ์ฅ์์์ "git merge-base --all v4.8 v4.9" ๋ช ๋ น์ ์คํํ์ ๋ ํ์ธ๋์์ต๋๋ค. Linux ํ์ ๋จ๊ณ ์๊ฐ 16๋ง 7์ฒ์์ 3์ฒ 8๋ฐฑ์ผ๋ก ๊ฐ์ํ์ต๋๋ค.
- "--path-walk" ์ฌํจํค์ง ๋ชจ๋๊ฐ ์๋ฒ ํ๊ฒฝ์ ๋ง๊ฒ ๊ฐ์ ๋์ด ๋๋ ํฐ๋ฆฌ ํธ๋ฆฌ์ ๊ฒฝ๋ก๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ์ฒด๋ฅผ ๊ทธ๋ฃนํํ์ฌ ๋์ฑ ์์ถ๋ ํฉ ํ์ผ์ ์์ฑํ ์ ์๊ฒ ๋์์ต๋๋ค(์: Fluent UI ์ ์ฅ์์ ๊ฒฝ์ฐ "--path-walk"๋ฅผ ์ฌ์ฉํ๋ฉด ํฉ ํ์ผ ํฌ๊ธฐ๊ฐ 558MB์์ 164MB๋ก ์ค์ด๋ญ๋๋ค). ์ ๋ฒ์ ์ Git ํธ์คํ ์๋น์ค์์ ์์ ์๋๋ฅผ ๋์ด๊ณ ํฌํฌ๋ฅผ ๋ฉ์ธ ์ ์ฅ์์ ๊ฒฉ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋๋ฌ ๊ฐ๋ฅ์ฑ ๋นํธ๋งต ๋ฐ ๋ธํ ์์ผ๋๋์ ํจ๊ป "--path-walk" ๋ชจ๋๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
- ๋๊ท๋ชจ ์ ์ฅ์์์ ๋ถํ์ํ ๊ณ์ฐ์ ์ ๋ฐํ๋ ๋ณ๋ชฉ ํ์์ด ์ ๊ฑฐ๋์์ต๋๋ค. ๋ฆฌํํ ์ด๋ธ์ ๊ธฐ๋กํ ๋ ๋ถํ์ํ ํ์ผ ์ํ ๊ฒ์ฌ๊ฐ ์ ๊ฑฐ๋์๊ณ , ์ ํฉํ์ผ์ ์ฝ์ ํ ๋๋ง๋ค ๋ชฉ๋ก์ ๋ค์ ์ค์บํ๋ ์์ ์ด ์์ด์ก์ต๋๋ค. ๋์ ๋ ๋๋ ์ญ์ ๋ ์ฝ๋๊ฐ ์๋ ๋ฆฌํํ ์ด๋ธ ์์ ์๋๊ฐ ํฅ์๋์์ผ๋ฉฐ, ํ์ผ ๊ฒฝ๋ก ์ ํ์ ์ง์ ํ ๋ git diff ์ฑ๋ฅ์ด ์ต์ ํ๋์์ต๋๋ค. ์ด๋ฌํ ์ต์ ํ๋ฅผ ํตํด ๋๋ ์ญ์ ๊ฐ ๋ฐ์ํ๋ ๋ฆฌํํ ์ด๋ธ ์์ ์๋๊ฐ 65๋ฐฐ(13์ด์์ 0.2์ด๋ก) ํฅ์๋์๊ณ , ์ธ๋ฑ์ค์ 500000๋ง ๊ฐ์ ํญ๋ชฉ์ด ์๋ Chromium ์ ์ฅ์์์ ๋ฌธ์ ๊ฐ ๋์๋ git diff ๋ช ๋ น์ด ์ด์ 8๋ถ์์ 0.07์ด๋ก ๋จ์ถ๋์์ต๋๋ค.
- ๋ณ๊ฒฝ ์ด๋ ฅ์ ๋ฎ์ด์ธ ์ ์๋ ์คํ์ ์ธ "git history" ๋ช ๋ น์ด๊ฐ ์ ๋ฐ์ดํธ๋์ด ์ ํํ ์ปค๋ฐ์ ์ ๊ฑฐํ๊ณ ํ์ ์ปค๋ฐ์ ์์ ์ปค๋ฐ์ ์๋์ผ๋ก ์ฐ๊ฒฐํ๋ "git history drop" ์์ ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- `git branch --delete-merged 'origin/*' 'topic-*'` ๋ช ๋ น์ด๊ฐ ์ถ๊ฐ๋์ด, ์ด๋ฏธ ์ธ๋ถ ์ ์ฅ์์ ์ปค๋ฐ๋ ๋ก์ปฌ ๋ธ๋์น ๊ทธ๋ฃน์ ์์ ํ๊ฒ ์ญ์ ํ ์ ์์ต๋๋ค. ์์ผ๋์นด๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ธ๋์น์ ์ ์ฅ์๋ฅผ ํํฐ๋งํ ์ ์์ผ๋ฉฐ, `--dry-run` ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ค์ ๋ก ์ญ์ ์์ ์ ์ํํ์ง ์๊ณ ๋ ์ญ์ ํ๋ณด๋ฅผ ๋ถ์ํ ์ ์์ต๋๋ค.
- ์ฐธ์กฐ๋ฅผ ์์ฑ, ์ญ์ , ์ด๋ฆ ๋ณ๊ฒฝ ๋ฐ ์ ๋ฐ์ดํธํ๋ ์ ์์ค ์์ ์ ํ๋๋ก ๋ฌถ์ "git refs create|update|delete|rename" ๋ช ๋ น์ด๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- ์ด์ "git bisect run" ๋ช ๋ น์ "--reset-when-found=[ ์ต์ "์ด ์ถ๊ฐ๋์์ต๋๋ค. ]"๋ ๊ฒ์์ด ์์๋๊ธฐ ์ ์ํ๋ก ์ ์ฅ์๋ฅผ ์๋์ผ๋ก ๋๋๋ฆฌ๊ฑฐ๋, "git bisect reset" ๋ช ๋ น์ ๋ณ๋๋ก ์คํํ ํ์ ์์ด ๋ฌธ์ ๊ฐ ์๋ ์ปค๋ฐ์ ํ์ฑ ์ํ๋ก ์ ์งํฉ๋๋ค.
- ์ด์ 'git replay' ๋ช ๋ น์ด์ '--linearize' ํ๋๊ทธ๊ฐ ์ถ๊ฐ๋์ด ์์ ํธ๋ฆฌ์ ์ ๊ทผํ์ง ์๊ณ ๋ 'git rebase --no-rebase-merges'์ ์ ์ฌํ ํ๋ฉด ๋ณํฉ ํ ํด๋ก์ง๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ด์ "git log --follow" ๋ช ๋ น์ด๋ ์๋ธ๋ธ๋์น ๋ณํฉ๊ณผ ๊ฐ์ด ๋น์ ํ์ ์ธ ์ปค๋ฐ ํ์คํ ๋ฆฌ์์ ํ์ผ ์ด๋ฆ ๋ณ๊ฒฝ์ ์ถ์ ํฉ๋๋ค. ํ์ผ ๊ฒฝ๋ก๋ ์ด์ ๊ฐ ์์ ์ปค๋ฐ์ ๋ํด ๋ณ๋๋ก ๊ธฐ๋ก๋๋ฏ๋ก ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ฅผ ํ์ํ๋ ์์์ ๊ด๊ณ์์ด ๊ฒฐ๊ณผ๊ฐ ํ์๋ฉ๋๋ค.
- ํ์ฌ ์ธ๋ฑ์ค์์ ์ฌ์ฉ๋์ง ์๋ ์ธ๋ถ ์ ์ฅ์์์ ์จ๋๋งจ๋๋ก ๋ค์ด๋ก๋๋ ๋์ฉ๋ ๋ธ๋กญ์ ์ ๊ฑฐํ๋ "git repack -a --filter=blob:limit=1m --drop-filtered" ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ์ต๋๋ค. ์ด๋ฌํ ๊ฐ์ฒด๋ ํฅํ ์ ๊ทผ ์ ์๋์ผ๋ก ๋ค์ ๋ค์ด๋ก๋๋ฉ๋๋ค.
- ์ด์ ์ฌ๋ฌ ๊ฐ์ ๋ ๋ฆฝ์ ์ธ ๋ฃจํธ๋ฅผ ๊ฐ์ง ๊ทธ๋ํ์ ๋ํด "git log --graph" ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๊ด๋ จ ์๋ ์ปค๋ฐ์ ๋ช ํํ๊ฒ ๊ตฌ๋ถํ๊ธฐ ์ํด ๋ค์ฌ์ฐ๊ธฐ๊ฐ ์ถ๊ฐ๋ฉ๋๋ค.
- "git push origin main" ๋์ "git push origin/main"์ ์ง์ ํ๊ฑฐ๋ "git branch --set-upstream-to=origin/main" ๋์ "git branch --set-upstream-to origin main"์ ์ง์ ํ๋ ๊ฒ๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ์คํ๊ฐ ์ด์ ๊ฐ์ง๋์ด ์ฌ๋ฐ๋ฅธ ๋ณํ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ํํธ๊ฐ ํ์๋ฉ๋๋ค.
์ถ์ฒ : opennet.ru
