Git vs. Mercurial
Git vs. Mercurial ๊ด๋ จ
๊ธฐ์กด์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ (Version Control System)์์๋ ์ ์์ผ(Agile) ์คํ์ผ์ ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ผ๋ก ๊ฐ๋ฐ์ ์งํํ ๋ ์ฆ์ ์ถฉ๋๋ก ์ธํด ๋ธ๋์น๋ฅผ ๋ณํฉํ๋ ๊ณผ์ ์์ ์์๋ณด๋ค ๋ ๋ง์ ๋น์ฉ์ด ๋๋ ์ฌ๋ก๊ฐ ๋๊ณ ์์ต๋๋ค. ์ด๋ฐ ํ๊ฒฝ์์ ๋ถ๊ฐ๋๊ณ ์๋ ๊ฒ์ด ๋ถ์ฐ ๋ฒ์ ๊ด๋ฆฌ ์์คํ (DVCS, Distributed VCS)์ ๋๋ค. ์ด ๊ธ์์๋ ๋ถ์ฐ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ ๋ํ์ ์ ํ์ธ Git๊ณผ Mercurial์ ๋น๊ตํด ๋ณด๊ฒ ์ต๋๋ค.
DVCS๋ก์ ์ด์ฃผ
๋ฒ์ ๊ด๋ฆฌ ์์คํ (์ดํ VCS)์ IDE(Integrated Development Environment)์ ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฅ ์์ฃผ ์ ํ๋ ๋๊ตฌ์ด๋ค. VCS์ ๊ฒฝ์ฐ์๋ IDE์๋ ๋ฌ๋ฆฌ ๊ฐ๋ฐ์์๊ฒ ์ฃผ์ด์ง ์ ํ์ ์์ ๊ฐ ๊ทธ๋ ๊ฒ ๋ง์ง ์๋ค. ๊ทธ ์ด์ ๋ ์กฐ์ง ๋ด์ ๋ชจ๋ ๊ตฌ์ฑ์์ด ๋์ผํ VCS๋ฅผ ์ฌ์ฉํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง ์์ด๋ฌ๋ํ๊ฒ๋ ๊ฐ๋ฐ์๊ฐ ์ด์ฌํ ์ผํ ์๋ก ์ข ๋์ VCS๋ ๋ง์ ๋ฌธ์ ๋ฅผ ์ผ์ผํจ๋ค. ์ ์์ผ(Agile) ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ ์ ์ฉํ์ฌ ๊ธฐ๋ฅ ๋จ์์ ๋ณ๊ฒฝ์ด ๋์์ ๋ณ๋ ฌ์ ์ผ๋ก ์ผ์ด๋๋ ํ๊ฒฝ์์๋ ์์ฃผ ์ถฉ๋์ด ๋ฐ์ํ๋ค. ๋ธ๋์น๋ฅผ ๋ณํฉํ๋ ๊ณผ์ ์์ ์ญ์ ๋ง์ ์ถฉ๋์ด ๋ฐ์ํ๊ณ ๋ณํฉ์ ๋ค์ด๊ฐ๋ ๋น์ฉ์ด ๋์ ์ข ๋์ ์๋๋๋ก ๋ธ๋์น์ ๋ณํฉ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๋๋ฌผ๋ค.
์ด๋ฐ ํ๊ฒฝ์์ ๋ถ์ฐ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ด ์ ์ ๋ถ๊ฐ๋๊ธฐ ์์ํ๋ค. ํนํ Bitkeeper๋ Plastic SCM ๋ฑ๊ณผ ๊ฐ์ ์์ฉ DVCS๋ฅผ ๋์ฒดํ ์ ์๋ Git๋ Mercurial ๋ฑ์ ๊ณต๊ฐ ๋๊ตฌ๊ฐ ๋ฑ์ฅํ๊ณ , Linux ์ปค๋ ๋ฑ๊ณผ ๊ฐ์ ๋๊ท๋ชจ์ ํ๋ก์ ํธ์์๋ ์ฌ์ฉ๋๊ธฐ ์์ํ๋ฉด์ ๋น ๋ฅธ ์๋๋ก ํ์ฐ๋๊ธฐ ์์ํ๋ค. ํนํ DVCS๋ ์ด๋ ฅ(History)์ ๋ํ ๊ฐ๋ ์ ๋ฌ๋ฆฌํ๋ฉด์ ๊ฐ๋ ฅํ ๋ธ๋์น, ๋ณํฉ ๋ฑ์ด ๋ํ์ ์ธ ์ฅ์ ์ด ๋์๋ค. ๋ฌด์๋ณด๋ค ๊ฐ์ฅ ํฐ ์ฅ์ ์ ๋ถ์ฐ ํ๊ฒฝ์ ๊ธฐ๋ฐํ๊ณ ์์ผ๋ฏ๋ก, ๋ก์ปฌ ์ ์ฅ์(Repository)๋ง์ผ๋ก ์ ๋์ํ๊ณ , ์งง์ ์ญ์ฌ๋ฅผ ๋งํํ๊ธฐ ์ํด ๊ธฐ์กด VCS์์ ํ์ ์ ๋ค์ํ๊ฒ ์ง์ํ๋ค๋ ์ ์ด๋ค. ์ด๋ฌํ ์ ์ ๊ฐ๋ฐ์๊ฐ ๊ฐ๋ฐ ํ๊ฒฝ์์ ๋ง์ ๋น์ฉ์ ๋ค์ด์ง ์๊ณ ๊ฐ๋ฒผ์ด ๋ง์์ผ๋ก ์๋ํด ๋ณผ ์ ์๋๋ก ํ๋ค.
DVCS๋ฅผ ์ฌ์ฉํด ๋ณด๊ณ ์ถ์ ๋ง์์ด ๋ค์๋ค๋ฉด, ์ด๋ค ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์๋์ง ๊ถ๊ธํ ์ ์๋ค. Darcs, Bazzar, arch, SVK, Fossil, Mercurial, Git ๋ฑ์ ๊ณต๊ฐ ๋๊ตฌ์ Bitkeeper, Plastic SCM ๋ฑ์ ์์ฉ ๋๊ตฌ๊ฐ ์๋๋ฐ, ์ด ์ค์์ ํ์ฌ ๊ฐ์ฅ ๋์ธ์ ๊ฐ๊น์ด Git์ Mercurial์ ๋น๊ตํด ๋ณด๋๋ก ํ๊ฒ ๋ค.
Git์ Mercurial
๊ฐ์
Git๊ณผ Mercurial์ ๊ฑฐ์ ๋น์ทํ ์ฒ ํ์ ๊ฐ์ง๊ณ ์๋ค. ์ด๋ ์๋ง๋ DVCS๊ฐ ๊ฐ์ง๋ ํน์ฑ ๋๋ฌธ์ผ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ ์ ์๋ค. ๊ฐ๋ณ๊ณ , ๊ท๋ชจ ํ์ฅ์ด ์ฌ์ด VCS. ์ด ํน์ฑ์ DVCS(Distributed VCS)์์ 'D'๊ฐ ๊ฐ์ง๊ณ ์๋ ํน์ง์ ๊ทธ๋๋ก ๋ํ๋ธ๋ค. ํนํ ๋ณ๊ฒฝ์ ๋ํ ์ด๋ ฅ์ ์๊ฐ์ ์์กด์ ์ธ ์ ํ ๊ตฌ์กฐ๋ก ๋ํ๋ด๋ ๊ฒ์ด ์๋๋ผ, ๋ณต์์ ๋ถ๋ชจ ๋ณ๊ฒฝ๊ณผ ๋ณต์์ ์์ ๋ณ๊ฒฝ์ ํ์ํ๋ ๊ทธ๋ํ๋ก ๋ํ๋ธ๋ค. ๋ ์ ํ์์ ์ฐจ์ด๊ฐ ์๋ค๋ฉด, Git์ ํ์๋ถํฐ ์๋ง์ ๋ณ๋ ฌ ๋ธ๋์น๋ฅผ ์ ์ ๋ก ํ์ฌ ์ค๊ณ๋์๋ค๋ ์ ์ด๋ค. Mercurial์ ๊ทธ๋ฐ ์ฅ์ ์ด ์๋ ๋์ ์ ๋ฐฐ์ฐ๊ณ ์ฌ์ฉํ๊ธฐ ์ฝ๋๋ก ๋ง์ ๋ ธ๋ ฅ์ ๋ค์๋ค. ์ด๋ Git๊ณผ Mercurial ์ฌ์ด์ ์ ํ์์ ๊ฐ์ฅ ์ค์ํ ์ฐจ์ด์ ์ด๋ค.
์คํ ํ๊ฒฝ
Git์ C ์ธ์ด์ bsh(Bourne Shell), Perl์ ์ด์ฉํ์ฌ ์ ์ฒด๊ฐ ์์ฑ๋์ด ์์ผ๋ฉฐ, Mercurial์ ๊ฑฐ์ ์ ์ฒด๊ฐ ํ์ด์ฌ์ผ๋ก ์์ฑ๋์๋ค. ๋ฐ๊ฟ ๋งํ์๋ฉด Git์ Mercurial์ ๋นํด ์๋นํ Linux ์นํ์ ์ธ ์ฑ๊ฒฉ์ ๊ฐ์ง๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Windows ํ๊ฒฝ์์ Git๋ mingw32์ ๊ฐ์ ์๋ฎฌ๋ ์ด์ ํ๊ฒฝ์ด ํ์ํ๋ฉฐ, ์๋์ ์ผ๋ก Mercurial์ด Git์ ๋นํด์ Windows ํ๊ฒฝ์์ ๋ ๋์ ์ฑ๋ฅ์ ๋ณด์ฌ ์ค๋ค. ํ์ง๋ง ๋์์ Git์ ์ ธ ์คํฌ๋ฆฝํธ(shell script)๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ฉด, C ์ธ์ด๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋ช ๋ น์ ํ์ฅํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค. ๊ทธ์ ๋ฐํด์ Mercurial์ ํ์ด์ฌ์ผ๋ก ๋ ์ฝ๋(Core Code)๋ ๋ช ๋ น์ด(Command) ๊ตฌ์ฑ์ ์ดํดํ์ง ๋ชปํ๋ฉด ํ์ฅ ๋ช ๋ น์ ๋ง๋ค๊ธฐ๊ฐ Git์ ๋นํด์๋ ์ด๋ ต๋ค๋ ํน์ง์ด ์๋ค.
์ฌ์ฉ์ฑ
์ฌ์ฉ์ฑ ์ธก๋ฉด์์ ๊ณต๊ตฌ์ ๋น์ ํด ๋ณด์๋ฉด Mercurial์ ์ข ํฉ ๊ณต๊ตฌ ์ธํธ์, Git์ ๋งฅ๊ฐ์ด๋ฒ ์นผ์ ๋น๊ตํ ์ ์์ ๊ฒ ๊ฐ๋ค.
Mercurial์ ์ด๋ฏธ ํจํค์ง ์์ ๋ชจ๋ ๋๊ตฌ๊ฐ ๊ฐ๊ฐ ๊ณ ๋๋ก ์์ฑ๋ ์ํ๋ก ๋ค์ด ์๋ ์ข ํฉ ๊ณต๊ตฌ ์ธํธ์ด๋ค. ๋ฌผ๋ก ํ์ฅ์ ํ ์๋ ์์ง๋ง, ํ์ฅ ๋ช ๋ น์ ๋ง๋ค๊ธฐ๊ฐ ์ฝ์ง ์๋ค. ๋์ ํ์ํ๋ค ์ถ์ ๊ธฐ๋ฅ์ ๋๋ถ๋ถ ์ด๋ฏธ ๋ฒ๋ค ํ์ฅ(Extension)์ ํฌํจ๋์ด ์๋ค.
๋ฐ๋ฉด์ Git์ ํ์์ ์ธ ๊ธฐ๋ฅ ์ธํธ๋ฅผ ์ฝคํฉํธํ๊ณ ์ธ๋ จ๋ ํํ๋ก ๊ฐ์ถ ๋งฅ๊ฐ์ด๋ฒ ์นผ์ด๋ค. ๊ทธ๋์ ํต์ฌ์ ์ธ ๋ถ๋ถ๋ง์ ๋ดค์ ๋, ๊ธฐ๋ฅ์ ์ข ๋ฅ๋ ์ ๊ณ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ๋ง ์ ๊ณต๋๋ค๊ณ ์๊ฐํ ์ ์๋ค. ํ์ง๋ง ์ ธ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํด ๊ธฐ๋ณธ์ ์ธ ๋ช ๋ น์ ํ์ฅํ๊ฑฐ๋ ์ฐ๊ฒฐํด์ ์๋ก์ด ๋ช ๋ น์ ๋ง๋ค์ด ์์ ์ ์์ ๋ฑ ๋ง๋ ํํ์ ๋๊ตฌ๋ฅผ ์์ฑํ ์ ์๋ค. ๊ทธ๋์ ๋๋ก๋ Mercurial๊ณผ ๋๋ฑํ๊ฑฐ๋ ๋ ๋์ ์ฌ์ฉ์ฑ์ ์ป์ ์ ์๋ค.
Mercurial์ ๋ํ ์ ์ ๋ฆฌ๋ ๋ณ์นญ์ด ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ ธ ์์ผ๋ฉฐ, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์ ์ค์ ์์ด ํน์ ์ฌ์ฉ์ ์ด๋ฆ์ ์ค์ ํ๋ ์ ๋๋ง์ผ๋ก ๋ฐ๋ก ์์ํ ์ ์๋ ํ๊ฒฝ์ ์ ๊ณตํ๋ค. ๊ทธ์ ๋ฐํด Git์ ์ผ๋ฐ์ ์ธ ์ค์ ์ ์ ํ ์ ๊ณตํ์ง ์์ผ๋ฏ๋ก, Mercurial์ ๋นํด ์กฐ๊ธ ๋ ๋ง์ ์ค์ ์ด ํ์ํ ์ ์๋ค.
๋ ๊น์ด
Git๊ณผ Mercurial์ ์ฐจ์ด์ ์ ์์์ ๊ฐ๋ตํ๊ฒ ์ดํด๋ณด์๋ค. ์ด๋ฌํ ์ฐจ์ด๋ ๊ตฌํ ์ธ์ด ์ธ์๋ ๊ตฌํ ๋ฐฉ์์์๋ ๋๋ฌ๋๋๋ฐ, ๋ํ์ ์ธ ๊ตฌํ ๋ฐฉ์์์ ์ฐจ์ด๋ ์ ์ฅ์์ ๊ตฌ์กฐ์ ๋ธ๋์น์ ์๋ค.
์ ์ฅ์์ ๊ตฌ์ฑ
๋จผ์ Git์ ์ ์ฅ์๋ ์ค๋ ์ท ๊ธฐ๋ฐ์ด๋ค. ๋ชจ๋ ๋ณ๊ฒฝ์ด๋ ํ์ผ์ ํฌํจํ๋ ๋์์ ์ค๋ธ์ ํธ๋ก ํํ๋๋ฉฐ, ์ค๋ธ์ ํธ์ ์ข ๋ฅ์๋ Commit, Tree, BLOB, Tag๊ฐ ์๋ค. BLOB์ Leaf ๋ ธ๋๋ก ์ค์ ๊ด๋ฆฌ๋๋ ํ์ผ์ด ์ฌ๊ธฐ์ ๋ค์ด๊ฐ๋ค. ๊ทธ ์ธ์ ์ค๋ธ์ ํธ๋ ๋ค๋ฅธ ์ค๋ธ์ ํธ๋ฅผ ์ฐธ์กฐํ๋ ํ์์ผ๋ก ์๋์ ๊ฐ์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ง๋ ๋ค.
์ฌ๊ธฐ์ BLOB์์์ ๊ด๋ฆฌ ๋์์ ํน์ ์์ ์ ํ์ผ ์ ์ฒด ๋ด์ฉ์ด๋ค. ๊ทธ๋์ Git์ ์ ์ฅ์๋ ํฌ๊ธฐ๊ฐ ๋น ๋ฅธ ์๋๋ก ์ฆ๊ฐํ๋๋ฐ, ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด gc ๋ช ๋ น์ ์ ๊ณตํ๋ค. gc ๋ช ๋ น์ ์ํํ๋ฉด์ ์ ๊ทผ ๋ถ๊ฐ๋ฅํ ๋ธ๋์น๋ ์ญ์ ํ๊ณ , ์ค๋๋ ๋ณ๊ฒฝ ์งํฉ(Changeset)์ diff ํํ์ ํ์ผ์ ์์ถํ ํํ๋ก ์ ์ฅํ์ฌ ์ ์ฅ์ ํจ์จ์ ๋์ธ๋ค.
๋ฐ๋ฉด์ Mercurial์ ๊ฐ ํ์ผ๋ณ ๋ณ๊ฒฝ๋ถ๋ง ์ถ์ ํ๋ค. ์ ์ฅ์์๋ ์ค์ ๊ด๋ฆฌ ๋์์ด ๋๋ ํ์ผ์ ํธ๋ฆฌ ๊ตฌ์กฐ์ ๋์ผํ ํํ์ .i๋ฅผ ํ์ฅ์๋ก ํ๋ ๋ณ๊ฒฝ ๊ธฐ๋ก์ฉ ํ์ผ์ด ์์ผ๋ฉฐ, ๊ทธ ํ์ผ์๋ ํด๋น ํ์ผ์ด ๊ฐ๋ฆฌํค๊ณ ์๋ ํ์ผ์ ๋ณ๊ฒฝ ์ด๋ ฅ์ด ๋ฐ์ด๋๋ฆฌ(binary) ํํ๋ก ์ ์ฅ๋์ด ์๋ค. ๊ทธ๋ก ์ธํด ์ ์ฅ์๋ ๋ณ๊ฒฝ๋ถ์ ๋น๋กํด์ ์ฆ๊ฐํ๊ฒ ๋๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก Git์ ๋นํด ์๋งํ ์๋๋ก ์ ์ฅ์์ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐํ๋ค.
๊ทธ๋์ ๋ณ๋์ ์ ์ฅ์์ ๋ํ ๊ด๋ฆฌ ์์ ์ด ํ์ํ์ง ์๋ค๋ ์ฅ์ ์ด ์๋ค. ๋์ ํจ์น(patch)์ ์์ฑ์ด๋ ๋ณ๊ฒฝ ์ด๋ ฅ์ ์ถ์ ์๋ Git์ ๋นํด์ ์ฉ์ดํ๋, ์ค๋ ์ท์ ์์ฑ์ด๋ ์ ๋ฐ์ดํธ, ์ปค๋ฐ(Commit) ์์ ์๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ Git์ ๋นํด์ ๋์ ๋น์ฉ์ ์๊ตฌํ๋ค.
๋ณํฉ๊ณผ ๋ณ๊ฒฝ ์ด๋ ฅ
๋ณํฉ๊ณผ ๋ธ๋์น๋ DVCS๊ฐ SVN๋ฑ์ ๊ธฐ์กด VCS์ ๋นํด์ ๋ ๋์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ค ํ๋๋ค. ๋ถ์ฐ ํ๊ฒฝ์ ์ ์ ๋ก ํ๊ณ ๊ฐ๋ฐ๋ ์์คํ ์ด๋ฏ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๋ณ๊ฒฝ ์ด๋ ฅ์ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด DAG(Directed Acyclic Graph)๋ก ๋ํ๋๋ฉฐ, ๊ทธ๋ก ์ธํด SVN์ ๋จ์ ์ค๋ ์ท ๊ธฐ๋ฐ์ 3-Way ๋ณํฉ์ ๋นํด ์๋ฆฌํ ๋ณํฉ ์์ ์ด ๊ฐ๋ฅํ๋ค. ๊ทธ๊ฒ์ ๊ฐ ๋ณ๊ฒฝ ์งํฉ์ด ๋ถ๋ชจ ๋ณ๊ฒฝ ์งํฉ์ ๋ํ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ธ๋ฐ, ์ด๋ก ์ธํด ์ถฉ๋์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ํ์ ํ๊ฒ ๋จ์ด์ง๊ฒ ๋๋ค. ๋ค๋ง ๊ตฌํ์์ ์ฐจ์ด๋ผ๊ธฐ ๋ณด๋ค๋ ๋์์์ ์ฐจ์ด๊ฐ ์๋ค. Git์ ์ ๋ง ๋๊ท๋ชจ์ ๋ธ๋์น๋ฅผ ๊ณ ๋ คํ๋ฏ๋ก n-Way ๋ณํฉ์ ์ง์ํ๋ค. ๋ฐ๋ฉด์ Mercurial์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก Git๊ณผ๋ ๋ค๋ฅธ ์ต๋ช ๋ธ๋์น(ํน์ ๋์ ๋ธ๋์น)๋ฅผ ๊ธฐ๋ณธ ์ฌ์์ผ๋ก ํ๋ฏ๋ก, 2-Way ๋ณํฉ์ ๊ธฐ๋ณธ์ผ๋ก ํ์ฌ, N๊ฐ์ ๋ณํฉ ๋์ ๋ธ๋์น๊ฐ ์๋ค๋ฉด N-1์ ๋ณํฉ์ ์คํํ๊ฒ ๋๋ค.
์ ๋ฐ์ ์ผ๋ก Mercurial์ด ์ ๊ณตํ๋ ๋ณ๊ฒฝ ์ด๋ ฅ ๊ทธ๋ํ๋ Git์ ๋นํด ์ข์ ํญ์ ์ง๋๊ณ SVN์ ์ด๋ ฅ ๊ด๋ฆฌ์ ์๋นํ ์ ์ฌํ ๋ฉด๋ชจ๋ฅผ ๋ณด์ธ๋ค. ๊ทธ๋ก ์ธํ ๋ํ์ ์ธ ์ฐจ์ด์ ์ด Mercurial์ ๋ก์ปฌ ์ ์ฅ์์ ์๋ ๋ณ๊ฒฝ ์ด๋ ฅ์ ๋ํด SVN์ ๋ฆฌ๋น์ (Revision) ๋ฒํธ์ ๊ฐ์ ๋ฆฌ๋น์ ๋ฒํธ๋ฅผ ์ ๊ณตํ๋ค. ๋ค๋ง ์ด ๋ณ๊ฒฝ ์ด๋ ฅ์ด ๋ณต์ ๋ ๋ค๋ฅธ ์ ์ฅ์์์๋ ์ ์ง๋๋ค๋ ๊ฒ์ ๋ณด์ฅํ์ง ๋ชปํ๋ฏ๋ก, ์๋ณ์๋ก์ ์ฌ์ฉํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์๋ค. ๊ทธ๋์ ์ด ์ฐจ์ด์ ์ ์ด๊ธฐ ์ ์์๋ ๋์์ด ๋ ์ ์์ง๋ง, ์ต์ข ์ ์ผ๋ก๋ Mercurial์ ๋ํ ์คํด๋ฅผ ๋ถ๋ฌ ์ผ์ผํค๋ ์์ธ์ด ๋๊ธฐ๋ ํ๋ค.
DVCS์ ๋ธ๋์น๋ ๊ธฐ๋ณธ์ ์ผ๋ก๋ ์ ์ฅ์์ ๋ณต์ ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค. ํ์ง๋ง Git๊ณผ Mercurial์ ๋ ๋ค ํ๊น (Tagging)์ ๊ธฐ๋ณธ์ผ๋ก ํ๋ ๋ธ๋์น ๊ธฐ๋ฒ์ ์ ๊ณตํ๋ค. ๋ถ๊ธฐ๋ ํน์ ์ปค๋ฐ์ ํ๊ทธ๋ฅผ ๋ถ์ด๋ฉด, ํด๋น ํ๊ทธ๊ฐ ๋ธ๋์น์ ์ด๋ฆ์ฒ๋ผ ๋์ํ๋ค. ๊ฑฐ์ ๋์ผํ์ง๋ง ํฐ ์ฐจ์ด ์ค ํ๋๋ ์ ์ฅ์๋ฅผ ์๊ฒฉ ์ ์ฅ์์ ๋ฐ์ํ๊ฑฐ๋ ํน์ ๊ทธ ๋ฐ๋์ ์์ ์ ํ ๋, ๋ธ๋์น์ ๋ํ ๋์์ด๋ค. Mercurial์ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ๋ธ๋์น๋ฅผ ํ ๋ฒ์ ๋ฐ์ํ๋ค. ๊ทธ์ ๋ฐํด Git์ ํ์ฌ ์์ ์ค์ธ ๋ธ๋์น๋ง ๋ฐ์ํ๋ค.
์ฑ๋ฅ
Git ๊ฐ์ ๊ฒฝ์ฐ ํ๋ก์ ํธ์ ๊ท๋ชจ์ ๋น๋กํ์ฌ ์ ์ฅ์์ ๊ท๋ชจ๊ฐ ์๋นํ ๋น ๋ฅธ ์๋๋ก ์ฆ๊ฐํ๋ฉฐ, ๋์กฐ์ ์ผ๋ก Mercurial์ ์๋งํ๊ฒ ์ ํ์ ์ผ๋ก ์ฆ๊ฐํ๊ฒ ๋๋ค. ๋์ ์ค๋ ์ท ๊ธฐ๋ฐ์ด๋ฏ๋ก ๋๊ท๋ชจ์ ํ๋ก์ ํธ์์๋ ์ผ์ ํ ์ฑ๋ฅ์ ์ ์งํ๋ฉฐ, ๋์ฒด๋ก Mercurial๋ณด๋ค ๋น ๋ฅด๋ค. ๋ฐ๋ฉด Mercurial์ ๊ฒฝ์ฐ ์ฐจ์ด์ ๊ธฐ๋ฐ์ด๋ฉฐ ๋์คํฌ I/O๊ฐ ์ ์ผ๋ฏ๋ก, ๋๋์ ์ฝ๊ธฐ/์ฐ๊ธฐ๊ฐ ๋ฐ์ํ๋ ์ํฉ์์๋ ๋น๊ต์ ์์ ์ ์ด๋ค. ๊ทธ๋ฌ๋ ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง๊ณ , ๋ณ๊ฒฝ ์ด๋ ฅ์ด ์์ผ ์๋ก ํจ์น๋ฅผ ๋ณํฉํ๋ ๋น์ฉ์ด ์ฆ๊ฐํ๋ค. ๋ Mercurial์ ์ ์ฅ์๋ Append ๊ธฐ๋ฐ์ผ๋ก ๋์ํจ์ ๋ฐ๋ผ, ๋์คํฌ์ ์ค๋ฅ๊ฐ ์์ ๋์ ์ ์ฅ์๊ฐ ์ํฅ์ ์ ๊ฒ ๋ฐ๋๋ค๋ ์ ๋ Mercurial์ ์ฅ์ ์ด ๋๋ค.
Subversion๊ณผ์ ์ฐ๊ณ
๊ฐ์ฅ ์ฒซ๋จธ๋ฆฌ์ ๋ฐํ๋ค์ํผ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋ฐ์๊ฐ VCS๋ฅผ ๋ง์๋๋ก ์ ํํ ์ ์๋ ๊ฒฝ์ฐ๋ ๋๋ฌผ๋ค. ๊ทธ๋ฌ๋ฏ๋ก, ๊ธฐ์กด์ VCS์ ํจ๊ป ์ฌ์ฉํด์ผ ํ ํ ๋ฐ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ VCS๊ฐ SVN(Subversion)์ด๋ฏ๋ก SVN๊ณผ์ ์ฐ๋์ ๊ธฐ๋ณธ์ผ๋ก ๋น๊ตํด๋ณด๊ณ ์ ํ๋ค.
๋ ๋ค ๊ธฐ๋ณธ์ ์ธ ๋์์ SVN์ ๊ฐ ์ปค๋ฐ ๋ด์ฉ์ ๋ฐ์์ ๋ก์ปฌ ์ ์ฅ์์ ๋ค์ ์ปค๋ฐํ๋ ํํ๋ฅผ ์ทจํ๋ค. ์ด ๊ณผ์ ์์ Git์ ๊ฒฝ์ฐ ์ค๊ฐ์ ๋์์ ๋ฉ์ถ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์์์ผ๋ ์ต๊ทผ์๋ ํด๊ฒฐ๋์๋์ง ์ด์ง๊ฐํ ๊ท๋ชจ์ ํ๋ก์ ํธ์์๋ ์ ๋์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ธฐ๋ณธ์ ์ธ ์ฑ๋ฅ์ ์ฐจ์ด๋ก ์ธํด Git์ด Mercurial์ ๋นํด ์กฐ๊ธ ๋ ๋น ๋ฅด๋ค. Mercurial์ ๊ฒฝ์ฐ๋ ์์ฒด ๋ฉํ ๋ฐ์ดํฐ ๋ด์ SVN์ ๋ฉํ ๋ฐ์ดํฐ๋ ํจ๊ป ๋ณด๊ดํ๋ค. ๊ทธ๋์ ์ผ๋ฐ์ ์ธ ์ ์ฅ์์์์ ์ํฉ๊ณผ๋ ๋ฌ๋ฆฌ SVN๊ณผ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ Git์ ์ ์ฅ์๊ฐ ํจ์ฌ ์ฝคํฉํธํ ํํ๊ฐ ๋๋ค. ๋์ SVN๊ณผ์ ์ฐ๋ ์์ฒด๋ฅผ Mercurial์ด Git๋ณด๋ค ๋จผ์ ์์ํ์๊ณ ์ค๋๋ ๋งํผ ์์ ์ ์ด๋ค.
์ด๋ฌํ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ ์์ธ์ SVN์ ์ ํ์ ์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ๋ชฉ๋ก์ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ด๋ค. DVCS์ ํ๋ก ํธ ์๋๋ก SVN์ ์ธ ๋ ๊ฐ์ฅ ์์ฃผ ๋ถ๋ช์น๋ ๋ฌธ์ ๊ฐ ์ด ๊ทธ๋ํ ํํ์ ๋ณ๊ฒฝ ์ด๋ ฅ์ ์ ํ์ ์ธ ํํ๋ก ๋ฐ๊พธ๋ ์์ ์ด๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ฐฉ๋ฒ์ด Mercurial๊ณผ Git ์์ชฝ ๊ณตํ rebase๋ ์์ ์ด๋ค. ์ด rebase ์์ ์ Mercurial์ ๊ฒฝ์ฐ ์ง์ ํด์ผ ํ๊ณ , Git์ ๊ฒฝ์ฐ๋ ์๊ฒฉ ์ ์ฅ์์ ๋ฐ์ํ๋ ์์ ์์ ์ด rebase๊ฐ ๋ น์ ์๋ค.
์ผ๋ฐ์ ์ธ ํ๊ฒฝ์ ๊ตฌ์ฑ์ ์๋์ ๊ฐ๋ค.
๋ฌผ๋ก DVCS๋ต๊ฒ ์ค์ ์ ์ฅ์๋ฅผ ๊ฐ์ง์ง ์๋ ํํ์ ๊ตฌ์ฑ๋ ๊ฐ๋ฅํ์ง๋ง, SVN๊ณผ ํจ๊ป ์ด๋ค๋ฉด ์ด๋ฐ ํํ ์ธ์๋ ๋์ค๊ธฐ๊ฐ ํ๋ค๋ค. ๋ค๋ง SVN๊ณผ DVCS๋ฅผ ๊ฐ์ด ์ฐ๊ฑฐ๋ SVN์์ DVCS๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ๋, DVCS์์๋ svn:externals์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์๋๋ค๋ ๊ฒ, ํ์ ๋๋ ํฐ๋ฆฌ๋ณ ์ฒดํฌ์์์ด ๋ถ๊ฐ๋ฅํ๋ค๋ ์ ์ ์ผ๋์ ๋์ด์ผ ํ๋ค. ํ์์ ๊ฒฝ์ฐ๋ ์ ์ฅ์์ ์ฌ๊ตฌ์ฑ์ ํตํด ํด๊ฒฐํ์ฌ์ผ ํ๋ฉฐ, ์ ์์ ๊ฒฝ์ฐ๋ ์ ์ฌํ ํ์ฅ(Mercurial - SubRepos, Git - SubModule)์ด ๋์ ์์ผ๋ ๊ธฐ๋ฅ์ ์ธ ๋ฉด์์ ๋ง์ ์ฐจ์ด๋ฅผ ๋ณด์ด๋ ์ฌ์ฉ ์ ์ ๋ฏธ๋ฆฌ ๊ณ ๋ คํด ๋ณด๋ ๊ฒ์ด ์ข๋ค.
๊ฒฐ๋ก
๋ ๋ค DVCS์ ๋ํ์ ์ธ ๊ฒ๋ค์ด๋ฉฐ, ํ๋ฐํ๊ฒ ์์ ์ด ์ผ์ด๋๊ณ ์๋ค. ์ ์ฉ๋๊ณ ์๋ ํ๋ก์ ํธ๋ ๋์ด๋๊ณ ์์ผ๋ฉฐ, Kernel์ด๋ ๋ชจ์ง๋ผ(Mozilla), ์๋๋ก์ด๋, OpenJDK ๋ฑ ๋๊ท๋ชจ ํ๋ก์ ํธ์ ์ด์ ๋ ๋์ ๋ง์ด ๋๋ค. ๋ฟ๋ง ์๋๋ผ ๊ฐ๋ฐ์ ๊ฐ์ธ ํ๊ฒฝ์๋ง ์ํฅ์ ์ฃผ๋ ์ค์ ์ด ๊ฐ๋ฅํ๋ฉฐ, ๋ ๋ค SVN๊ณผ ๋์์ง ์์ ์ฐ๋์ ์ ๊ณตํ๋ค. ๊ทธ๋ ๊ฒ ๋ดค์ ๋, ๋๊ตฌ๋ ๋๋ถ๋ถ์ ์ํํธ์จ์ด๊ฐ ๊ทธ๋ ๋ฏ ์๋ก์ ์ฅ์ ์ ํก์ํ๋ฉฐ, ๊ธฐ๋ฅ์ ์ผ๋ก๋ ๋น ๋ฅธ ์๋๋ก ๋ฎ์๊ฐ๊ณ ์๋ค. ๊ทธ๋์ ์ ํ์์ ์์ด์๋ ๊ธฐํธ์ ๋ง์ถ์ด ๋ง์์ ๋๋ ๊ฒ์ ๊ณ ๋ฅด๋ฉด ๋๋ค๊ณ ์๊ฐํ๋ค. ๋ค๋ง ๊ฐ๋จํ๊ฒ ๋๋ง ๊ณ ๋ฏผ์ ์ค์ผ ์ ์๋๋ก ๋ช๋ช ๋น๊ต ๊ฐ๋ฅํ ์์๋ฅผ ์์์ ์ ๋ฆฌํ ๋ด์ฉ์ ์ผ๋ถ๋ฅผ ํฌํจํ์ฌ ๋ค์ ํ์ ๊ฐ์ด ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด ๋ณด์๋ค.
์ฐธ๊ณ
- ์ํฉ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ฌ์ง๊ฐ ์๋ ๊ฒฝ์ฐ
- ์ถ๊ฐ ์ค์ ์ด ํ์ํ๊ฑฐ๋, ๊ฒฝ์ฐ์ ๋ฐ๋ผ์ ๋ฌ๋ผ์ง ์ ์๋ ๊ฒฝ์ฐ ํน์ ์ผ๋ถ๋ง ์ง์๋๋ ๊ฒฝ์ฐ
- ํ์ฌ๋ ์ ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ ๊ฒฝ์ฐ
๋น๊ต ์กฐ๊ฑด | Git | Mercurial | ์ค๋ช |
---|---|---|---|
SVN์ ์ด ๊ฒฝํ์ด ๋ง๊ณ , ๋ฌ๋์ปค๋ธ๋ฅผ ์ต๋ํ ์ค์ฌ์ผ ํ๋์ง | |||
์คํ ํ๊ฒฝ์ด ์๋์ฐ ๊ณ์ด์ธ์ง, xNIX ๊ณ์ด์ธ์ง | NIX | ์๋์ฐ | ์๋์ฐ ํ๊ฒฝ์์๋ Mercurial์ด ์๋์ ์ผ๋ก ๋น ๋ฅด๋ฏ๋ก, Mercurial์ ์ถ์ฒํจ |
์๋ก์ด ๊ฒ์ ๊ฒฝํํด ๋ณด๊ฑฐ๋ DVCS์ ๋ํ ์ฝ์ ํธ๋ฅผ ์ ์๊ณ ์ถ์์ง | |||
VCS๊ฐ ์๋ ๋ค์ํ ์ฉ๋๋ก ์ฌ์ฉํ ํ์๊ฐ ์๊ฑฐ๋, ๊ฐ๋ ฅํ ์ฌ์ฉ์ํ ํน์ ๋ช ๋ น ์กฐํฉ์ด ํ์ํ์ง | |||
ํธ์คํ ์๋น์ค | https://github.com | https://bitbucket.org | |
ํ์ ๋๋ ํฐ๋ฆฌ ์ฒดํฌ์์ | |||
์ธ๋ถ ์ ์ฅ์ ๋งํฌ | |||
๊ถํ ๋ณด์กด | ์คํ ๊ถํ๋ง | ์คํ ๊ถํ๋ง | |
๋ณ๊ฒฝ ์ด๋ ฅ ๋ชจ๋ธ | ์ค๋ ์ท | ํจ์น(Patch) | |
๊ตฌํ ์ธ์ด | C, Bourne Shell, Perl | ํ์ด์ฌ | Mercurial์ ๋ฐ์ด๋๋ฆฌ๋น๊ต๊ธฐ๋ฅ(binary diff)๋ง C์ธ์ด๋ก ๊ตฌํ |
๋ธ๋์น ๋ณํฉ | n-Way | 2-Way |
๋ถ๋ก
Mercurial ๋ฒ๋ค ํ์ฅ ๋ชฉ๋ก
๋ค์ ํ๋ Mercurial์ ๋ฒ๋ค ํ์ฅ ๋ชฉ๋ก ์ค์์ ์์ฃผ ์ฐ๋ ์ผ๋ถ ๋ฒ๋ค ํ์ฅ์ด๋ค. ๋ ์์ธํ ๋ชฉ๋ก์ด ํ์ํ๋ค๋ฉด ๊ณต์ ์ํค๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
Name | Page | Description |
---|---|---|
acl | AclExtension | ์ ์ฅ์์ ์ ๊ทผ ๊ฒฝ๋ก๋ณ ์ปค๋ฐ ๊ถํ์ ์ค์ ํ๋ค. Mercurial ํน์ฑ์ ์ฝ๊ธฐ ๊ถํ์ ๊ตฌ๋ถํ ์ ์๋ค |
alias | AliasExtension | ์ฌ์ฉ์๊ฐ ์ ์ํ ์ปค๋งจ๋ ์ด๋ฆ์ ๋ณ์นญ์ ์ฌ์ฉํ ์ ์๋ค. |
bookmarks | BookmarksExtension | ํน์ ๋ณ๊ฒฝ ์งํฉ์ ์์ ์ฌํญ์ ๋ฐ๋ผ๊ฐ๋ ๋ง์ปค๋ฅผ ์์ฑํ๋ค(Git์ Fast Branch์ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ ๊ณต) |
bugzilla | BugzillaExtension | ๋ฒ๊ทธ ID ๊ธฐ๋ก์ผ๋ก ๋ฒ๊ทธ์ง๋ผ์ ํญ๋ชฉ์ ์ ๋ฐ์ดํธํ ์ ์๋ค. |
children | ChildrenExtension | ํน์ ๋ฆฌ๋น์ ์ด ๋ถ๋ชจ์ธ ์์ ๋ฆฌ๋น์ ์ ๋ณด์ฌ ์ค๋ค. |
churn | ChurnExtension | ์ฌ์ฉ์๋ณ ์์ ์ ํต๊ณ๋ฅผ ๋ณด์ฌ ์ค๋ค. |
convert | ConvertExtension | ๋ค๋ฅธ VCS๋ฅผ Mercurial๋ก ๋ณ๊ฒฝํ๋ค. CVS, SVN, Git, Bazaar, Perforce ๋ฑ์ ์ง์ํ๋ค. |
color | ColorExtension | diff, status ๋ฑ ์ผ๋ถ ๋ช ๋ น์ ์ถ๋ ฅ์ ์๊น๋ก ํ์ํ๋ค. |
eol | EolExtension | End-line ๋ฌธ์๋ฅผ ์์ ํ์ผ๊ณผ ์ ์ฅ์๊ฐ์ ๋ณํ์ ํด์ค๋ค. |
extdiff | ExtdiffExtension | ์ธ๋ถ ํ๋ก๊ทธ๋จ์ ์ด์ฉํด์ diff ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค. |
fetch | FetchExtension | pull, merge, update๋ฅผ ํ๋ฐฉ์! |
gpg | GpgExtension | GPG๋ฅผ ์ด์ฉํด change set์ digestํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋ค. |
graphlog | GraphlogExtension | ๋ฆฌ๋น์ ๊ทธ๋ํ๋ฅผ ASCII๋ก ์ถ๋ ฅํ๋ค. |
hgcia | HgciaExtension | CIA๋ก ์๋ฆผ์ ๋ณด๋ธ๋ค |
highlight | HighlightExtension | Mercurial์ ์น ์๋ฒ ์์์ ํ์ผ ๋ด์ฉ์ ํ์ํ ๋ Syntax Highlight๋ฅผ ์ ๊ณตํ๋ค. |
mq | MqExtension | ํจ์น๋ฅผ ํ(queue) ํํ๋ก ๊ด๋ฆฌํ ์ ์๋๋ก ํด์ค๋ค. |
progress | ProgressExtension | ์ผ๋ถ ๋ช ๋ น์ ์ํํ ๋ ์งํ ์ํ๋ฅผ ํ์ํ๋ค(1.5 ์ด์ ํ์) |
rebase | RebaseExtension | ๋ณ๊ฒฝ ์งํฉ์ ๋ถ๋ชจ๋ฅผ ๋ณ๊ฒฝํ๋ค |
win32mbcs | Win32mbcsExtension | ์๋์ฐ ์์์ ํ์ผ๋ช ์ shift_jis/big5๋ก ์ธ ์ ์๋๋ก |