git worktree๋ Git์ ๊ธฐ๋ฅ ์ค ํ๋๋ก, ๋์ผํ Git ์ ์ฅ์์ ์ฐ๊ฒฐ๋ ๋ณ๋์ ์์
๋๋ ํ ๋ฆฌ์์ ์ฌ๋ฌ ๋ธ๋์น๋ฅผ ๋์์ ์ฒดํฌ์์ํ ์ ์๋๋ก ํด์ค๋๋ค.
์ git worktree๋ฅผ ์ฌ์ฉํ ๊น?
์๋ก์ด ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋๋ผ ๊ฐ์ ์ ์ฅ์์ ์ปค๋ฐ๋์ง ์์ ํ์ผ์ด 1000๊ฐ ์ด์ ์์ฌ ์๋๋ฐ ๊ฐ์๊ธฐ ๊ธด๊ธํ PR ๊ฒํ ์์ฒญ์ ๋ฐ์์ ๋นํฉ์ค๋ฌ์ ๋ ๊ฒฝํ ์์ผ์ ๊ฐ์? ์๋ง๋ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์คํ์(stash)ํ๊ณ ๋ค๋ฅธ ๋ธ๋์น๋ก ์ ํํด์ ๊ฒํ ํ์ ๊ฒ๋๋ค. ๋ ๋์ ์ํฉ์, ๋ค๋ฅธ ๊ธฐ๋ฅ์ ๋ํ PR์์ ๋ ์ด์ ๋ฏธ๋ฃฐ ์ ์๋ ๊ธด๊ธํ ์์ ์ฌํญ์ด ๋ฐ์ํด์ ๋ค์ ๋ธ๋์น๋ฅผ ๋ฐ๊ฟ์ผ ํ๋ ๊ฒฝ์ฐ์ผ ๊ฒ๋๋ค.
์์์ ์ค๋ช
ํ ์๋๋ฆฌ์ค๋ ์ ์ง ๊ด๋ฆฌํ๊ณ ๋ค๋ฃจ๊ธฐ๊ฐ ๋งค์ฐ ์ด๋ ต์ต๋๋ค. ๋ฉํฐํ์คํน์ ํผํ๊ณ ์ถ์ง๋ง, ๋๋ก๋ ๋ถ๊ฐํผํ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฉฐ, ์ด ๊ฒฝ์ฐ ์ฌ๋ฌ ๋ธ๋์น๋ฅผ ๋์์ ์์
ํด์ผ ํฉ๋๋ค. git worktree๋ฅผ ์ฌ์ฉํ๋ฉด ์ถ๊ฐ ๋ณต์ ๋ณธ์ ๋ง๋ค๊ฑฐ๋ ์์
๋ด์ฉ์ ์์ ์ ์ฅํ ํ์ ์์ด ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
์ Worktree๋ฅผ ๋ง๋ค๊ธฐ
๋ค์์ ์ฌ๋ฌ๋ถ์ ์ ์ฅ์์ธ website๊ฐ ํฌํจ๋ repo ๋๋ ํ ๋ฆฌ์
๋๋ค.
repo/
โโ website/
โโ index.html์ฐ๋ฆฌ๋ master ๋ธ๋์น์ ์ํฅ์ ์ฃผ์ง ์๊ณ ์๋ก์ด ๊ธฐ๋ฅ์ธ feature-x๋ฅผ ๊ฐ๋ฐํ๊ณ ์ถ์ต๋๋ค.
๋ช ๋ น
์ด๋ ๋ณ๋์ ๋๋ ํ ๋ฆฌ์ ๋ง์ดํธ๋๋ Git ์์
ํธ๋ฆฌ๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ ๋ฌ์ฑํ ์ ์์ผ๋ฉฐ, ์ด๋ ๊ฒ ํ๋ฉด master ๋ธ๋์น๋ ๋ณ๊ฒฝ๋์ง ์์ ์ํ๋ก ์ ์ง๋ฉ๋๋ค. git worktree add ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์์
ํธ๋ฆฌ๋ฅผ ์์ฑํ์ธ์.
git worktree add ../feature-x-dir feature-x- ์ด ๋ช
๋ น์
../feature-x-dir์ด๋ผ๋ ์ ํด๋๋ฅผ ์์ฑํฉ๋๋ค. - ํด๋น ํด๋์์
feature-x๋ธ๋์น๋ฅผ ์ฒดํฌ์์ํฉ๋๋ค. - ์ฐธ๊ณ ๋ก,
feature-x๋ธ๋์น๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด Git์์fatal: invalid reference: feature-x์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
feature-x ๋ธ๋์น๋ฅผ ์ฆ์์์ ์์ฑํ๋ ค๋ฉด ๋ธ๋์น ์ด๋ฆ ์์ -b ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ์ธ์.
git worktree add ../feature-x-dir -b feature-x์ด์ ์ด ๋๋ ํฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ๊ฒ์ ๋๋ค.
repo/
โโ feature-x-dir/
| โโ index.html
โโ website/
โโ index.html์ด์ ์๋ ์ ์ฅ์์๋ master ๋ธ๋์น๊ฐ ์ฒดํฌ์์๋ ์ํ๋ก ์ ์งํ๋ฉด์ feature-x-dir ๋๋ ํ ๋ฆฌ์์ feature-x ๋ธ๋์น ์์
์ ํ ์ ์์ต๋๋ค.
๋ช ๋ช ๊ท์น
์ด๋ฆ ์ง์ ๋ฐฉ์์ด ์๋ ์ ์ฅ์์ ์๋นํ ๋ค๋ฅด๋ค๋ ์ ์ ์ ์ํ์ธ์. ๊ฐ์ ๋๋ ํฐ๋ฆฌ์ ๋ค๋ฅธ ํ๋ก์ ํธ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์์ ํธ๋ฆฌ์ ๋ช ํํ๊ณ ์ค๋ช ์ ์ธ ์ด๋ฆ์ ์ง์ ํ๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค.
์ํฌํธ๋ฆฌ๋ค์ด ์๋ก ๊ด๋ จ๋์ด ์์์ ๋ช
ํํ ํ๊ธฐ ์ํด <์๋ณธ ์ ์ฅ์ ์ด๋ฆ>-<์ ํ>-<๋ธ๋์น ์ด๋ฆ> ํ์์ผ๋ก ์ด๋ฆ์ ์ง์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์๋ฅผ ๋ค์ด website-feat-ImplementNavigation ๋ฐ website-fix-CumulativeLayoutShift์ ๊ฐ์ด ์ด๋ฆ์ ์ง์ ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๊ฐ ๋ ๊น๋ํด ๋ณด์ผ ๊ฒ์
๋๋ค.
repo/
โโ website-feat-ImplementNavigation/
| โโ index.html
โโ website-fix-CumulativeLayoutShift/
| โโ index.html
โโ website/
โโ index.htmlWorktree ๋ค๋ฅผ ๋์ดํ๋ค
์์ฑ๋ ๊ฐ ์์
ํธ๋ฆฌ ๋ชฉ๋ก์ worktree list ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ํ์ธํ ์ ์์ต๋๋ค. ์๋๋ ์์ ์ถ๋ ฅ์
๋๋ค. ์ถ๋ ฅ์๋ ๋ธ๋์น ๊ฒฝ๋ก, ์ต์ ์ปค๋ฐ ํด์, ๊ทธ๋ฆฌ๊ณ ๋๊ดํธ ์์ ํ์๋ ๋ธ๋์น ์ด๋ฆ์ด ์์๋๋ก ๋ํ๋ฉ๋๋ค.
> git worktree list
D:/repo/website f9d49ec [master]
D:/repo/website-feat-ImplementNavigation f8d48ec [test]
D:/repo/website-fix-CumulativeLayoutShift f7d47ec [test2]Worktree๋ฅผ ์ญ์
์์
ํธ๋ฆฌ๋ฅผ ๋ชจ๋ ์ฌ์ฉํ๊ณ ๋๋ฉด worktree remove ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ํธ๋ฆฌ๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์ด ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์์
ํธ๋ฆฌ ๋๋ ํฐ๋ฆฌ์ ์๋ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ ํฌํจํ ๋ชจ๋ ํ์ผ์ด ์ญ์ ๋๋ฏ๋ก ๋งค์ฐ ํธ๋ฆฌํฉ๋๋ค. ์์
ํธ๋ฆฌ ๊ฒฝ๋ก๋ฅผ ์ธ์๋ก ์ ๊ณตํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์ฃผ๋ชฉํ๋ ๊ฒ์ ์๋ค. ์ด ๊ธฐ๋ฅ์ด ์ ๋๋ก ์๋ํ๋ ค๋ฉด ์์
ํธ๋ฆฌ๊ฐ ๊นจ๋ํ ์ํ์ฌ์ผ ํฉ๋๋ค. ์ฆ, ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์ปค๋ฐ๋๊ฑฐ๋ ํ๊ธฐ๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์๋ฉด --force ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ์ทจ์ํ๊ณ ์์
ํธ๋ฆฌ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
git worktree remove <path>์๋ฅผ ๋ค์ด, ์๋ ๋๋ ํ ๋ฆฌ website ๋ด๋ถ์์ ๋ค์์ ์คํํฉ๋๋ค.
git worktree remove ../website-feat-ImplementNavigation --forceํ์ง๋ง ์ด ์์ ์ผ๋ก ์์ ํธ๋ฆฌ์ ์ฐ๊ด๋ ๋ถ๊ธฐ๋ ์ญ์ ๋์ง ์์ต๋๋ค.
์์ฝ
| ๋ช ๋ น | ์ค๋ช |
|---|---|
git worktree list | ๋ชจ๋ ํ์ฑ ์์ ํธ๋ฆฌ ๋์ด |
git worktree add <path> <branch> | ์ ์์ ํธ๋ฆฌ ๋ง๋ค๊ธฐ |
git worktree remove <path> | ์์ ํธ๋ฆฌ ์ ๊ฑฐ |
git worktree prune | ์ค๋๋๊ฑฐ๋ ์ ํจํ์ง ์์ ์์ ํธ๋ฆฌ๋ฅผ ์ ๋ฆฌํฉ๋๋ค |
git worktree lock | ์์ ํธ๋ฆฌ๊ฐ ์ ๋ฆฌ๋์ง ์๋๋ก ๋ฐฉ์งํฉ๋๋ค |
์ด ๋ฉ์ง ๊ธฐ๋ฅ์ ์๊ฒ ๋ ํ๋ก๋ ์ ๊ฐ ์์ ํ๋ ๋ชจ๋ ๋ธ๋์น์ ๋ํด ํญ์ ์ํฌํธ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.