Git Server
ํ๋กํ ์ฝ
Git์ Local, SSH, Git, HTTP ์ด๋ ๊ฒ ๋ค ๊ฐ์ง์ ๋คํธ์ํฌ ํ๋กํ ์ฝ์ ์ฌ์ฉํ ์ ์๋ค. ์ด ์ ์์๋ ๊ฐ๊ฐ ์ด๋ค ๊ฒฝ์ฐ์ ์ ์ฉํ์ง ์ดํด๋ณผ ๊ฒ์ด๋ค.
HTTP ํ๋กํ ์ฝ์ ์ ์ธํ ๋๋จธ์ง๋ค์ ๋ชจ๋ Git์ด ์๋ฒ์ ์ค์น๋ผ ์์ด์ผ ํ๋ค.
๋ก์ปฌ ํ๋กํ ์ฝ
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ฒ์ด ๋ก์ปฌ ํ๋กํ ์ฝ ์ด๋ค. ๋ฆฌ๋ชจํธ ์ ์ฅ์๊ฐ ๋จ์ํ ๋์คํฌ์ ๋ค๋ฅธ ๋๋ ํ ๋ฆฌ์ ์์ ๋ ์ฌ์ฉํ๋ค. ํ์๋ค์ด ์ ๋ถ ํ ์์คํ ์ ๋ก๊ทธ์ธํ์ฌ ๊ฐ๋ฐํ๊ฑฐ๋ ์๋๋ฉด NFS๊ฐ์ ๊ฒ์ผ๋ก ํ์ผ์์คํ ์ ๊ณต์ ํ๊ณ ์์ ๋ ์ฌ์ฉํ๋ค. ์ ์๋ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ค. ๋ชจ๋ ์ ์ฅ์๊ฐ ํ ์์คํ ์ ์๊ธฐ ๋๋ฌธ์ ํ์๊ฐ์ ๋ชจ๋ ์์ ์ ์๋ค.
๊ณต์ ํ์ผ์์คํ ์ ๋ง์ดํธํ์ ๋๋ ๋ก์ปฌ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ Cloneํ๊ณ Pushํ๊ณ Pullํ๋ฉด ๋๋ค. ์ผ๋จ ์ ์ฅ์๋ฅผ Cloneํ๊ฑฐ๋ ํ๋ก์ ํธ์ ๋ฆฌ๋ชจํธ ์ ์ฅ์๋ก ์ถ๊ฐํ๋ค. ์ถ๊ฐํ ๋ URL ์๋ฆฌ์ ์ ์ฅ์์ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๋ค. ์๋ฅผ ๋ค์ด ์๋์ ๊ฐ์ด ๋ก์ปฌ ์ ์ฅ์๋ฅผ Cloneํ๋ค:
์๋ ์ฒ๋ผ๋ ๊ฐ๋ฅํ๋ค:
Git์ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ง์ ์ธ ๋์ file://
๋ก ์์ํ๋ URL์ ์ฌ์ฉํ ๋์ ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ค. ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ ํ์ผ์์คํ
์ ์๋ ์ ์ฅ์๋ฅผ Cloneํ ๋ Git์ ํ๋๋งํฌ๋ฅผ ๋ง๋ ๋ค. ๊ฐ์ ํ์ผ์์คํ
์ ์๋๊ฒ ์๋๋ฉด ๊ทธ๋ฅ ๋ณต์ฌํ๋ค. ํ์ง๋ง file://
๋ก ์์ํ๋ฉด Git์ ๋คํธ์ํฌ๋ฅผ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋์ฒ๋ผ ํ๋ก์ธ์ค๋ฅผ ๋ณ๋๋ก ์์ฑํ์ฌ ์ฒ๋ฆฌํ๋ค. ์ด ํ๋ก์ธ์ค๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๊ฒ์ ํจ์จ์ด ์ข ๋จ์ด์ง์ง๋ง ๊ทธ๋๋ file://
๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ์๋ค. ๋ณดํต์ ๋ค๋ฅธ ๋ฒ์ ๊ด๋ฆฌ ์์คํ
๋ค์์ ์ํฌํธํ ํ์ ์ด๋ ๊ฒ ์ฌ์ฉํ๋๋ฐ, ์ธ๋ถ ๋ ํผ๋ฐ์ค๋ ๊ฐ์ฒด๋ค์ด ํฌํจ๋ ์ ์ฅ์์ ๋ณต์ฌ๋ณธ์ ๊นจ๋ํ ์ํ๋ก ๋จ๊ฒจ๋๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ค(_9์ฅ_์์ ์์ธํ ๋ค๋ฃฌ๋ค). ์ฌ๊ธฐ์๋ ์๋๊ฐ ๋น ๋ฅธ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๋ค.
์ด๋ฏธ ์๋ Git ํ๋ก์ ํธ์์ ์๋์ ๊ฐ์ด ๋ก์ปฌ ์ ์ฅ์๋ฅผ ์ถ๊ฐํ๋ค:
๊ทธ๋ฌ๋ฉด ๋คํธ์ํฌ์ ์๋ ๋ฆฌ๋ชจํธ ์ ์ฅ์์ฒ๋ผ Pushํ๊ณ Pullํ ์ ์๋ค.
์ฅ์
ํ์ผ ๊ธฐ๋ฐ ์ ์ฅ์๋ ๋จ์ํ ๊ฒ์ด ์ฅ์ ์ด๋ค. ๊ธฐ์กด์ ์๋ ๋คํธ์ํฌ๋ ํ์ผ์ ๊ถํ์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ค์ ํ๊ธฐ ์ฝ๋ค. ์ด๋ฏธ ํ ์ ์ฒด๊ฐ ์ ๊ทผ ๊ฐ๋ฅํ ํ์ผ์์คํ ์ด ์์ผ๋ฉด ์ ์ฅ์๋ฅผ ์์ฃผ ์ฝ๊ฒ ๊ตฌ์ฑํ ์ ์๋ค. ๋๋ ํ ๋ฆฌ๋ฅผ ๊ณต์ ํ๋ฏ์ด ๋๋ฃ๊ฐ ๋ชจ๋ ์ฝ๊ณ ์ธ ์ ์๋ ๊ณต์ ๋๋ ํ ๋ฆฌ์ Bare ์ ์ฅ์๋ฅผ ๋ง๋ ๋ค. ๋ค์ ์ ์ธ "์๋ฒ์ Git ์ค์นํ๊ธฐ"์์ Bare ์ ์ฅ์๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณผ ๊ฒ์ด๋ค.
๋ํ, ๋๋ฃ๊ฐ ์์
ํ๋ ์ ์ฅ์์์ ํ ์ผ์ ๋ฐ๋ก ๊ฐ์ ธ์ค๊ธฐ์๋ ์ข๋ค. ๋ง์ฝ ํจ๊ป ํ๋ก์ ํธ๋ฅผ ํ๋ ๋๋ฃ๊ฐ ์์ ์ด ํ ์ผ์ ๋น์ ์ด ํ์ธํด ์คฌ์ผ๋ฉด ํ๋ค. ์ด๋ด ๋ ๊ทธ ๋๋ฃ๊ฐ ์๋ฒ์ Pushํ๊ณ ๋น์ ์ด ๋ค์ Pullํ ํ์์์ด git pull /home/john/project
๋ผ๋ ๋ช
๋ น์ด๋ฅผ ๋ฐ๋ก ์คํ์์ผ์ ๋งค์ฐ ์ฝ๊ฒ ๋๋ฃ์ ์ฝ๋๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
๋จ์
๋ค์ํ ์ํฉ์์ ์ ๊ทผํ ์ ์๋๋ก ๋๋ ํ ๋ฆฌ๋ฅผ ๊ณต์ ํ๋ ๊ฒ ์์ฒด๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ ต๋ค. ์ง์ ์์ ๋ Pushํ๋ ค๋ฉด ๋ฆฌ๋ชจํธ ์ ์ฅ์๊ฐ ์๋ ๋์คํฌ๋ฅผ ๋ง์ดํธํด์ผ ํ๋๋ฐ ์ด๊ฒ์ ๋ค๋ฅธ ํ๋กํ ์ฝ์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ๋ณด๋ค ๋๋ฆฌ๊ณ ์ด๋ ต๋ค.
๊ฒ๋ค๊ฐ ๋คํธ์ํฌ ํ์ผ์์คํ ์ ๋ง์ดํธํด์ ์ฌ์ฉํ๋ ์ค์ด๋ผ๋ฉด ๋ณ๋ก ๋น ๋ฅด์ง๋ ์๋ค. ๋ก์ปฌ ์ ์ฅ์๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฝ์ ์ ์์ ๋๋ง ๋น ๋ฅด๋ค. NFS์ ์๋ ์ ์ฅ์์ Git์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ณดํต ๊ฐ์ ์๋ฒ์ SSH๋ก ์ ๊ทผํ๋ ๊ฒ๋ณด๋ค ๋๋ฆฌ๋ค.
SSH ํ๋กํ ์ฝ
Git์ ๋ํ ํ๋กํ ์ฝ์ SSH์ด๋ค. ๋๋ถ๋ถ ์๋ฒ๋ SSH๋ก ์ ๊ทผํ ์ ์๋๋ก ์ค์ ๋ผ ์๋ค. ๋ญ, ์ค์ ๋ผ ์์ง ์๋๋ผ๋ ์ฝ๊ฒ ์ค์ ํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ SSH๋ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ ๊ทผ์ ์ฝ๊ฒ ํ ์ ์๋ ์ ์ผํ ๋คํธ์ํฌ ํ๋กํ ์ฝ์ด๋ค. ๋ค๋ฅธ ๋คํธ์ํฌ ํ๋กํ ์ฝ์ธ HTTP์ Git์ ์ผ๋ฐ์ ์ผ๋ก ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ๋ค. ๊ทธ๋์ ์ด๋ณด์(unwashed masses)๋ผ๊ณ ํด๋ ์ฐ๊ธฐ ๋ช ๋ น์ ์ด์ฉํ๋ ค๋ฉด SSH๊ฐ ํ์ํ๋ค. SSH๋ ๋ํ ์ธ์ฆ๋ ์ง์ํ๋ค. SSH๋ ๋ณดํต ์ ๋น์ฟผํฐ์ค ์ ์ด๋ฉด์๋, ์ฌ์ฉํ๊ธฐ๋, ์ค์นํ๊ธฐ๋ ์ฝ๋ค.
SSH๋ฅผ ํตํด Git ์ ์ฅ์๋ฅผ Cloneํ๋ ค๋ฉด ssh://
๋ก ์์ํ๋ URL์ ์ฌ์ฉํ๋ค:
์๋๋ฉด scp ๋ช ๋ น์ด์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค. ์ด๊ฒ ์กฐ๊ธ ๋ ์งง๋ค:
์ฌ์ฉ์ ๊ณ์ ์ ์๋ตํ ์๋ ์๋๋ฐ ๊ณ์ ์ ์๋ตํ๋ฉด Git์ ํ์ฌ ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ๊ณ์ ์ ์ฌ์ฉํ๋ค.
์ฅ์
SSH๋ ์ฅ์ ์ด ๋งค์ฐ ๋ง์ ํ๋กํ ์ฝ์ด๋ค. ์ฒซ์งธ, ๋๊ฐ ๋ฆฌ๋ชจํธ์์ ์ ์ฅ์์ ์ ๊ทผํ๋์ง ์๊ณ ์ถ๋ค๋ฉด SSH๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ๋์งธ, SSH๋ ์๋์ ์ผ๋ก ์ค์ ํ๊ธฐ ์ฝ๋ค. SSH ๋ฐ๋ชฌ์ ์ ๋ง ํํ๋ค. ๊ฑฐ์ ๋ชจ๋ ๋คํธ์ํฌ ๊ด๋ฆฌ์๋ SSH ๋ฐ๋ชฌ์ ๋ค๋ฃจ์ด๋ณธ ๊ฒฝํ์ ๊ฐ์ง๊ณ ์์๊ฒ์ด๊ณ , ๋๋ถ๋ถ์ OS ๋ฐฐํฌํ์๋ SSH ๋ฐ๋ชฌ๊ณผ ๊ด๋ฆฌ๋๊ตฌ๊ฐ ๋ค์ด ์๋ค. ์ ์งธ, SSH๋ฅผ ํตํด ์ ๊ทผํ๋ฉด ๋ณด์์ ์์ ํ๋ค. ๋ชจ๋ ๋ฐ์ดํฐ๋ ์ํธํ๋์ด ์ธ์ฆ๋ ์ํ๋ก ์ ์ก๋๋ค. ๋ง์ง๋ง์ผ๋ก SSH๋ ์ ์ก ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ฅํ ์์ถํ๊ธฐ ๋๋ฌธ์ ํจ์จ์ ์ด๋ค.
๋จ์
SSH์ ๋จ์ ์ ์ต๋ช ์ผ๋ก ์ ๊ทผํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์ฌ์ง์ด ์ฝ๊ธฐ ์ ์ฉ์ธ ๊ฒฝ์ฐ์๋ ์ต๋ช ์ผ๋ก ์์คํ ์ ์ ๊ทผํ ์ ์๋ค. ํ์ฌ์์๋ง ์ฌ์ฉํ ๊ฒ์ด๋ผ๋ฉด SSH๊ฐ ๊ฐ์ฅ ์ ํฉํ ํ๋กํ ์ฝ์ผ ๊ฒ์ด์ง๋ง ์คํ์์ค ํ๋ก์ ํธ๋ SSH๋ง์ผ๋ก๋ ๋ถ์กฑํ๋ค. ๋ง์ฝ ์ฌ๋๋ค์ด ํ๋ก์ ํธ์ ์ต๋ช ์ผ๋ก ์ ๊ทผํ ์ ์๊ฒ ํ๋ ค๋ฉด, ์์ ์ด Pushํ ๋ ์ฌ์ฉํ SSH๋ฅผ ์ค์นํ๋ ๊ฒ๊ณผ ๋ณ๊ฐ๋ก ๋ค๋ฅธ ์ฌ๋๋ค์ด Pullํ ๋ ์ฌ์ฉํ ๋ค๋ฅธ ํ๋กํ ์ฝ์ ์ถ๊ฐํด์ผ ํ๋ค.
Git ํ๋กํ ์ฝ
Git ํ๋กํ ์ฝ์ Git์ ํฌํจ๋ ๋ฐ๋ชฌ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. ํฌํธ๋ 9418์ด๋ฉฐ SSH ํ๋กํ ์ฝ๊ณผ ๋น์ทํ ์๋น์ค๋ฅผ ์ ๊ณตํ์ง๋ง, ์ธ์ฆ ๋ฉ์ปค๋์ฆ์ด ์๋ค. ์ ์ฅ์์ git-export-daemon-ok ํ์ผ์ ๋ง๋ค๋ฉด Git ํ๋กํ ์ฝ๋ก ์๋น์คํ ์ ์์ง๋ง, ๋ณด์์ ์๋ค. ์ด ํ์ผ์ด ์๋ ์ ์ฅ์๋ Git ํ๋กํ ์ฝ๋ก ์๋น์คํ ์ ์๋ค. ์ด ์ ์ฅ์๋ ๋๊ตฌ๋ Cloneํ ์ ์๊ฑฐ๋ ์๋ฌด๋ Cloneํ ์ ์๊ฑฐ๋ ๋ ์ค์ ํ๋๋ง ์ ํํ ์ ์๋ค. ๊ทธ๋์ ์ด ํ๋กํ ์ฝ๋ก๋ Push๋ฅผ ๊ฐ๋ฅํ๊ฒ ์ค์ ํ ์ ์๋ค. ์๋ฐํ ๋งํด์ Pushํ ์ ์๋๋ก ์ค์ ํ ์ ์์ง๋ง, ์ธ์ฆํ๋๋ก ํ ์ ์๋ค. ๊ทธ๋ฌ๋๊น ๋น์ ์ด Pushํ ์ ์์ผ๋ฉด ์ด ํ๋ก์ ํธ์ URL์ ์๋ ์ฌ๋์ ๋๊ตฌ๋ Pushํ ์ ์๋ค. ๊ทธ๋ฅ ์ด๋ฐ ๊ฒ๋ ์์ง๋ง ์ ์ ์ด๋ค๊ณ ์๊ณ ์์ผ๋ฉด ๋๋ค.
์ฅ์
Git ํ๋กํ ์ฝ์ ์ ์ก์๋๊ฐ ๊ฐ์ฅ ๋น ๋ฅด๋ค. ์ ์ก๋์ด ๋ง์ ๊ณต๊ฐ ํ๋ก์ ํธ๋ ๋ณ๋์ ์ธ์ฆ์ด ํ์ ์๊ณ ์ฝ๊ธฐ๋ง ํ์ฉํ๋ ํ๋ก์ ํธ๋ฅผ ์๋น์คํ ๋ ์ ์ฉํ๋ค. ์ํธํ์ ์ธ์ฆ์ ๋นผ๋ฉด SSH ํ๋กํ ์ฝ๊ณผ ์ ์ก ๋ฉ์ปค๋์ฆ์ด ๋ณ๋ฐ ๋ค๋ฅด์ง ์๋ค.
๋จ์
Git ํ๋กํ ์ฝ์ ์ธ์ฆ ๋ฉ์ปค๋์ฆ์ด ์๋๊ฒ ๋จ์ ์ด๋ค. Git ํ๋กํ ์ฝ๋ง ์ฌ์ฉํ๋ ํ๋ก์ ํธ๋ ๋ฐ๋์งํ์ง ๋ชปํ๋ค. ์ผ๋ฐ์ ์ผ๋ก SSH ํ๋กํ ์ฝ๊ณผ ํจ๊ป ์ฌ์ฉํ๋ค. ์์์ ๊ฐ๋ฐ์๋ง Pushํ ์ ์๊ณ ๋๋ค์ ์ฌ๋์ git://
์ ์ฌ์ฉํ์ฌ ์ฝ์ ์๋ง ์๊ฒ ํ๋ค. ์ด์ฉ๋ฉด ๊ฐ์ฅ ์ค์นํ๊ธฐ ์ด๋ ค์ด ๋ฐฉ๋ฒ์ผ ์๋ ์๋ค. ๋ณ๋์ ๋ฐ๋ชฌ์ด ํ์ํ๊ณ ํ๋ก์ ํธ์ ๋ง๊ฒ ์ค์ ํด์ผ ํ๋ค. ์ด ์ฅ์ Gitosis ์ ์์ ์ค์ ํ๋ ๋ฒ์ ์ดํด๋ณผ ๊ฒ์ด๋ค. ์์์ ์๋ ์ ์๋๋ก xinetd ๊ฐ์ ๊ฒ๋ ์ค์ ํด์ผ ํ๊ณ ๋ฐฉํ๋ฒฝ์ ํต๊ณผํ ์ ์๋๋ก 9418 ํฌํธ๋ ์ด์ด์ผ ํ๋ค. ์ด ํฌํธ๋ ์ผ๋ฐ์ ์ผ๋ก ํ์ฌ๋ค์ด ํ์ฉํ๋ ํ์ค ํฌํธ๊ฐ ์๋๋ค. ๊ท๋ชจ๊ฐ ํฐ ํ์ฌ๋ผ๋ฉด ๋น์ฐํ ๋ฐฉํ๋ฒฝ์์ ์ด ํฌํธ๋ฅผ ๋ง์ ๋๋๋ค.
HTTP/S ํ๋กํ ์ฝ
๋ง์ง๋ง์ผ๋ก, HTTP ํ๋กํ ์ฝ์ด ์๋ค. HTTP์ HTTPS ํ๋กํ ์ฝ์ ๋ฏธํ์ ์ค์ ์ด ๊ฐ๋จํ๋ค๋ ์ ์ด๋ค. HTTP ๋ํ๋จผํธ ๋ฃจํธ ๋ฐ์ Bare ์ ์ฅ์๋ฅผ ๋๊ณ post-update ํ ์ ์ค์ ํ๋ ๊ฒ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ํด์ผ ํ๋ ์ผ์ ์ ๋ถ๋ค(_7์ฅ_์์ Git ํ ์ ๋ํด ์์ธํ ๋ค๋ฃฐ ๊ฒ์ด๋ค). ์ ์ฅ์๊ฐ ์๋ ์น ์๋ฒ์ ์ ๊ทผํ ์ ์๋ค๋ฉด ๊ทธ ์ ์ฅ์๋ฅผ Cloneํ ์๋ ์๋ค. HTTP๋ฅผ ํตํด์ ์ ์ฅ์๋ฅผ ์ฝ์ ์ ์๊ฒ ํ๋ ค๋ฉด ์๋์ ๊ฐ์ด ํ๋ค:
post-update ํ
์ Git์ ํฌํจ๋์ด ์์ผ๋ฉฐ git update-server-info
๋ผ๋ ๋ช
๋ น์ด๋ฅผ ์คํ์ํจ๋ค. ์ด ๋ช
๋ น์ด๋ HTTP๋ก Fetch์ Clone ๋ช
๋ น์ด ์ ๋์ํ๊ฒ ํ๋ค. SSH๋ฅผ ํตํด์ ์ ์ฅ์์ Pushํ ๋ ์คํ๋๋ฉฐ, ์ฌ๋๋ค์ ์๋์ ๊ฐ์ด Cloneํ๋ค:
์ฌ๊ธฐ์๋ Apache ์๋ฒ๊ฐ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๋ /var/www/htdocs
์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ๋ก ์ฌ์ฉํ์ง๋ง ๋ค๋ฅธ ์น ์๋ฒ๋ฅผ ์ฌ์ฉํด๋ ๋๋ค. ๋จ์ํ Bare ์ ์ฅ์๋ฅผ HTTP ๋ฌธ์ ๋ฃจํธ์ ๋ฃ์ผ๋ฉด ๋๋ค. Git ๋ฐ์ดํฐ๋ ์ผ๋ฐ์ ์ธ ์ ์ ํ์ผ์ฒ๋ผ ์ทจ๊ธ๋๋ค(_9์ฅ_์์ ์ ํํ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง ๋ค๋ฃฐ ๊ฒ์ด๋ค).
HTTP๋ฅผ ํตํด์ Pushํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค. ๋จ์ง ์ด ๋ฐฉ๋ฒ์ ์ ์ฌ์ฉํ์ง ์๋ WebDAV ํ๊ฒฝ์ ์๋ฒฝํ๊ฒ ๊ตฌ์ถํด์ผ ํ๋ค. ์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด ์ฑ
์์๋ ๋ค๋ฃจ์ง ์๋๋ค. HTTP ํ๋กํ ์ฝ๋ก Pushํ๊ณ ์ถ์ผ๋ฉด http://www.kernel.org/pub/software/scm/git/docs/howto/setup-git-server-over-http.txt
์ ์ฝ๊ณ ์ ์ฅ์๋ฅผ ๋ง๋ค๋ฉด ๋๋ค. HTTP๋ฅผ ํตํด์ Pushํ๋ ๋ฐฉ๋ฒ์ ์ข์ ์ ์ WebDAV ์๋ฒ๋ฅผ ์๋ฌด๊ฑฐ๋ ๊ณจ๋ผ ์ธ ์ ์๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋์ WebDAV๋ฅผ ์ง์ํ๋ ์น ํธ์คํ
์
์ฒด๋ฅผ ์ด์ฉํ๋ฉด ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.
์ฅ์
HTTP ํ๋กํ ์ฝ์ ์ค์ ํ๊ธฐ ์ฝ๋ค๋ ๊ฒ์ด ์ฅ์ ์ด๋ค. ๋ช ๊ฐ์ ํ์ ๋ช ๋ น์ด๋ง ์คํํ๋ฉด ์ธ๊ณ ์ด๋์์๋ ๋น์ ์ ์ ์ฅ์์ ์ ๊ทผํ ์ ์๊ฒ ๋ง๋ค ์ ์๋ค. ์ด๋ ๊ฒ ํ๋๋ฐ ๋ช ๋ถ์ด๋ฉด ์ถฉ๋ถํ๋ค. HTTP ํ๋กํ ์ฝ์ ์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ๋ง์ด ์ก์๋จน์ง๋ ์๋๋ค. ๋ณดํต์ ์ ์ HTTP ์๋ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ๊ธฐ ๋๋ฌธ์ ํํ Apache ์๋ฒ๋ก ์ด๋น ์์ฒ ๊ฐ์ ํ์ผ์ ์ฒ๋ฆฌํ ์ ์๋ค. ์์ ์๋ฒ๋ก๋ ์ถฉ๋ถํ ๊ฐ๋นํ ์ ์๋ค.
๋ HTTPS๋ฅผ ์ฌ์ฉํด์ ์๋น์คํ ์๋ ์๊ธฐ ๋๋ฌธ์ ์ ์กํ๋ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋ผ์ด์ธํธ๊ฐ ์๋ช ๋ SSL ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๊ฒ ํ ์๋ ์๋ค. ์ด๋ ๊ฒ ํ๋๋ผ๋ SSH ๊ณต๊ฐํค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์๋ณด๋ค ์ฝ๋ค. ์๋ช ํ SSL ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๋์ ๋๋ ์๊ณ ๋จ์ํ HTTPS์์์ HTTP๊ธฐ๋ฐ ์ธ์ฆ์ ์ฌ์ฉํ๋ ๊ฒ ๋์ ๋๋ ์๋ค.
HTTP๋ ๋งค์ฐ ๋ณดํธ์ ์ธ ํ๋กํ ์ฝ์ด๋ผ์ ๊ฑฐ์ ๋ชจ๋ ํ์ฌ๊ฐ ํธ๋ํฝ์ด ๋ฐฉํ๋ฒฝ์ ํต๊ณผํ๋๋ก ํ์ฉํ๋ค๋ ์ฅ์ ๋ ์๋ค.
๋จ์
ํด๋ผ์ด์ธํธ์์๋ HTTP๊ฐ ์ข ๋นํจ์จ์ ์ด๋ค. ์ ์ฅ์์์ Fetchํ๊ฑฐ๋ Cloneํ ๋ ์ข ๋ ์ค๋ ๊ฑธ๋ฆฐ๋ค. ๋ค๋ฅธ ํ๋กํ ์ฝ์ ๋คํธ์ํฌ ์ค๋ฒํค๋๋ณด๋ค HTTP์ ์ค๋ฒํค๋๊ฐ ์ข ๋ ํฌ๋ค. ์ง๋ฅ์ ์ผ๋ก ์ ๋ง ํ์ํ ๋ฐ์ดํฐ๋ง ์ ์กํ์ง ์๊ธฐ ๋๋ฌธ์ HTTP ํ๋กํ ์ฝ์ ๋ฉ์ฒญํ ํ๋กํ ์ฝ(Dumb Protocol)์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค. ํจ์จ์ ์ผ๋ก ์ ์กํ๊ณ ์ ์๋ฒ๋ ์๋ฌด๊ฒ๋ ํ์ง ์๋๋ค. HTTP์ ๋ค๋ฅธ ํ๋กํ ์ฝ์ ์ฑ๋ฅ ์ฐจ์ด๋ _9์ฅ_์์ ์์ธํ ์ค๋ช ํ๋ค.
์๋ฒ์ Git ์ค์นํ๊ธฐ
์ด๋ค ์๋ฒ๋ฅผ ์ค์นํ๋๋ผ๋ ์ผ๋จ ์ ์ฅ์๋ฅผ Bare ์ ์ฅ์๋ก ๋ง๋ค์ด์ผ ํ๋ค. ๋ค์ ๋งํ์ง๋ง, Bare ์ ์ฅ์๋ ์ํน ๋๋ ํ ๋ฆฌ๊ฐ ์๋ ์ ์ฅ์์ด๋ค. --bare
์ต์
์ ์ฃผ๊ณ Cloneํ๋ฉด ์๋ก์ด Bare ์ ์ฅ์๊ฐ ๋ง๋ค์ด์ง๋ค. Bare ์ ์ฅ์ ๋๋ ํ ๋ฆฌ๋ ๊ด๋ก์ ๋ฐ๋ผ. git ํ์ฅ์๋ก ๋๋๋ค:
์ด ๋ช
๋ น์ด ์ถ๋ ฅํ๋ ๋ฉ์์ง๊ฐ ์กฐ๊ธ ์ด์ํด๋ณด์ผ ์๋ ์๋ค. ์ฌ์ค git clone
๋ช
๋ น์ git init
์ ํ๊ณ ๋์ git fetch
๋ฅผ ์คํํ๋ค. ๊ทธ๋ฐ๋ฐ ๋น ๋๋ ํ ๋ฆฌ๋ฐ์ ๋ง๋ค์ง ์๋ git init
๋ช
๋ น์ ๋ฉ์์ง๋ง ๋ณด์ฌ์ค๋ค. ๊ฐ์ฒด ์ ์ก์ ๊ด๋ จ๋ ๋ฉ์์ง๋ ์๋ฌด๊ฒ๋ ๋ณด์ฌ์ฃผ์ง ์๋๋ค. ์ ์ก ๋ฉ์์ง๋ฅผ ๋ณด์ฌ์ฃผ์ง ์์ง๋ง my_project.git
๋๋ ํ ๋ฆฌ๋ฅผ ๋ณด๋ฉด Git ๋ฐ์ดํฐ๊ฐ ๋ค์ด ์๋ค.
์๋์ ๊ฐ์ด ์คํํ ๊ฒ๊ณผ ๋น์ทํ๋ค:
๋ฌผ๋ก ์ค์ ์์ ๋ฏธ์ธํ ์ฐจ์ด๊ฐ ์์ง๋ง, ์ ์ฅ์์ ๋ด์ฉ๋ง ๊ณ ๋ คํ๋ค๋ฉด ๊ฐ๋ค๊ณ ๋ณผ ์ ์๋ค. ์ํน ๋๋ ํ ๋ฆฌ๊ฐ ์๋ Git ์ ์ฅ์์ธ ๋ฐ๋ค๊ฐ ๋ณ๋์ ๋๋ ํ ๋ฆฌ๋ ํ๋ ๋ง๋ค์๋ค๋ ์ ์์๋ ๊ฐ๋ค.
์๋ฒ์ Bare ์ ์ฅ์ ๋ฃ๊ธฐ
Bare ์ ์ฅ์๋ ์ด์ ๋ง๋ค์์ผ๋๊น ์๋ฒ์ ๋ฃ๊ณ ํ๋กํ ์ฝ์ ์ค์ ํ๋ค. git.example.com
๋ผ๋ ์ด๋ฆ์ ์๋ฒ๋ฅผ ํ๋ ์ค๋นํ์. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์๋ฒ์ SSH๋ก ์ ์ํ ์ ์๊ฒ ํ๊ณ /opt/git
์ Git ์ ์ฅ์๋ฅผ ๋ง๋ ๋ค. ์๋์ ๊ฐ์ด Bare ์ ์ฅ์๋ฅผ ๋ณต์ฌํ๋ค:
์ด์ ๋ค๋ฅธ ์ฌ์ฉ์๋ค์ SSH๋ก ์๋ฒ์ ์ ๊ทผํด์ ์ ์ฅ์๋ฅผ Cloneํ ์ ์๋ค. ์ฌ์ฉ์๋ /opt/git
๋๋ ํ ๋ฆฌ์ ์ฝ๊ธฐ ๊ถํ์ด ์์ด์ผ ํ๋ค:
์ด ์๋ฒ์ SSH๋ก ์ ๊ทผํ ์ ์๋ ์ฌ์ฉ์๊ฐ /opt/git/my_project.git
๋๋ ํ ๋ฆฌ์ ์ฐ๊ธฐ ๊ถํ๊น์ง ๊ฐ์ง๊ณ ์์ผ๋ฉด ๋ฐ๋ก Pushํ ์ ์๋ค. git init
๋ช
๋ น์ --shared
์ต์
์ ์ถ๊ฐํ๋ฉด Git์ ์๋์ผ๋ก ๊ทธ๋ฃน ์ฐ๊ธฐ ๊ถํ์ ์ถ๊ฐํ๋ค:
Git ์ ์ฅ์๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ผ๋ง๋ ์ฌ์ด์ง ์ดํด๋ณด์๋ค. Bare ์ ์ฅ์๋ฅผ ๋ง๋ค์ด SSH๋ก ์ ๊ทผํ ์ ์๋ ์๋ฒ์ ์ฌ๋ฆฌ๋ฉด ๋๋ฃ์ ํจ๊ป ์ผํ ์ค๋น๊ฐ ๋๋๋ค.
๊ทธ๋ฌ๋๊น Git ์๋ฒ๋ฅผ ๊ตฌ์ถํ๋๋ฐ ์ฌ๋์ด ํ ์ผ์ ์ ๋ง ๋ณ๋ก ์๋ค. SSH๋ก ์ ์ํ ์ ์๋๋ก ์๋ฒ์ ๊ณ์ ์ ๋ง๋ค๊ณ Bare ์ ์ฅ์๋ฅผ ์ฌ๋๋ค์ด ์ฝ๊ณ ์ธ ์ ์๋ ๊ณณ์ ๋ฃ์ด ๋๊ธฐ๋ง ํ๋ฉด ๋๋ค. ๋ค๋ฅธ ๊ฒ์ ์๋ฌด๊ฒ๋ ํ์ ์๋ค.
๋ค์ ์ ์์๋ ์ข ๋ ์ ๊ตํ๊ฒ ์ค์ ํ๋ ๋ฒ์ ์ดํด๋ณธ๋ค. ์ฌ์ฉ์์๊ฒ ๊ณ์ ์ ๋ง๋ค์ด ์ฃผ๋ ๋ฒ, ์ ์ฅ์๋ฅผ ์ฝ๊ณ ์ธ ์ ์๊ฒ ํ๋ ๋ฒ, Web UI๋ฅผ ์ค์ ํ๋ ๋ฒ, Gitosis๋ฅผ ์ฌ์ฉํ๋ ๋ฒ, ๋ฑ๋ฑ์ ์ฌ๊ธฐ์์ ์ค๋ช ํ์ง ์๋๋ค. ๊ผญ ๊ธฐ์ตํด์ผ ํ ๊ฒ์ ๋๋ฃ์ ํจ๊ป ๊ฐ๋ฐํ ๋ ๊ผญ ํ์ํ ๊ฒ์ด SSH ์๋ฒ์ Bare ์ ์ฅ์๋ฟ์ด๋ผ๋ ๊ฒ์ด๋ค.
๋ฐ๋ก ์ค์ ํ๊ธฐ
๋ง์ฝ ์ฐฝ์ ์ ์ค๋นํ๊ณ ์๊ฑฐ๋ ํ์ฌ์์ Git์ ๋ง ๋์ ํ๋ ค๊ณ ํ ๋์ฒ๋ผ ์ฌ์ฉํ ๊ฐ๋ฐ์์ ์๊ฐ ๋ง์ง ์์ ๋์๋ ์ค์ ํ ๊ฒ ๋ณ๋ก ์๋ค. Git ์๋ฒ ์ค์ ์์ ์ฌ์ฉ์ ๊ด๋ฆฌ๊ฐ ๊ฐ์ฅ ๊ณจ์น ์ํ๋ค. ์ฌ๋์ด ๋ง์ผ๋ฉด ์ด๋ค ์ฌ์ฉ์๋ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ๊ฒ ํ๊ณ ์ด๋ค ์ฌ์ฉ์๋ ์ฝ๊ณ ์ฐ๊ธฐ ๋ ๋ค ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฒ์ด ์ข ๊น๋ค๋กญ๋ค.
SSH ์ ๊ทผ
๋ง์ฝ ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ SSH๋ก ์ ์ํ ์ ์๋ ์๋ฒ๊ฐ ์์ผ๋ฉด ๋๋ฌด ์ฝ๊ฒ ์ ์ฅ์๋ฅผ ๋ง๋ค ์ ์๋ค. ์์ ๋งํ๋ฏ์ด ํ ์ผ์ด ๋ณ๋ก ์๋ค. ์ ์ฅ์์ ๊ถํ์ ๊ผผ๊ผผํ๊ฒ ๊ด๋ฆฌํด์ผ ํ๋ฉด ๊ทธ๋ฅ ์ด์์ฒด์ ์ ํ์ผ์์คํ ๊ถํ๊ด๋ฆฌ๋ฅผ ์ด์ฉํ๋ค. ๋๋ฃ๊ฐ ์ ์ฅ์์ ์ฐ๊ธฐ ์ ๊ทผ์ ํด์ผ ํ๋ ๋ฐ ์์ง SSH๋ก ์ ์ํ ์ ์๋ ์๋ฒ๊ฐ ์์ผ๋ฉด ํ๋ ๋ง๋ จํด์ผ ํ๋ค. ์๋ง ๋ ์์๊ฒ ์๋ฒ๊ฐ ์๋ค๋ฉด ๊ทธ ์๋ฒ์๋ ์ด๋ฏธ SSH ์๋ฒ๊ฐ ์ค์น๋ผ ์์ด์ ์ด๋ฏธ SSH๋ก ์ ์ํ๊ณ ์์ ๊ฒ์ด๋ค.
๋๋ฃ๊ฐ ์ ์ํ๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ๋ช ๊ฐ์ง๊ฐ ์๋ค. ์ฒซ์งธ๋ก ๋ชจ๋์๊ฒ ๊ณ์ ์ ๋ง๋ค์ด ์ฃผ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ์ด ๋ฐฉ๋ฒ์ด ์ ์ผ ๋จ์ํ์ง๋ง ๋ค์ ๊ท์ฐฎ์ ๋ฐฉ๋ฒ์ด๋ค. ํ์๋ง๋ค adduser๋ฅผ ์คํ์ํค๊ณ ์์ ์ํธ๋ฅผ ๋ถ์ฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ณดํต ์ด ๋ฐฉ๋ฒ์ ์ฐ๊ณ ์ถ์ด ํ์ง ์๋๋ค.
๋์งธ๋ก ์๋ฒ๋ง๋ค git์ด๋ผ๋ ๊ณ์ ์ ํ๋์ฉ ๋ง๋๋ ๋ฐฉ๋ฒ์ด ์๋ค. ์ฐ๊ธฐ ๊ถํ์ด ํ์ํ ์ฌ์ฉ์์ SSH ๊ณต๊ฐํค๋ฅผ ๋ชจ๋ ๋ชจ์์ git ๊ณ์ ์ ~/.ssh/authorized_keys
ํ์ผ์ ๋ชจ๋ ํค๋ฅผ ์
๋ ฅํ๋ค. ๊ทธ๋ฌ๋ฉด ๋ชจ๋ git ๊ณ์ ์ผ๋ก ๊ทธ ์๋ฒ์ ์ ์ํ ์ ์๋ค. ์ด git ๊ณ์ ์ ์ปค๋ฐ ๋ฐ์ดํฐ์๋ ์๋ฌด๋ฐ ์ํฅ์ ์ฃผ์ง ์๋๋ค. ๋ค์ ๋งํด์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉํ SSH ๊ณ์ ๊ณผ ์ปค๋ฐ์ ์ ์ฅ๋๋ ์ฌ์ฉ์๋ ์๋ฌด ์๊ด์๋ค.
์ด๋ฏธ LDAP ์๋ฒ ๊ฐ์ ์ค์์ง์ค์ ์ธ์ฆ ์์ค๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉด SSH ์๋ฒ๊ฐ ํด๋น ์ธ์ฆ์ ์ด์ฉํ๋๋ก ํ ์๋ ์๋ค. SSH ์ธ์ฆ ๋ฉ์ปค๋์ฆ ์ค ์๋ฌด๊ฑฐ๋ ํ๋ ์ด์ฉํ ์ ์์ผ๋ฉด ๊ทธ ์๋ฒ์ ์ ์์ด ๊ฐ๋ฅํ๋ค.
SSH ๊ณต๊ฐํค ๋ง๋ค๊ธฐ
์ด๋ฏธ ๋งํ๋ฏ์ด ๋ง์ Git ์๋ฒ๋ค์ SSH ๊ณต๊ฐํค๋ก ์ธ์ฆํ๋ค. ๊ณต๊ฐํค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ผ๋จ ๊ณต๊ฐํค๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. ๊ณต๊ฐํค๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ ์ด์์ฒด์ ๊ฐ ๋น์ทํ๋ค. ๋จผ์ ํค๊ฐ ์๋์ง๋ถํฐ ํ์ธํ์. ์ฌ์ฉ์์ SSH ํค๋ค์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ์์ ~/.ssh
๋๋ ํ ๋ฆฌ์ ์ ์ฅํ๋ค. ๊ทธ๋์ ๋ง์ฝ ๋๋ ํ ๋ฆฌ์ ํ์ผ์ ์ดํด๋ณด๋ฉด ๊ณต๊ฐํค๊ฐ ์๋์ง ํ์ธํ ์ ์๋ค:
something, something.pub์ด๋ผ๋ ํ์์ผ๋ก ๋ ํ์ผ์ ๋ณผ ์ ์๋ค. something์ ๋ณดํต id_dsa
๋ id_rsa
๋ผ๊ณ ๋ผ ์๋ค. ๊ทธ์ค .pub
ํ์ผ์ด ๊ณต๊ฐํค์ด๊ณ ๋ค๋ฅธ ํ์ผ์ ๊ฐ์ธํค์ด๋ค. ๋ง์ฝ ์ด ํ์ผ์ด ์๊ฑฐ๋ .ssh
๋๋ ํ ๋ฆฌ๋ ์์ผ๋ฉด ssh-keygen
์ด๋ผ๋ ํ๋ก๊ทธ๋จ์ผ๋ก ํค๋ฅผ ์์ฑํด์ผ ํ๋ค. ssh-keygen
ํ๋ก๊ทธ๋จ์ ๋ฆฌ๋
์ค๋ Mac์ SSH ํจํค์ง์ ํฌํจ๋ผ ์๊ณ ์๋๋ MSysGit ํจํค์ง ์์ ๋ค์ด ์๋ค:
๋จผ์ ํค๋ฅผ ์ด๋์ ์ ์ฅํ ์ง ๊ฒฝ๋ก๋ฅผ(.ssh/id_rsa
) ์
๋ ฅํ๊ณ ์ํธ๋ฅผ ๋ ๋ฒ ์
๋ ฅํ๋ค. ์ด๋ ์ํธ๋ฅผ ๋น์๋๋ฉด ํค๋ฅผ ์ฌ์ฉํ ๋ ์ํธ๋ฅผ ๋ฌป์ง ์๋๋ค.
์ฌ์ฉ์๋ ๊ทธ ๋ค์์ ์์ ์ ๊ณต๊ฐ๊ธฐ๋ฅผ Git ์๋ฒ ๊ด๋ฆฌ์์๊ฒ ๋ณด๋ด์ผ ํ๋ค. ์ฌ์ฉ์๋ .pub
ํ์ผ์ ๋ด์ฉ์ ๋ณต์ฌํ์ฌ ๋ฉ์ผ์ ๋ณด๋ด๊ธฐ๋ง ํ๋ฉด ๋๋ค. ๊ณต๊ฐํค๋ ์๋์ ๊ฐ์ด ์๊ฒผ๋ค:
๋ค์ํ ์ด์ ์ฒด์ ์์ SSH ํค๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ด ๊ถ๊ธํ๋ฉด http://github.com/guides/providing-your-ssh-key
์ ์๋ Github ์ค๋ช
์๋ฅผ ์ฐพ์๋ณด๋ ๊ฒ ์ข๋ค.
์๋ฒ์ ์ค์ ํ๊ธฐ
์๋ฒ์ ์ค์ ํ๋ ์ผ์ ์ดํด๋ณด์. ์ผ๋จ Ubuntu๊ฐ์ ํ์ค ๋ฆฌ๋
์ค ๋ฐฐํฌํ์ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํ๋ค. ์ฌ์ฉ์๋ ์๋ง๋ authorized_keys
ํ์ผ๋ก ์ธ์ฆํ ๊ฒ์ด๋ค. ๋จผ์ git
๊ณ์ ์ ๋ง๋ค๊ณ ์ฌ์ฉ์ ํ ๋๋ ํ ๋ฆฌ์ .ssh ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋ ๋ค:
authorized_keys
ํ์ผ์ SSH ๊ณต๊ฐํค๋ฅผ ์ถ๊ฐํด์ผ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ ์ ์๋ค. ์ถ๊ฐํ๊ธฐ ์ ์ ์ด๋ฏธ ์ด๋ฉ์ผ๋ก ๊ณต๊ฐํค๋ฅผ ๋ช ๊ฐ ๋ฐ์์ ๊ฐ์ง๊ณ ์๋ค๊ณ ๊ฐ์ ํ์. ๊ณต๊ฐํค๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๋์ง ๋ค์ ํ๋ฒ ํ์ธํ๋ค:
authorized_keys
ํ์ผ์ ์ถ๊ฐํ๋ค:
--bare
์ต์
์ ์ฃผ๊ณ git init
์ ์คํํด์ ์ํน ๋๋ ํ ๋ฆฌ๊ฐ ์๋ ๋น ์ ์ฅ์๋ฅผ ํ๋ ๋ง๋ ๋ค:
์ด์ John์จ, Josie์จ, Jessica์จ๋ ์ด ์ ์ฅ์๋ฅผ ๋ฆฌ๋ชจํธ ์ ์ฅ์๋ก ๋ฑ๋กํ๋ฉด ๋ธ๋์น๋ฅผ Pushํ ์ ์๋ค. ํ๋ก์ ํธ๋ง๋ค ์ ์ด๋ ํ ๋ช
์ ์๋ฒ์ ์ ์ํ์ฌ Bare ์ ์ฅ์๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. git ๊ณ์ ๊ณผ ์ ์ฅ์๋ฅผ ๋ง๋ ์๋ฒ์ ํธ์คํธ ์ด๋ฆ์ด gitserver
๋ผ๊ณ ํ์. ๋ง์ฝ ์ด ์๋ฒ๊ฐ ๋ด๋ถ๋ง์ ์์ผ๋ฉด gitserver
๊ฐ ๊ทธ ์๋ฒ๋ฅผ ๊ฐ๋ฆฌํค๋๋ก DNS์ ์ค์ ํ๋ค. ๊ทธ๋ฌ๋ฉด ๋ช
๋ น์ ์๋์ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค:
์ด์ ์ด ํ๋ก์ ํธ๋ฅผ Cloneํ๊ณ ๋์ ์์ ํ๊ณ Pushํ๋ค:
๊ฐ๋ฐ์๋ค์ด ์ฝ๊ณ ์ธ ์ ์๋ Git ์๋ฒ๋ฅผ ๊ฐ๋จํ๊ฒ ๋ง๋ค์๋ค.
๊ทธ๋ฆฌ๊ณ git-shell
์ด๋ผ๋ ๊ฑธ ์ฌ์ฉํด์ ๋ณด์์ ๊ฐํํ ์ ์๋ค. ์ด ์๋ก git ๊ณ์ ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์๋ค์ด Git ๋ง๊ณ ๋ค๋ฅธ ๊ฒ์ ํ ์ ์๋๋ก ์ ํํ๋ ๊ฒ์ด๋ค. git ๊ณ์ ์ ๋ก๊ทธ์ธ ์์ ์ด๊ฒ์ผ๋ก ์ค์ ํ๋ฉด git
์ฌ์ฉ์๋ ์ผ๋ฐ์ ์ธ ์์ ์ฌ์ฉํ ์ ์๋ค. ํต์์ bash, csh ๋์ ์ git-shell
์ ๋ก๊ทธ์ธ ์๋ก ์ค์ ํ๊ธฐ๋ง ํ๋ฉด ๋๋ค. ์ด๊ฒ์ ํ๋ ค๋ฉด /etc/passwd
ํ์ผ์ ํธ์งํ๋ค:
๊ทธ๋ฆฌ๊ณ ์๋์ ๊ฐ์ ์ค์ ์ฐพ๋๋ค:
/bin/sh
๋ฅผ /usr/bin/git-shell
๋ก(which git-shell
๋ช
๋ น์ผ๋ก ์ด๋์ ์ค์น๋๋์ง ํ์ธํ๋๊ฒ ์ข๋ค) ๋ณ๊ฒฝํ๋ค:
์ด์ git
๊ณ์ ์ Git ์ ์ฅ์์ Pushํ๊ณ Pullํ๋ ๊ฒ๋ง ๊ฐ๋ฅํ๊ณ ์๋ฒ์ ์์๋ ์ ๊ทผํ ์ ์๋ค. ์ค์ ๋ก ๋ก๊ทธ์ธ์ ํด๋ณด๋ฉด ์๋์ ๊ฐ์ ๋ฉ์์ง๋ก ๋ก๊ทธ์ธ์ด ๊ฑฐ์ ๋๋ค:
๊ณต๊ฐํ๊ธฐ
์ต๋ช ์ ์ฌ์ฉ์์๊ฒ ์ฝ๊ธฐ ์ ๊ทผ์ ํ์ฉํ๊ณ ์ถ์ ๋๋ ์ด๋ป๊ฒ ํด์ผ ํ ๊น? ํ๋ก์ ํธ๋ฅผ ๋น๊ณต๊ฐ๊ฐ ์๋๋ผ ์คํ ์์ค ํ๋ก์ ํธ๋ก ๊ณต๊ฐํ๋ค๊ฑฐ๋ ์๋ ๋น๋ ์๋ฒ๋ CI(Continuous Integration) ์๋ฒ๊ฐ ๋ง์์ ๊ณ์ ๋ง๋ค ํ๋ํ๋ ์ค์ ํด์ผ ํ ์ ์๋ค. ์๋๋ฉด ๊ทธ๋ฅ ๋งค๋ฒ SSH ํค๋ฅผ ์์ฑํ๋ ๊ฒ ๊ท์ฐฎ์ ์๋ ์๋ค. ๊ทธ๋ฌ๋๊น ๊ทธ๋ฅ ๊ฐ๋จํ๊ฒ ์ต๋ช ์ ์ฌ์ฉ์๋ ์ฝ์ ์ ์๋๋ก ํ๊ณ ์ถ์ ๋๋ ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
๋ถ๋ช
์น ์๋ฒ๋ฅผ ์ค์นํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ด๋ค. ์ด ์ฅ์ ์ฒซ ๋ถ๋ถ์ ์ค๋ช
ํ๋ฏ์ด ์น ์๋ฒ๋ฅผ ์ค์นํ๊ณ Git ์ ์ฅ์๋ฅผ ๋ฌธ์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ ๋๊ณ post-update
ํ
์ ์ผ๊ธฐ๋ง ํ๋ฉด ๋๋ค. ๋จผ์ ์ค๋ช
ํ๋ ์์ ๋ฅผ ๋ฐ๋ผ ํด๋ณด์. /opt/git
๋๋ ํ ๋ฆฌ์ ์ ์ฅ์๊ฐ ์๊ณ ์๋ฒ์ Apache๊ฐ ์ค์น๋ผ ์๋ค๊ณ ๊ฐ์ ํ์. ์๋ฌด ์น ์๋ฒ๋ ๋ค ์ฌ์ฉํ ์ ์์ง๋ง, ์ด ์์ ์์๋ Apache๋ฅผ ์ฌ์ฉํ๋ค. ์ฌ๊ธฐ์์๋ ์ดํดํ๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ฏ๋ก ์์ฃผ ๊ธฐ๋ณธ์ ์ธ Apache ์ค์ ๋ง์ ๋ณด์ฌ์ค ๊ฒ์ด๋ค.
๋จผ์ ์ด ํ ์ ์ค์ ํด์ผ ํ๋ค:
post-update
ํ
์ ๋ฌด์จ ์ผ์ ํ ๊น? ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ๋ค:
SSH๋ฅผ ํตํด์ ์๋ฒ์ Pushํ๋ฉด Git์ ์ด ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ HTTP๋ฅผ ํตํด์๋ Fetchํ ์ ์๋๋ก ํ์ผ๋ฅผ ๊ฐฑ์ ํ๋ค.
๊ทธ๋ค์ Apache ์ค์ ์ VirtualHost ํญ๋ชฉ์ ์ถ๊ฐํ๋ค. ์ด ํญ๋ชฉ์์ ๋ฌธ์ ๋ฃจํธ๊ฐ Git ์ ์ฅ์์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ๊ฐ ๋๋๋ก ํ๋ค. ๊ทธ๋ฆฌ๊ณ *.gitserver
๋ก ์ ์ํ๋ ์ฌ๋๋ค์ด ๋ชจ๋ ์ด ์๋ฒ์ ์ ์ํ๋๋ก ํ๋ค. ์์ผ๋์นด๋๋ฅผ ์ด์ฉํ์ฌ VirtualHostํญ๋ชฉ์ ์๋์ ๊ฐ์ด ์ค์ ํ๋ค:
๊ทธ๋ฆฌ๊ณ Apache ์๋ฒ๋ www-data
๊ถํ์ผ๋ก CGI ์คํฌ๋ฆฝํธ๋ฅผ ์คํ์ํค๊ธฐ ๋๋ฌธ์ /opt/git
๋๋ ํ ๋ฆฌ์ ๊ทธ๋ฃน ์์ ๊ถํ์ www-data
๋ก ์์ ํด ์ฃผ์ด์ผ ์น ์๋ฒ๋ก ์ ๊ทผํ๋ ์ฌ์ฉ์๋ค์ด ์ฝ์ ์ ์๋ค.
Apache๋ฅผ ์ฌ์์ํ๋ฉด ์๋์ ๊ฐ์ URL๋ก ์ ์ฅ์๋ฅผ Cloneํ ์ ์๋ค:
์ด๋ ๊ฒ ์ฌ์ฉ์๋ค์ด HTTP๋ก ํ๋ก์ ํธ์ ์ ๊ทผํ๋๋ก ์ค์ ํ๋ ๋ฐ ๋ช ๋ถ๋ฐ์ ๊ฑธ๋ฆฌ์ง ์๋๋ค. ๊ทธ๋ฆฌ๊ณ Git ๋ฐ๋ชฌ์ผ๋ก๋ ๋๊ฐ์ด ์ธ์ฆ ์์ด ์ ์ํ๊ฒ ํ ์ ์๋ค. ํ๋ก์ธ์ค๋ฅผ ๋ฐ๋ชฌ์ผ๋ก ๋ง๋ค์ด์ผ ํ๋ค๋ ๋จ์ ์ด ์์ง๋ง ๊ฐ๋ฅํ๋ค. ์ด๊ฒ์ ๋ค์ ์ ์์ ์ดํด๋ณผ ๊ฒ์ด๋ค.
GitWeb
ํ๋ก์ ํธ ์ ์ฅ์๋ฅผ ๋จ์ํ ์ฝ๊ฑฐ๋ ์ฐ๋ ๊ฒ์ ๋ํ ์ค์ ์ ๋ค๋ค๋ค. ์ด์ ๋ ์น ๊ธฐ๋ฐ ์ธํฐํ์ด์ค๋ฅผ ์ค์ ํด๋ณด์. Git์๋ GitWeb์ด๋ผ๋ CGI ์คํฌ๋ฆฝํธ๋ฅผ ์ ๊ณตํด์ ์ฝ๊ฒ ์น์์ ์ ์ฅ์๋ฅผ ์กฐํํ๋๋ก ํ ์ ์๋ค. http://git.kernel.org
๊ฐ์ ์ฌ์ดํธ์์ GitWeb์ ๊ตฌ๊ฒฝํ ์ ์๋ค(๊ทธ๋ฆผ 4-1).
Git์ GitWeb์ ์ฝ๊ฒ ์ฌ์ฉํด ๋ณผ ์ ์๋๋ก ์๋ฒ๋ฅผ ์ ์ ๋์ฐ๋ ๋ช
๋ น์ ์ ๊ณตํ๋ค. ์์คํ
์ lighttpd
๋ webrick
๊ฐ์ ๊ฒฝ๋ ์น์๋ฒ๊ฐ ์ค์น๋ผ ์์ด์ผ ์ด ๋ช
๋ น์ ์ฌ์ฉํ ์ ์๋ค. ๋ฆฌ๋
์ค์์๋ lighttpd
๊ฐ ์ค์น๋ผ ์์ ํ๋ฅ ์ด ๋๊ณ ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ์์ ๊ทธ๋ฅ git instaweb
์ ์คํํ๋ฉด ๋ฐ๋ก ์คํ๋๋ค. Mac์ Leopard ๋ฒ์ ์ Ruby๊ฐ ๋ฏธ๋ฆฌ ์ค์น๋ผ ์๊ธฐ ๋๋ฌธ์ webrick
์ด ๋ ๋ซ๋ค. lighttpd์ด ์๋๋ผ๋ฉด ์๋์ ๊ฐ์ด --httpd
์ต์
์ ์ฌ์ฉํด์ผ ํ๋ค:
1234 ํฌํธ๋ก HTTPD ์๋ฒ๋ฅผ ์์ํ๊ณ ์ด ํ์ด์ง๋ฅผ ์ฌ๋ ์น๋ธ๋ผ์ฐ์ ๋ฅผ ์๋์ผ๋ก ์คํ์ํจ๋ค. ๊ฝค ํธ๋ฆฌํ๋ค. ํ์ํ ์ผ์ ๋ชจ๋ ๋ง์น๊ณ ๋์ ๊ฐ์ ๋ช
๋ น์ด์ --stop
์ต์
์ ์ถ๊ฐํ์ฌ ์๋ฒ๋ฅผ ์ค์งํ๋ค:
ํญ์ ์ ์๊ฐ๋ฅํ ์น ์ธํฐํ์ด์ค๋ฅผ ์ด์ํ๋ ค๋ฉด ๋จผ์ ์น์๋ฒ์ ์ด CGI ์คํฌ๋ฆฝํธ๋ฅผ ์ค์นํด์ผ ํ๋ค. apt
๋ yum
์ผ๋ก๋ gitweb
์ ์ค์นํ ์ ์์ง๋ง, ์ฌ๊ธฐ์์๋ ์๋์ผ๋ก ์ค์นํ๋ค. ๋จผ์ GitWeb์ด ํฌํจ๋ Git ์์ค ์ฝ๋๋ฅผ ๊ตฌํ ๋ค์ CGI ์คํฌ๋ฆฝํธ๋ฅผ ๋น๋ํ๋ค:
๋น๋ํ ๋ GITWEB_PROJECTROOT
๋ณ์๋ก Git ์ ์ฅ์์ ์์น๋ฅผ ์๋ ค์ค์ผ ํ๋ค. ์ด์ Apache๊ฐ ์ด ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋๋ก VirtualHost ํญ๋ชฉ์ ์ค์ ํ๋ค:
๋ค์ ๋งํด์ GitWeb์ CGI๋ฅผ ์ง์ํ๋ ์น์๋ฒ๋ผ๋ฉด ์๋ฌด๊ฑฐ๋ ์ฌ์ฉํ ์ ์๋ค. ์ด์ http://gitserver/
์ ์ ์ํ์ฌ ์จ๋ผ์ธ์ผ๋ก ์ ์ฅ์๋ฅผ ํ์ธํ ์ ์์ ๋ฟ๋ง ์๋๋ผ http://git.gitserver
๋ฅผ ํตํด์ HTTP ํ๋กํ ์ฝ๋ก ์ ์ฅ์๋ฅผ Cloneํ๊ณ Fetchํ ์ ์๋ค.
Gitosis
์ฒ์์๋ ๋ชจ๋ ์ฌ์ฉ์์ ๊ณต๊ฐํค๋ฅผ authorized_keys
์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ถํธํ์ง ์์ ๊ฒ์ด๋ค. ํ์ง๋ง, ์ฌ์ฉ์๊ฐ ์๋ฐฑ ๋ช
์ด ๋์ผ๋ฉด ๊ด๋ฆฌํ๊ธฐ๊ฐ ๋งค์ฐ ๊ณ ํต์ค๋ฝ๋ค. ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํ ๋๋ง๋ค ๋งค๋ฒ ์๋ฒ์ ์ ์ํ ์๋ ์๊ณ ๊ถํ ๊ด๋ฆฌ๋ ์๋๋ค. authorized_keys
์ ๋ฑ๋ก๋ ๋ชจ๋ ์ฌ์ฉ์๋ ๋๊ตฌ๋ ํ๋ก์ ํธ๋ฅผ ์ฝ๊ณ ์ธ ์ ์๋ค.
์ด ๋ฌธ์ ๋ ๋งค์ฐ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์๋ Gitosis๋ผ๋ ์ํํธ์จ์ด๋ก ํด๊ฒฐํ ์ ์๋ค. Gitosis๋ ๊ธฐ๋ณธ์ ์ผ๋ก authorized_keys
ํ์ผ์ ๊ด๋ฆฌํ๊ณ ์ ๊ทผ์ ์ด๋ฅผ ๋๋ ์คํฌ๋ฆฝํธ ํจํค์ง๋ค. ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํ๊ณ ๊ถํ์ ๊ด๋ฆฌํ๋ UI๊ฐ ์น ์ธํฐํ์ด์ค๊ฐ ์๋๋ผ ์ผ์ข
์ Git ์ ์ฅ์๋ผ๋ ์ ์ด ์ฌ๋ฏธ์๋ค. ํ๋ก์ ํธ ์ค์ ์ Pushํ๋ฉด ๊ทธ ์ค์ ์ด Gitosis์ ์ ์ฉ๋๋ค. ์ ๋น๋กญ๋ค!
Gitosis๋ฅผ ์ค์นํ๊ธฐ๊ฐ ์ฝ์ง๋ ์์ง๋ง ๊ทธ๋ ๋ค๊ณ ์ด๋ ต์ง๋ ์๋ค. Gitosis๋ ๋ฆฌ๋ ์ค์ ์ค์นํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ฝ๋ค. ์ฌ๊ธฐ์๋ Ubuntu 8.10 ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ค.
Gitosis๋ Python์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋จผ์ Python setuptools ํจํค์ง๋ฅผ ์ค์นํด์ผ ํ๋ค. Ubuntu์์๋ ์๋์ ๊ฐ์ด ์ค์นํ๋ค:
๊ทธ๋ฆฌ๊ณ Gitosis ํ๋ก์ ํธ ์ฌ์ดํธ์์ Gitosis๋ฅผ Cloneํ ํ ์ค์นํ๋ค:
Gitosis๊ฐ ์ค์น๋๋ฉด Gitosis๋ ์ ์ฅ์ ๋๋ ํ ๋ฆฌ๋ก /home/git
๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋ค. ์ด๋๋ก ์ฌ์ฉํด๋ ๊ด์ฐฎ์ง๋ง, ์ฐ๋ฆฌ์ ์ ์ฅ์๋ ์ด๋ฏธ /opt/git
์ ์๋ค. ๋ค์ ์ค์ ํ์ง ๋ง๊ณ ์๋์ ๊ฐ์ด ๊ฐ๋จํ๊ฒ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋ง๋ค์:
Gitosis๊ฐ ํค๋ค์ ๊ด๋ฆฌํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํ์ฌ ํ์ผ์ ์ญ์ ํ๊ณ ๋ค์ ์ถ๊ฐํด์ผ ํ๋ค. ์ด์ ๋ถํฐ๋ Gitosis๊ฐ authorized_keys
ํ์ผ์ ์๋์ผ๋ก ๊ด๋ฆฌํ ๊ฒ์ด๋ค. authorized_keys
ํ์ผ์ ๋ฐฑ์
ํด๋์:
๊ทธ๋ฆฌ๊ณ git
๊ณ์ ์ ์์ git-shell
๋ก ๋ณ๊ฒฝํ์๋ค๋ฉด ์๋๋๋ก ๋ณต์ํด์ผ ํ๋ค. Gitosis๊ฐ ๋์ ์ด ์ผ์ ๋งก์์ค ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ณต์ํด๋ ์ฌ๋๋ค์ ์ฌ์ ํ ๋ก๊ทธ์ธํ ์ ์๋ค. /etc/passwd
ํ์ผ์ ๋ค์ ์ค์:
์๋์ ๊ฐ์ด ๋ณ๊ฒฝํ๋ค:
์ด์ Gitosis๋ฅผ ์ด๊ธฐํํ ์ฐจ๋ก๋ค. gitosis-init
๋ช
๋ น์ ๊ณต๊ฐํค์ ํจ๊ป ์คํํ๋ค. ๋ง์ฝ ๊ณต๊ฐํค๊ฐ ์๋ฒ์ ์์ผ๋ฉด ๊ณต๊ฐํค๋ฅผ ์๋ฒ๋ก ๋ณต์ฌํด์์ผ ํ๋ค:
์ด ๋ช
๋ น์ผ๋ก ๋ฑ๋กํ๋ ํค์ ์ฌ์ฉ์๋ Gitosis๋ฅผ ์ ์ดํ๋ ํ์ผ๋ค์ด ์๋ Gitosis ์ค์ ์ ์ฅ์๋ฅผ ์์ ํ ์ ์๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋์ผ๋ก post-update
์คํฌ๋ฆฝํธ์ ์คํ๊ถํ์ ๋ถ์ฌํ๋ค:
๋ชจ๋ ์ค๋น๊ฐ ๋๋ฌ๋ค. ์ค์ ์ด ์ ๋์ผ๋ฉด ์ถ๊ฐํ ๊ณต๊ฐํค์ ์ฌ์ฉ์๋ก SSH ์๋ฒ์ ์ ์ํ์ ๋ ์๋์ ๊ฐ์ ๋ฉ์์ง๋ฅผ ๋ณด๊ฒ ๋๋ค:
์ด๊ฒ์ ์ ์์ ์๋ํ ์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง ์๋ณํ ์๋ ์์ง๋ง, Git ๋ช ๋ น์ด ์๋์ด์ ๊ฑฐ์ ํ๋ค๋ ๋ป์ด๋ค. ๊ทธ๋ฌ๋๊น ์ค์ Git ๋ช ๋ น์ด๋ฅผ ์คํ์์ผ๋ณด์. Gitosis ์ ์ด ์ ์ฅ์๋ฅผ Cloneํ๋ค:
gitosis-admin
์ด๋ผ๋ ๋๋ ํ ๋ฆฌ๊ฐ ์๊ธด๋ค. ๋๋ ํ ๋ฆฌ ๋ด์ฉ์ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋๋ ์ ์๋ค:
gitoiss.conf
ํ์ผ์ ์ฌ์ฉ์, ์ ์ฅ์, ๊ถํ ๋ฑ์ ๋ช
์ํ๋ ์ค์ ํ์ผ์ด๋ค. keydir
๋๋ ํ ๋ฆฌ์๋ ์ ์ฅ์์ ์ ๊ทผํ ์ ์๋ ์ฌ์ฉ์์ ๊ณต๊ฐํค๊ฐ ์ ์ฅ๋๋ค. ์ฌ์ฉ์๋ง๋ค ๊ณต๊ฐํค๊ฐ ํ๋์ฉ ์๊ณ ์ด ๊ณต๊ฐํค๋ก ์๋ฒ์ ์ ๊ทผํ๋ค. ์ด ์์ ์์๋ scott.pub
์ด์ง๋ง keydir
์์ ์๋ ํ์ผ์ ์ด๋ฆ์ ์ฌ์ฉ์๋ง๋ค ๋ค๋ฅด๋ค. ํ์ผ ์ด๋ฆ์ gitosis-init
์คํฌ๋ฆฝํธ๋ก ๊ณต๊ฐํค๋ฅผ ์ถ๊ฐํ ๋ ๊ฒฐ์ ๋๋๋ฐ ๊ณต๊ฐํค ๋ ๋ถ๋ถ์ ์๋ ์ด๋ฆ์ด ์ฌ์ฉ๋๋ค.
์ด์ gitosis.conf
ํ์ผ์ ์ด์ด๋ณด์. ์ง๊ธ ๋ง Cloneํ gitosis-admin
ํ๋ก์ ํธ์ ๋ํ ์ ๋ณด๋ง ๋ค์ด ์๋ค:
scott์ด๋ผ๋ ์ฌ์ฉ์๋ Gitosis๋ฅผ ์ด๊ธฐํํ ๋ ์ฌ์ฉํ ๊ณต๊ฐํค์ ์ฌ์ฉ์์ด๋ค. ์ด ์ฌ์ฉ์๋ง gitosis-admin
ํ๋ก์ ํธ์ ์ ๊ทผํ ์ ์๋ค.
์ด์ ํ๋ก์ ํธ๋ฅผ ์๋ก ์ถ๊ฐํด๋ณด์. mobile
๋จ๋ฝ์ ์ถ๊ฐํ๊ณ ๊ทธ ํ๋ก์ ํธ์ ์ํ ๊ฐ๋ฐ์๋ ํ๋ก์ ํธ์ ์ ๊ทผํด์ผ ํ๋ ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํ๋ค. ํ์ฌ๋ scott์ด์ธ์ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ์์ผ๋ scott
๋ง ์ถ๊ฐํ๋ค. ๊ทธ๋ฆฌ๊ณ iphone_project
ํ๋ก์ ํธ๋ฅผ ์๋ก ์ถ๊ฐํ๋ค:
gitosis-admin
ํ๋ก์ ํธ๋ฅผ ์์ ํ๋ฉด ์ปค๋ฐํ๊ณ ์๋ฒ์ Pushํด์ผ ์์ ํ ์ค์ ์ด ์ ์ฉ๋๋ค:
๋ก์ปฌ์ ์๋ iphone_project
ํ๋ก์ ํธ์ ์ด ์๋ฒ๋ฅผ ๋ฆฌ๋ชจํธ ์ ์ฅ์๋ก ์ถ๊ฐํ๊ณ Pushํ๋ฉด ์๋ฒ์ ์๋ก์ด ์ ์ฅ์๊ฐ ์ถ๊ฐ๋๋ค. ์๋ฒ์ ํ๋ก์ ํธ๋ฅผ ์๋ก ๋ง๋ค ๋ ์ด์ ๋ ์๋์ผ๋ก Bare ์ ์ฅ์๋ฅผ ๋ง๋ค ํ์๊ฐ ์๋ค. ์ฒ์ Pushํ ๋ Gitosis๊ฐ ์์์ ์์ฑํด ์ค๋ค:
Writing objects: 100% (3/3), 230 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@gitserver:iphone_project.git * [new branch] master -> master
Gitosis๋ฅผ ์ด์ฉํ ๋์๋ ์ ์ฅ์ ๊ฒฝ๋ก๋ฅผ ๋ช ์ํ ํ์๋ ์๊ณ ์ฌ์ฉํ ์๋ ์๋ค. ๋จ์ง ์ฝ๋ก ๋ค์ ํ๋ก์ ํธ ์ด๋ฆ๋ง ์ ์ด๋ Gitosis๊ฐ ์์์ ์ฐพ์ ์ค๋ค.
๋๋ฃ์ ์ด ํ๋ก์ ํธ๋ฅผ ๊ณต์ ํ๋ ค๋ฉด ๋๋ฃ์ ๊ณต๊ฐํค๋ ๋ชจ๋ ์ถ๊ฐํด์ผ ํ๋ค. ~/.ssh/authorized_keys
ํ์ผ์ ์๋์ผ๋ก ์ถ๊ฐํ๋ ๊ฒ ์๋๋ผ keydir
๋๋ ํ ๋ฆฌ์ ํ๋์ ๊ณต๊ฐํค๋ฅผ ํ๋์ ํ์ผ๋ก ์ถ๊ฐํ๋ค. ์ด ๊ณต๊ฐํค์ ํ์ผ์ด๋ฆ์ด gitosis.conf
ํ์ผ์์ ์ฌ์ฉํ๋ ์ฌ์ฉ์ ์ด๋ฆ์ ๊ฒฐ์ ํ๋ค. John, Josie, Jessica์ ๊ณต๊ฐํค๋ฅผ ์ถ๊ฐํด ๋ณด์:
์ด ์ธ ์ฌ๋์ ๋ชจ๋ mobile ํ์ผ๋ก ์ถ๊ฐํ์ฌ iphone_project
์ ๋ํ ์ฝ๊ธฐ, ์ฐ๊ธฐ๋ฅผ ํ์ฉํ๋ค:
์ด ํ์ผ์ ์ปค๋ฐํ๊ณ Pushํ๊ณ ๋๋ฉด ๋ค ๋ช
๋ชจ๋ iphone_project
๋ฅผ ์ฝ๊ณ ์ธ ์ ์๊ฒ ๋๋ค.
Gitosis์ ์ ๊ทผ์ ์ด ๋ฐฉ๋ฒ์ ๋งค์ฐ ๋จ์ํ๋ค. ๋ง์ฝ ์ด ํ๋ก์ ํธ์ ๋ํด์ John์ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ๋๋ก ์ค์ ํ๋ ค๋ฉด ์๋์ ๊ฐ์ด ํ๋ค:
์ด์ John์ ํ๋ก์ ํธ๋ฅผ Cloneํ๊ฑฐ๋ Fetchํ ์๋ ์์ง๋ง, ํ๋ก์ ํธ์ Pushํ ์๋ ์๋ค. ๋ค์ํ ์ฌ์ฉ์์ ํ๋ก์ ํธ๊ฐ ์์ด๋ ํ์ํ ๋งํผ ๊ทธ๋ฃน์ ๋ง๋ค์ด ์ฌ์ฉํ๋ฉด ๋๋ค. ๊ทธ๋ฆฌ๊ณ members ํญ๋ชฉ์ ์ฌ์ฉ์ ๋์ ๊ทธ๋ฃน๋ช
์ ์ฌ์ฉํ ์๋ ์๋ค. ๊ทธ๋ฃน๋ช
์์ @
๋ฅผ ๋ถ์ด๋ฉด ๊ทธ ๊ทธ๋ฃน์ ์ฌ์ฉ์๋ฅผ ๊ทธ๋๋ก ์์ํ๋ค:
[gitosis]
์ ์ loglevel=DEBUG
๋ผ๊ณ ์ ์ผ๋ฉด ๋ฌธ์ ๊ฐ ์๊ฒผ์ ๋ ํด๊ฒฐํ๋๋ฐ ๋์์ด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ค์ ์ด ๊ผฌ์ฌ๋ฒ๋ ค์ Pushํ ์ ์๊ฒ ๋๋ฉด ์๋ฒ์ ์๋ ํ์ผ์ ์๋์ผ๋ก ๊ณ ์ณ๋ ๋๋ค. Gitosis๋ /home/git/.gitosis.conf
ํ์ผ์ ์ ๋ณด๋ฅผ ์ฝ๊ธฐ ๋๋ฌธ์ ์ด ํ์ผ์ ๊ณ ์น๋ค. gitosis.conf
๋ Pushํ ๋ ๊ทธ ์์น๋ก ๋ณต์ฌ๋๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ๊ณ ์น ํ์ผ์ gitosis-admin
ํ๋ก์ ํธ๊ฐ ๋ค์์ Push๋ ๋๊น์ง ์ ์ง๋๋ค.
Gitolite
์ด ์ ์์๋ Gitolite๊ฐ ๋ญ๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ป๊ฒ ์ค์นํ๋ ์ง๋ฅผ ์ดํด๋ณธ๋ค. ๋ฌผ๋ก Gitolite์ ๋ค์ด ์๋ Gitolite ๋ฌธ์๋ ์์ด ๋ง์์ ์ด ์ ์์ ๋ชจ๋ ๋ค๋ฃฐ ์ ์๋ค. Gitolite๋ ๊ณ์ ์งํํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด ์ฑ ์ ๋ด์ฉ๊ณผ ๋ค๋ฅผ ์ ์๋ค. ์ต์ ๋ด์ฉ์ ์ฌ๊ธฐ์์ ํ์ธํด์ผ ํ๋ค.
Gitolite์ ๊ฐ๋จํ ๋งํด Git ์์์ ์ด์ํ๋ ๊ถํ ์ ์ด(Authorization) ๋๊ตฌ๋ค. ์ฌ์ฉ์ ์ธ์ฆ(Authentication)์ sshd
์ httpd
๋ฅผ ์ฌ์ฉํ๋ค. ์ ์ํ ์ ์ํ๋ ์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง ๊ฐ๋ ค๋ด๋ ๊ฒ์ด ์ธ์ฆ(Authentication)์ด๊ณ ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ ๊ถํ์ ๊ฐ๋ ค๋ด๋ ์ผ์ ๊ถํ ์ ์ด(Authorization)์ด๋ค.
Gitolite๋ ์ ์ฅ์๋ฟ๋ง ์๋๋ผ ์ ์ฅ์์ ๋ธ๋์น๋ ํ๊ทธ์๋ ๊ถํ์ ๋ช ์ํ ์ ์๋ค. ์ฆ, ์ด๋ค ์ฌ๋์ refs(๋ธ๋์น๋ ํ๊ทธ)์ Pushํ ์ ์๊ณ ์ด๋ค ์ฌ๋์ ํ ์ ์๊ฒ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
์ค์นํ๊ธฐ
๋ณ๋ ๋ฌธ์๋ฅผ ์ฝ์ง ์์๋ ์ ๋์ค ๊ณ์ ๋ง ํ๋ ์์ผ๋ฉด Gitolite๋ฅผ ์ฝ๊ฒ ์ค์นํ ์ ์๋ค. ์ด ๊ธ์ ์ฌ๋ฌ ๊ฐ์ง ๋ฆฌ๋
์ค๋ค๊ณผ ์๋ผ๋ฆฌ์ค 10์์ ํ
์คํธ๋ฅผ ๋ง์ณค๋ค. Git, Perl, OpenSSH๊ฐ ํธํ๋๋ SSH ์๋ฒ๊ฐ ์ค์น๋ผ ์์ผ๋ฉด root ๊ถํ๋ ํ์ ์๋ค. ์์ ์ฌ์ฉํ๋ gitserver
๋ผ๋ ์๋ฒ์ ๊ทธ ์๋ฒ์ git
๊ณ์ ์ ๋ง๋ค์ด ์ฌ์ฉํ๋ค.
Gitolite๋ ๋ณดํต์ ์๋ฒ ์ํํธ์จ์ด์๋ ๋ฌ๋ฆฌ SSH๋ฅผ ํตํด์ ์ ๊ทผํ๋ค. ์๋ฒ์ ๋ชจ๋ ๊ณ์ ์ ๊ทผ๋ณธ์ ์ผ๋ก "Gitolite ํธ์คํธ"๊ฐ ๋ ์ ์๋ค. ์ด ์ฑ ์์๋ ๊ฐ์ฅ ๊ฐ๋จํ ์ค์น ๋ฐฉ๋ฒ์ผ๋ก ์ค๋ช ํ๋ค. ์์ธํ ์ค๋ช ๋ฌธ์๋ Gitolite์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ค.
๋จผ์ ์๋ฒ์ git
๊ณ์ ์ ๋ง๋ค๊ณ git
๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ ํ๋ค. ์ฌ์ฉ์์ SSH ๊ณต๊ฐํค(ssh-keygen
์ผ๋ก ์์ฑํ SSH ๊ณต๊ฐํค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ~/.ssh/id_rsa.pub
์ ์์นํจ)๋ฅผ ๋ณต์ฌํ์ฌ <์ด๋ฆ>.pub
ํ์ผ๋ก ์ ์ฅํ๋ค(์ด ์ฑ
์ ์์ ์์๋ scott.pub
๋ก ์ ์ฅ). ๊ทธ๋ฆฌ๊ณ ๋ค์๊ณผ ๊ฐ์ ๋ช
๋ น์ ์คํํ๋ค:
๋ง์ง๋ง ๋ช
๋ น์ gitolite-admin
๋ผ๋ ์ Git ์ ์ฅ์๋ฅผ ์๋ฒ์ ๋ง๋ ๋ค.
๋ค์ ์์
ํ๋ ํ๊ฒฝ์ผ๋ก ๋์๊ฐ์ git clone git@gitserver:gitolite-admin
๋ช
๋ น์ผ๋ก ์๋ฒ์ ์ ์ฅ์๋ฅผ Clone ํ์ ๋ ๋ฌธ์ ์์ด Clone ๋๋ฉด Gitolite๊ฐ ์ ์์ ์ผ๋ก ์ค์น๋ ๊ฒ์ด๋ค. ์ด gitolite-admin
์ ์ฅ์์ ๋ด์ฉ์ ์์ ํ๊ณ Pushํ์ฌ Gitolite์ ์ค์น๋ฅผ ๋ง์น๋๋ก ํ๋ค.
์์ ์๊ฒ ๋ง๊ฒ ์ค์นํ๊ธฐ
๋ณดํต์ ๊ธฐ๋ณธ์ค์ ์ผ๋ก ๋น ๋ฅด๊ฒ ์ค์นํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํ์ง๋ง, ์์ ์๊ฒ ๋ง๊ฒ ๊ณ ์ณ์ ์ค์นํ ์ ์๋ค. ์ผ๋ถ ์ค์ ์ ์ฃผ์์ด ์ ๋ฌ๋ ค์๋ rc ํ์ผ์ ๊ฐ๋จํ ๊ณ ์ณ์ ์ธ ์ ์์ง๋ง, ์์ธํ ์ค์ ์ ์ํด์๋ Gitolite๊ฐ ์ ๊ณตํ๋ ๋ฌธ์๋ฅผ ์ดํด๋ณด๋๋ก ํ๋ค.
์ค์ ํ์ผ๊ณผ ์ ๊ทผ์ ์ด ๊ท์น
์ค์น๊ฐ ์๋ฃ๋๋ฉด ํ ๋๋ ํ ๋ฆฌ์ Cloneํ gitolite-admin
๋๋ ํ ๋ฆฌ๋ก ์ด๋ํด์ ์ด๋ค ๊ฒ๋ค์ด ์๋์ง ํ๋ฒ ์ดํด๋ณด์:
gitolite setup
๋ช
๋ น์ ์คํํ์ ๋ ์ฃผ์๋ ๊ณต๊ฐํค ํ์ผ์ ์ด๋ฆ์ธ scott
์ gitolite-admin
์ ์ฅ์์ ๋ํ ์ฝ๊ธฐ์ ์ฐ๊ธฐ ๊ถํ์ ๊ฐ๋๋ก ๊ณต๊ฐํค๊ฐ ๋ฑ๋ก๋ผ ์๋ค.
์ฌ์ฉ์๋ฅผ ์๋ก ์ถ๊ฐํ๊ธฐ๋ ์ฝ๋ค. "alice"๋ผ๋ ์ฌ์ฉ์๋ฅผ ์๋ก ๋ฑ๋กํ๋ ค๋ฉด ์ฐ์ ๋ฑ๋กํ ์ฌ๋์ ๊ณต๊ฐํค ํ์ผ์ ์ป์ด์ alice.pub
๋ผ๋ ์ด๋ฆ์ผ๋ก gitolite-admin
๋๋ ํ ๋ฆฌ ์๋์ keydir
๋๋ ํ ๋ฆฌ์ ์ ์ฅํ๋ค. ์๋ก ์ถ๊ฐํ ์ด ํ์ผ์ Addํ๊ณ ์ปค๋ฐํ ํ Push๋ฅผ ํ๋ฉด alice
๋ผ๋ ์ฌ์ฉ์๊ฐ ๋ฑ๋ก๋ ๊ฒ์ด๋ค.
Gitolite์ ์ค์ ํ์ผ์ธ conf/example.conf
์ ๋ํ ๋ด์ฉ์ Gitolite ๋ฌธ์์ ์ค๋ช
์ด ์ ๋์ด ์๋ค. ์ด ์ฑ
์์๋ ์ฃผ์ ์ผ๋ถ ์ค์ ์ ๋ํด์๋ง ๊ฐ๋จํ ์ดํด๋ณธ๋ค.
์ ์ฅ์์ ์ฌ์ฉ์ ๊ทธ๋ฃน์ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ค. ์ด ๊ทธ๋ฃน์ ๋งคํฌ๋ก์ ๋น์ทํ๋ค. ๊ทธ๋ฃน์ ๋ง๋ค ๋๋ ๊ทธ ๊ทธ๋ฃน์ด ํ๋ก์ ํธ์ ๊ทธ๋ฃน์ธ์ง ์ฌ์ฉ์์ ๊ทธ๋ฃน์ธ์ง ๊ตฌ๋ถํ์ง ์์ง๋ง _์ฌ์ฉ_ํ ๋์๋ ๋ค๋ฅด๋ค.
๊ทธ๋ฆฌ๊ณ ref ๋จ์๋ก ๊ถํ์ ์ ์ดํ๋ค. ๋ค์ ์์ ๋ฅผ ๋ณด์. ์ธํด(interns)์ int ๋ธ๋์น๋ง Pushํ ์ ์๊ณ engineers๋ eng-๋ก ์์ํ๋ ๋ธ๋์น์ rc ๋ค์ ์ซ์๊ฐ ๋ถ๋ ํ๊ทธ๋ง Pushํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ด๋ฆฌ์๋ ๋ชจ๋ ref์ ๋ฌด์์ด๋ ์ง(๋๋๋ฆฌ๊ธฐ๋ ํฌํจ๋จ) ํ ์ ์๋ค.
RW
๋ RW+
๋ค์ ๋์ค๋ ํํ์์ ์ ๊ทํํ์(regex)์ด๊ณ Pushํ๋ ref ์ด๋ฆ์ ํจํด์ ์๋ฏธํ๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ refex๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๋ฌผ๋ก refex๋ ์ฌ๊ธฐ์ ๋ณด์ฌ์ค ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ๊ฐ๋ ฅํ๋ค. ํ์ง๋ง, ํ์ ์ ๊ทํํ์์ ์ต์ํ์ง ์์ ๋
์๋ ์์ผ๋ ์ฌ๊ธฐ์๋ ๋ฌด๋ฆฌํ์ง ์์๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฏธ ์์ํ๊ฒ ์ง๋ง Gitolite๋ refs/heads/
๋ผ๊ณ ์์ํ์ง ์๋ refex์ ๋ํด์๋ ์๋ฌต์ ์ผ๋ก refs/heads/
๊ฐ ์๋ต๋ ๊ฒ์ผ๋ก ํ๋จํ๋ค.
ํน์ ์ ์ฅ์์ ์ฌ์ฉํ๋ ๊ท์น์ ํ ๊ณณ์ ๋ชจ์ ๋์ง ์์๋ ๊ด์ฐฎ๋ค. ์์ ๋ณด์ฌ์ค oss_repos
์ ์ฅ์ ์ค์ ๊ณผ ๋ค๋ฅธ ์ ์ฅ์ ์ค์ ์ด ๋ง๊ตฌ ์์ฌ ์์ด๋ ๊ด์ฐฎ๋ค. ์๋์ ๊ฐ์ด ๋ชฉ์ ์ด ๋ถ๋ช
ํ๊ณ ์ ํ์ ์ธ ๊ท์น์ ์๋ฌด ๋ฐ๋ ์ถ๊ฐํด๋ ์ข๋ค:
์ด ๊ท์น์ gitolite
์ ์ฅ์๋ฅผ ์ํด ์ง๊ธ ๋ง ์ถ๊ฐํ ๊ท์น์ด๋ค.
์ด์ ๋ ์ ๊ทผ์ ์ด ๊ท์น์ด ์ค์ ๋ก ์ด๋ป๊ฒ ์ ์ฉ๋๋์ง ์ค๋ช ํ๋ค. ์ด์ ๋ถํฐ ๊ทธ ๋ด์ฉ์ ์ดํด๋ณด์.
Gitolite๋ ์ ๊ทผ ์ ์ด๋ฅผ ๋ ๋จ๊ณ๋ก ํ๋ค. ์ฒซ ๋จ๊ณ๊ฐ ์ ์ฅ์ ๋จ๊ณ์ธ๋ฐ ์ ๊ทผํ๋ ์ ์ฅ์์ ref ์ค์์ ํ๋๋ผ๋ ์ฝ๊ณ ์ธ ์ ์์ผ๋ฉด ์ค์ ๋ก ๊ทธ ์ ์ฅ์ ์ ๋ถ์ ๋ํด ์ฝ๊ธฐ, ์ฐ๊ธฐ ๊ถํ์ด ์๋ ๊ฒ์ด๋ค.
๋ ๋ฒ์งธ ๋จ๊ณ๋ ๋ธ๋์น๋ ํ๊ทธ ๋จ์๋ก ์ ์ดํ๋ ๊ฒ์ผ๋ก ์ค์ง "์ฐ๊ธฐ" ์ ๊ทผ๋ง ์ ์ดํ ์ ์๋ค. ์ด๋ ์ฌ์ฉ์๊ฐ ํน์ ref ์ด๋ฆ์ผ๋ก ์ ๊ทผ์ ์๋ํ๋ฉด(W
๋ +
๊ฐ์) ์ค์ ํ์ผ์ ์ ์๋ ์์๋๋ก ์ ๊ทผ ์ ์ด ๊ท์น์ด ์ ์ฉ๋๋ค. ๊ทธ ์์๋๋ก ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ref ์ด๋ฆ์ ๋น๊ตํ๋๋ฐ ref ์ด๋ฆ์ ๊ฒฝ์ฐ ๋จ์ํ ๋ฌธ์์ด์ ๋น๊ตํ๋ ๊ฒ์ด ์๋๋ผ ์ ๊ท ํํ์์ผ๋ก ๋น๊ตํ๋ค. ํด๋น๋๋ ๊ฒ์ ์ฐพ์ผ๋ฉด ์ ์์ ์ผ๋ก Push๋์ง๋ง ์ฐพ์ง ๋ชปํ๋ฉด ๊ฑฐ์ ๋๋ค.
"deny" ๊ท์น์ ๊ผผ๊ผผํ๊ฒ ์ ์ดํ๊ธฐ
์ง๊ธ๊น์ง๋ R
, RW
, RW+
๊ถํ์ ๋ํด์๋ง ๋ค๋ค๋ค. Gitolite๋ "deny" ๊ท์น์ ์ํด์ -
๊ถํ๋ ์ง์ํ๋ค. ์ด๊ฒ์ผ๋ก ๋ณต์ก๋๋ฅผ ๋ฎ์ถ ์ ์๋ค. -
๋ก ๊ฑฐ์ ๋ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ท์น์ ์์๊ฐ ์ค์ํ๋ค.
๋ค์ ๋งํด์ engineers๊ฐ master์ integ ๋ธ๋์น ์ด์ธ์ ๋ชจ๋ ๋ธ๋์น๋ฅผ ๋๋๋ฆด ์ ์๊ฒ ํ๊ณ ์ถ์ผ๋ฉด ์๋์ ๊ฐ์ด ํ๋ค:
์ฆ, ์ ๊ทผ์ ์ด ๊ท์น์ ์์๋๋ก ์ฐพ๊ธฐ ๋๋ฌธ์ ์์๋๋ก ์ ์ํด์ผ ํ๋ค. ์ฒซ ๋ฒ์งธ ๊ท์น์ master๋ integ ๋ธ๋์น์ ๋ํด์ ์ฝ๊ธฐ, ์ฐ๊ธฐ๋ง ํ์ฉํ๊ณ ๋๋๋ฆฌ๊ธฐ๋ ํ์ฉํ์ง ์๋๋ค. master๋ integ ๋ธ๋์น๋ฅผ ๋๋๋ฆฌ๋ Push๋ ์ฒซ ๋ฒ์งธ ๊ท์น์ ์ด๊ธ๋๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ๋ ๋ฒ์งธ ๊ท์น์ผ๋ก ๋์ด๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฑฐ๊ธฐ์ ๊ฑฐ์ ๋๋ค. master๋ integ ๋ธ๋์น ์ด์ธ ๋ค๋ฅธ ref์ ๋ํ Push๋ ์ฒซ ๋ฒ์งธ ๊ท์น๊ณผ ๋ ๋ฒ์งธ ๊ท์น์๋ ๋ง์กฑํ์ง ์๊ณ ๋ง์ง๋ง ๊ท์น์ผ๋ก ํ์ฉ๋๋ค.
ํ์ผ ๋จ์๋ก Push๋ฅผ ์ ์ดํ๊ธฐ
๋ธ๋์น ๋จ์๋ก Push๋ฅผ ์ ์ดํ ์ ์์ง๋ง ์์ ๋ ํ์ผ ๋จ์๋ก๋ ์ ์ดํ ์ ์๋ค. ์๋ฅผ ๋ค์ด Makefile์ ๋ณด์. Makefile ํ์ผ์ ์์กดํ๋ ํ์ผ์ ๋งค์ฐ ๋ง๊ณ ๋ณดํต ๊ผผ๊ผผํ๊ฒ ์์ ํ์ง ์์ผ๋ฉด ๋ฌธ์ ๊ฐ ์๊ธด๋ค. ๊ทธ๋์ ์๋ฌด๋ Makefile์ ์์ ํ๊ฒ ๋ ์ ์๋ค. ๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ด ์ค์ ํ๋ค:
์์ ๋ฒ์ ์ Gitolite์์ ๋ฒ์ ์ ์ฌ๋ฆฌ๋ ค๋ ์ฌ์ฉ์๋ ์ค์ ์ด ๋ง์ด ๋ฌ๋ผ์ง ๊ฒ์ ์๊ฒ ๋ ๊ฒ์ด๋ค. Gitolite์ ๋ฒ์ ์ ๊ฐ์ด๋๋ฅผ ํํ ์ฐธ๊ณ ํ์.
Personal ๋ธ๋์น
Gitolite๋ ๋ "Personal ๋ธ๋์น"๋ผ๊ณ ๋ถ๋ฅด๋ ๊ธฐ๋ฅ์ ์ง์ํ๋ค. ์ด ๊ธฐ๋ฅ์ ์ค์ ๋ก "Personal ๋ธ๋์น ๋ค์์คํ์ด์ค"๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ด ๋ ์ ์ ํ๋ค. ์ด ๊ธฐ๋ฅ์ ๊ธฐ์ ์์ ๋งค์ฐ ์ ์ฉํ๋ค.
Git์ ์ฌ์ฉํ๋ค ๋ณด๋ฉด ์ฝ๋๋ฅผ ๊ณต์ ํ๋ ค๊ณ "Pull ํด์ฃผ์ธ์"๋ผ๊ณ ๋งํด์ผ ํ๋ ์ผ์ด ์์ฃผ ์๊ธด๋ค. ๊ทธ๋ฐ๋ฐ ๊ธฐ์ ์์๋ ์ธ์ฆํ์ง ์์ ์ ๊ทผ์ ์ ๋ ํ์ฉํ์ง๋ ์๋ ๋ฐ๋ค๊ฐ ์์ ๋ค๋ฅธ ์ฌ๋์ ์ปดํจํฐ์ ์ ๊ทผํ ์ ์๋ค. ๊ทธ๋์ ๊ณต์ ํ๋ ค๋ฉด ์ค์ ์๋ฒ์ Pushํ๊ณ ๋์ Pullํด์ผ ํ๋ค๊ณ ๋ค๋ฅธ ์ฌ๋์๊ฒ ๋งํด์ผ๋ง ํ๋ค.
์ค์์ง์ค์ VCS์์ ์ด๋ ๊ฒ ๋ง๊ตฌ ์ฌ์ฉํ๋ฉด ๋ธ๋์น ์ด๋ฆ์ด ์ถฉ๋ํ ํ๋ฅ ์ด ๋๋ค. ๊ทธ๋๋ง๋ค ๊ด๋ฆฌ์๋ ์ถ๊ฐ๋ก ๊ถํ์ ๊ด๋ฆฌํด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ด๋ฆฌ์์ ๋ ธ๋ ฅ์ด ์ธ๋ฐ์์ด ๋ญ๋น๋๋ค.
Gitolite๋ ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ "personal"์ด๋ "scratch" ๋ค์์คํ์ด์ค๋ฅผ ๊ฐ์ง ์ ์๋๋ก ํ์ฉํ๋ค. ์ด ๋ค์์คํ์ด์ค๋ refs/personal/<devname>/*
๋ผ๊ณ ํํํ๋ค. ์์ธํ ๋ด์ฉ์ Gitolite ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ค.
"์์ผ๋์นด๋" ์ ์ฅ์
Gitolite๋ ํ ์ ๊ทํํ์์ผ๋ก ์ ์ฅ์ ์ด๋ฆ์ ํํํ๊ธฐ ๋๋ฌธ์ ์์ผ๋์นด๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋์ assignments/s[0-9][0-9]/a[0-9][0-9]
๊ฐ์ ์ ๊ทํํ์์ ์ฌ์ฉํ ์ ์๋ค. ์ฌ์ฉ์๊ฐ ์๋ก์ด ์ ์ฅ์๋ฅผ ๋ง๋ค ์ ์๋ ์๋ก์ด ๊ถํ ๋ชจ๋์ธ C
๋ชจ๋๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค. ์ ์ฅ์๋ฅผ ์๋ก ๋ง๋ ์ฌ๋์๊ฒ๋ ์๋์ผ๋ก ์ ๊ทผ ๊ถํ์ด ๋ถ์ฌ๋๋ค. ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ ์ ๊ทผ ๊ถํ์ ์ฃผ๋ ค๋ฉด R
๋๋ RW
๊ถํ์ ์ค์ ํ๋ค. ๋ค์ ํ๋ฒ ๋งํ์ง๋ง ๋ฌธ์์ ๋ชจ๋ ๋ด์ฉ์ด ๋ค ์์ผ๋ฏ๋ก ๊ผญ ๋ณด๊ธฐ๋ฅผ ๋ฐ๋๋ค.
๊ทธ ๋ฐ์ ๊ธฐ๋ฅ๋ค
๋ง์ง๋ง์ผ๋ก ์๊ณ ์์ผ๋ฉด ์ ์ฉํ ๊ฒ๋ค์ด ์๋ค. Gitolite์๋ ๋ง์ ๊ธฐ๋ฅ์ด ์๊ณ ์์ธํ ๋ด์ฉ์ "Faq, Tip, ๋ฑ๋ฑ"์ ๋ค๋ฅธ ๋ฌธ์์ ์ ์ค๋ช ๋ผ ์๋ค.
๋ก๊น
: ๋๊ตฐ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ ๊ทผํ๋ฉด Gitolite๋ ๋ฌด์กฐ๊ฑด ๋ก๊ทธ๋ฅผ ๋จ๊ธด๋ค. ๊ด๋ฆฌ์๊ฐ ํ๋ํ๋ ์ฌ์ด์ ๋๋๋ฆฌ๊ธฐ(RW+
) ๊ถํ์ ๊ฐ์ง ๋ง๋๋๊ฐ master
๋ธ๋์น๋ฅผ ๋ ๋ ค๋ฒ๋ฆด ์ ์๋ค. ์ด ๊ฒฝ์ฐ ๋ก๊ทธ ํ์ผ์ด ๊ตฌ์ํด์ค๋ค. ์ด ๋ก๊ทธ ํ์ผ์ ์ฐธ๊ณ ํ์ฌ ๋ฒ๋ ค์ง SHA๋ฅผ ๋น ๋ฅด๊ณ ์ฝ๊ฒ ์ฐพ์ ์ ์๋ค.
์ ๊ทผ ๊ถํ ๋ณด์ฌ์ฃผ๊ธฐ: ๋ง์ฝ ์ด๋ค ์๋ฒ์์ ์์ ์ ์์ํ๋ ค๊ณ ํ ๋ ํ์ํ ๊ฒ์ด ๋ฌด์์ผ๊น? Gitolite๋ ํด๋น ์๋ฒ์ ๋ํด ์ ๊ทผํ ์ ์๋ ์ ์ฅ์๊ฐ ๋ฌด์์ธ์ง, ์ด๋ค ๊ถํ์ ๊ฐ์ก๋์ง ๋ณด์ฌ์ค๋ค:
๊ถํ ์์: ์กฐ์ง ๊ท๋ชจ๊ฐ ํฌ๋ฉด ์ ์ฅ์์ ๋ํ ์ฑ
์์ ์ฌ๋ฌ ์ฌ๋์ด ๋๋ ๊ฐ์ง๋ ๊ฒ ์ข๋ค. ์ฌ๋ฌ ์ฌ๋์ด ๊ฐ์ ๋งก์ ๋ฐ๋ฅผ ๊ด๋ฆฌํ๋๋ก ํ๋ค. ๊ทธ๋์ ์ฃผ์ ๊ด๋ฆฌ์์ ์
๋ฌด๊ฐ ์ค์ด๋ค๊ธฐ์ ๋ณ๋ชฉํ์์ด ์ ์ด์ง๋ค. ์ด ๊ธฐ๋ฅ์ ๋ํด์๋ doc/
๋๋ ํ ๋ฆฌ์ ํฌํจ๋ Gitolite ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ผ.
๋ฏธ๋ฌ๋ง: Gitolite์ ๋ฏธ๋ฌ๋ ์ฌ๋ฌ ๊ฐ ๋ง๋ค ์ ์์ด์ ์ฃผ ์๋ฒ๊ฐ ๋ค์ด ๋ผ๋ ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
Git ๋ฐ๋ชฌ
๊ณต๊ฐ๋ ํ๋ก์ ํธ๋ ๋๊ฐ ์ฝ๊ธฐ ์ ๊ทผ์ ์๋ํ๋์ง ์ ํ์๊ฐ ์๋ค. ๊ทธ๋์ HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ๊ฑฐ๋ Git ํ๋กํ ์ฝ์ ์ฌ์ฉํด์ผ ํ๋ค. Git ํ๋กํ ์ฝ์ด HTTP ํ๋กํ ์ฝ๋ณด๋ค ํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋น ๋ฅด๋ค. ๋ฐ๋ผ์ ์ฌ์ฉ์์ ์๊ฐ์ ์ ์ฝํด ์ค๋ค.
๋ค์ ๊ฐ์กฐํ์ง๋ง, ์ด๊ฒ์ ๋ถํน์ ๋ค์์๊ฒ ์ฝ๊ธฐ ์ ๊ทผ์ ํ์ฉํ ๋์๋ง ์ธ๋งํ๋ค. ๋ง์ฝ ์๋ฒ๊ฐ ์ธ๋ถ์ ๊ทธ๋ฅ ๋ ธ์ถ๋ผ ์์ผ๋ฉด ์ฐ์ ๋ฐฉํ๋ฒฝ์ผ๋ก ๋ณดํธํ๊ณ ํ๋ก์ ํธ๋ง ์ธ๋ถ์์ ์ ๊ทผํ ์ ์๊ฒ ๋ง๋ ๋ค. ์๋ฒ๋ฅผ ๋ฐฉํ๋ฒฝ์ผ๋ก ๋ณดํธํ๊ณ ์์ผ๋ฉด CI ์๋ฒ๋ ๋น๋ ์๋ฒ๊ฐ์ ์ปดํจํฐ๋ ์ฌ๋์ด ์ฝ๊ธฐ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋๋ก ์ค์ ํ๋ค. ๋ชจ๋ SSH ํค๋ฅผ ์ผ์ผ์ด ์ถ๊ฐํ๊ณ ์ถ์ง ์์ ๋ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
์ด์จ๋ Git ํ๋กํ ์ฝ์ ์๋์ ์ผ๋ก ์ค์นํ๊ธฐ ์ฝ๋ค. ๊ทธ๋ฅ ๋ฐ๋ชฌ์ ์คํํ๋ค:
--reuseaddr
๋ ์๋ฒ๊ฐ ๊ธฐ์กด์ ์ฐ๊ฒฐ์ด ํ์์์๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ๋ง๊ณ ๋ฐ๋ก ์ฌ์์ํ๊ฒ ํ๋ ์ต์
์ด๋ค. --base-path
์ต์
์ ์ฌ์ฉํ๋ฉด ์ฌ๋๋ค์ด ํ๋ก์ ํธ๋ฅผ Cloneํ ๋ ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ ์๋ ๊ฒฝ๋ก๋ ๋
ธ์ถํ ์ ์ฅ์์ ์์น๋ค. ๋ง์ง๋ง์ผ๋ก ๋ฐฉํ๋ฒฝ์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉด 9418 ํฌํธ๋ฅผ ์ด์ด์ ์ง๊ธ ์์
ํ๋ ์๋ฒ์ ์จํต์ ํ์์ค๋ค.
์ด์์ฒด์ ์ ๋ฐ๋ผ Git ๋ฐ๋ชฌ์ ์คํ์ํค๋ ๋ฐฉ๋ฒ์ ๋ค๋ฅด๋ค. ์ฐ๋ถํฌ์์๋ Upstart ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ค. ์๋์ ๊ฐ์ด ํ์ผ์ ๋ง๋ค๊ณ :
๋ค์์ ๋ด์ฉ์ ์ ๋ ฅํ๋ค:
์ ์ฅ์๋ฅผ ์ฝ์ ์๋ง ์๋ ์ฌ์ฉ์๋ก ๋ฐ๋ชฌ์ ์คํ์ํฌ ๊ฒ์ ๋ณด์์ ์ํด ๊ฐ๋ ฅํ๊ฒ ๊ถ๊ณ ํ๋ค. git-ro
๋ผ๋ ๊ณ์ ์ ์๋ก ๋ง๋ค๊ณ ๊ทธ ๊ณ์ ์ผ๋ก ๋ฐ๋ชฌ์ ์คํ์ํจ๋ค. ์ฌ๊ธฐ์์๋ ์ฝ๊ฒ ์ค๋ช
ํ๋ ค๊ณ ๊ทธ๋ฅ Gitosis๋ฅผ ์คํํ๋ git
๊ณ์ ์ผ๋ก ์คํ์ํจ๋ค.
์๋ฒ๊ฐ ์ฌ์์ํ ๋ Git ๋ฐ๋ชฌ์ด ์๋์ผ๋ก ์คํ๋๊ณ ๋ฐ๋ชฌ์ด ์ฃฝ์ด๋ ์๋์ผ๋ก ์ฌ์์๋๋ค. ์๋ฒ๋ ๋๋๊ณ Git ๋ฐ๋ชฌ๋ง ์ฌ์์ํ ์ ์๋ค:
๋ค๋ฅธ ์์คํ
์์๋ sysvinit
์์คํ
์ xinetd
์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์์ ๋ง์ ๋ฐฉ๋ฒ์ผ๋ก ํด์ผ ํ๋ค.
Git ๋ฐ๋ชฌ์ ํตํด์ ์๋ฌด๋ ์ฝ์ ์ ์๋ค๋ ๊ฒ์ Gitosis ์๋ฒ์ ์๋ ค์ฃผ์ด์ผ ํ๋ค. Git ๋ฐ๋ชฌ์ผ๋ก ์ฝ๊ธฐ ์ ๊ทผ์ ํ์ฉํ๋ ์ ์ฅ์๊ฐ ๋ฌด์์ธ์ง ์ค์ ์ ์ถ๊ฐํด์ผ ํ๋ค. ๋ง์ฝ iphone_project
์ Git ํ๋กํ ์ฝ์ ํ์ฉํ๋ค๋ฉด ์๋์ ๊ฐ์ ๊ฒ์ gitosis.conf
ํ์ผ์ ํ๋จ์ ์ถ๊ฐํ๋ค:
์ฐจ๋ก๋๋ก ์ปค๋ฐ๊ณผ Pushํ๊ณ ๋๋ฉด ์ง๊ธ ์คํ ์ค์ธ ๋ฐ๋ชฌ์ด 9418 ํฌํธ๋ก ์ ๊ทผํ๋ ์ฌ๋์๊ฒ ์๋น์คํ๊ธฐ ์์ํ๋ค.
Gitosis ์์ด๋ Git ๋ฐ๋ชฌ์ ์ค์นํ ์ ์์ง๋ง ๊ทธ๋ฌ๋ ค๋ฉด ์๋น์คํ๊ณ ์ ํ๋ ํ๋ก์ ํธ๋ง๋ค ์๋์ ๊ฐ์ด git-daemon-export-ok
ํ์ผ์ ๋ฃ์ด ์ฃผ์ด์ผ ํ๋ค:
์ด ํ์ผ์ด ์์ผ๋ฉด Git ๋ฐ๋ชฌ์ ์ธ์ฆ ์์ด ํ๋ก์ ํธ๋ฅผ ๋ ธ์ถํ๋ ๊ฒ์ผ๋ก ํ๋จํ๋ค.
๋ํ, Gitweb์ผ๋ก ๋
ธ์ถํ๋ ํ๋ก์ ํธ๋ Gitosis๋ก ์ ์ดํ ์ ์๋ค. ๋จผ์ /etc/gitweb.conf
ํ์ผ์ ์๋์ ๊ฐ์ ๋ด์ฉ์ ์ถ๊ฐํด์ผ ํ๋ค:
Gitosis ์ค์ ํ์ผ์ gitweb
์ค์ ์ ๋ฃ๊ฑฐ๋ ๋นผ๋ฉด ์ฌ์ฉ์๋ GitWeb์ ํตํด ํ๋ก์ ํธ๋ฅผ ๋ณผ ์๋ ์๊ณ ๋ชป ๋ณผ ์๋ ์๋ค.
์ด์ ์ด๊ฒ์ ์ปค๋ฐํ๊ณ Pushํ๋ฉด GitWeb์ ํตํด iphone_project
๋ฅผ ๋ณผ ์ ์๋ค.
Hosted Git
Git ์๋ฒ๋ฅผ ์ค์นํ๋ ๋ฑ์ ์ผ์ ํ๊ณ ์ถ์ง ์์ผ๋ฉด ์ ๋ฌธ ํธ์คํ ์ฌ์ดํธ๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค. ํธ์คํ ์ฌ์ดํธ๋ ๋ช ๊ฐ์ง ์ฅ์ ์ด ์๋ค. ์ค์ ์ด ์ฌ์์ ๋ฐ๋ก ํ๋ก์ ํธ๋ฅผ ์์ํ ์ ์์ ๋ฟ๋ง ์๋๋ผ ์ง์ ์๋ฒ๋ฅผ ๊ด๋ฆฌํ๊ณ ๋ชจ๋ํฐ๋งํ์ง ์์๋ ๋๋ค. ๋ด๋ถ์ ์ผ๋ก Git ์๋ฒ๋ฅผ ์ง์ ์ค์นํ๊ณ ์ด์ํ๊ณ ์์ด๋ ์คํ์์ค ํ๋ก์ ํธ๋ ํธ์คํ ์ฌ์ดํธ๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ์ข๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ณดํต ์คํ์์ค ์ปค๋ฎค๋ํฐ๋ก๋ถํฐ ์ข ๋ ์ฝ๊ฒ ๋์๋ฐ์ ์ ์๋ค.
์์ฆ์ ์ด์ฉํ ์ ์๋ ํธ์คํ ์ฌ์ดํธ๋ค์ด ๋ง๋ค. ๊ฐ๊ฐ ์ฅ๋จ์ ์ด ์๊ธฐ ๋๋ฌธ์ ๋ค์ ํ์ด์ง์์ ์ต์ ์ ๋ณด๋ฅผ ํ์ธํด๋ณด์:
์ด ์ ์์ ์ ๋ถ ์ค๋ช ํ ์๋ ์๊ณ (ํ์๋ ์ ํ์ฌ ์ค ํ๊ตฐ๋ฐ์์ ์ผํ๋ค) GitHub์ ๊ณ์ ๊ณผ ํ๋ก์ ํธ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๋ค.
GitHub์ ๊ฐ์ฅ ํฐ ์คํ์์ค Git ํธ์คํ ์ฌ์ดํธ์ด๊ณ ๊ณต๊ฐ(Public) ํ๋ก์ ํธ์ ๋น๊ณต๊ฐ(Private) ํ๋ก์ ํธ์ ๋ํ ํธ์คํ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๋ณด๊ธฐ ๋๋ฌธ ์ฌ์ดํธ๋ค. ๊ทธ๋์ ์์ ์ฉ ๋น๊ณต๊ฐ ์ฝ๋์ ๊ณต๊ฐ ์ฝ๋๋ฅผ ๊ฐ์ ๊ณณ์ ๋ ์ ์๋ค. ์ค์ ๋ก ์ด ์ฑ ๋ GitHub์์ ๋น๊ณต๊ฐ๋ก ์์ฑํ๋ค.
GitHub
GitHub๋ ํ๋ก์ ํธ ๋ค์์คํ์ด์ค๊ฐ ๋ค๋ฅธ ์ฝ๋ ํธ์คํ
์ฌ์ดํธ๋ค๊ณผ ๋ค๋ฅด๋ค. GitHub๋ ํ๋ก์ ํธ๊ฐ ์๋๋ผ ์ฌ์ฉ์๊ฐ ์ค์ฌ์ด๋ค. GitHub์ grit
ํ๋ก์ ํธ๋ฅผ ํธ์คํ
ํ๊ณ ์ถ์ผ๋ฉด github.com/grit
์ด ์๋๋ผ github.com/schacon/grit
์ผ๋ก ์ ์ํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฒ์ ํ๋ก์ ํธ๋ฅผ ์์ํ ์ฌ๋์ด ๊ทธ ํ๋ก์ ํธ๋ฅผ ์์ด๋ฒ๋ ค๋ ๋๊ตฌ๋ ํ๋ก์ ํธ๋ฅผ ์ด์ด๊ฐ ์ ์๋ค. ํ๋ก์ ํธ ์ฃผ ์ ์ฅ์๋ผ๊ณ ํด์ ํน๋ณํ๊ฒ ์๋๋ค.
GitHub์ ์ด์ค์ ๋ชฉ์ ์ผ๋ก ํ๋ ํ์ฌ์ด๊ธฐ ๋๋ฌธ์ ๋น๊ณต๊ฐ ์ ์ฅ์๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋์ ๋ด์ผ ํ๋ค. ํ์ง๋ง, ๋๊ตฌ๋ ์์ฝ๊ฒ ๋ฌด๋ฃ ๊ณ์ ์ ๋ง๋ค์ด ์คํ์์ค ํ๋ก์ ํธ๋ฅผ ์์ํ ์ ์๋ค. ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ๊ฐ๋ตํ๊ฒ ์ค๋ช ํ๋ค.
๊ณ์ ์ค์ ํ๊ธฐ
๋จผ์ ๋ฌด๋ฃ ๊ณ์ ์ ํ๋ ๋ง๋ ๋ค. ๊ฐ๊ฒฉ ์ ์ฑ
์ ๋ํด ์๋ ค์ฃผ๋ฉฐ ๊ฐ์
์ ์์ํ ์ ์๋ https://github.com/pricing
์ ๋ฐฉ๋ฌธํ์ฌ "Sign up" ๋ฒํผ์ ํด๋ฆญํ๋ค. ๊ทธ๋ฌ๋ฉด ๊ฐ์
ํ์ด์ง๋ก ์ด๋ํ๋ค.
๊ทธ๋ฆผ 4-2. GitHub ๊ฐ๊ฒฉ ์ ์ฑ ํ์ด์ง
์์ง ๋ฑ๋ก๋์ง ์์ ์ฌ์ฉ์ ์ด๋ฆ์ ์ ๋ ฅํ๊ณ e-mail ์ฃผ์์ ์ํธ๋ฅผ ์ ๋ ฅํ๋ค(๊ทธ๋ฆผ 4-3).
๊ทธ๋ฆผ 4-3. GitHub ๊ฐ์ ํผ
๊ทธ๋ฆฌ๊ณ SSH ๊ณต๊ฐํค๊ฐ ์์ผ๋ฉด ๋ฐ๋ก ๋ฑ๋กํ๋ค. SSH ํค๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ "๋ฐ๋ก ์ค์ ํ๊ธฐ" ์ ์์ ์ด๋ฏธ ์ค๋ช ํ๋ค. ๊ทธ ๊ณต๊ฐํค ํ์ผ์ ๋ด์ฉ์ ๋ณต์ฌํด์ SSH ๊ณต๊ฐํค ์ ๋ ฅ ๋ฐ์ค์ ๋ถ์ฌ ๋ฃ๋๋ค. "explain ssh keys" ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด key๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์์ธํ ์ค๋ช ํด์ค๋ค. ์ฃผ์ ์ด์์ฒด์ ์์ ํ๋ ๋ฐฉ๋ฒ์ด ๋ชจ๋ ์ค๋ช ๋ผ ์๋ค. "I agree, sign me up" ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์์ ๋ง์ ๋์ฌ๋ณด๋ ํ์ด์ง๊ฐ ๋ํ๋๋ค.
๊ทธ๋ฆผ 4-4. GitHub ์ฌ์ฉ์ ๋์ฌ๋ณด๋
๊ทธ๋ฆฌ๊ณ ์ ์ฅ์๋ฅผ ๋ง๋ค์.
์ ์ฅ์ ๋ง๋ค๊ธฐ
Your Repositories
์์ ์๋ "create a new one" ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ์ ์ฅ์๋ฅผ ๋ง๋๋ ์
๋ ฅ ํผ์ ๋ณผ ์ ์๋ค(๊ทธ๋ฆผ 4-5).
๊ทธ๋ฆผ 4-5. GitHub์ ์ ์ฅ์๋ฅผ ์์ฑํ๋ ํผ
์ด ํผ์ ํ๋ก์ ํธ ์ด๋ฆ๊ณผ ํ๋ก์ ํธ ์ค๋ช ์ ์ ๋๋ค. ๋ค ์ ์ ํ์ "Create Repository" ๋ฒํผ์ ํด๋ฆญํ๋ฉด GitHub์ ์ ์ฅ์๊ฐ ์๊ธด๋ค.
๊ทธ๋ฆผ 4-6. GitHub ํ๋ก์ ํธ ์ ๋ณด
์ด ์ ์ฅ์์๋ ์์ง ์ฝ๋๊ฐ ์์ด์ GitHub์ ํ๋ก์ ํธ๋ฅผ ์๋ก ๋ง๋๋ ๋ฐฉ๋ฒ, ์ด๋ฏธ ์๋ Git ํ๋ก์ ํธ๋ฅผ Pushํ๋ ๋ฒ, ๊ณต๊ฐ๋ Subversion ์ ์ฅ์์์ ํ๋ก์ ํธ๋ฅผ ๊ฐ์ ธ์ค๋(Import) ๋ฐฉ๋ฒ ๋ฑ์ ๋ณด์ฌ์ค๋ค.
๊ทธ๋ฆผ 4-7. ์ ์ ์ฅ์๋ฅผ ์ํ ์ฌ์ฉ์ค๋ช ์
์ฌ๊ธฐ ์ค๋ช ํ๋ ๋ด์ฉ์ ์ด๋ฏธ ์ฐ๋ฆฌ๊ฐ ๋ฐฐ์ ๋ค. ํ๋ก์ ํธ๊ฐ ์์ ๋๋ ์๋์ ๊ฐ์ด ํ๋ก์ ํธ๋ฅผ ์ด๊ธฐํํ๋ค:
๋ง์ฝ ์ด๋ฏธ ๋ก์ปฌ์ Git ์ ์ฅ์๊ฐ ์์ผ๋ฉด GitHub ์ ์ฅ์๋ฅผ ๋ฆฌ๋ชจํธ ์ ์ฅ์๋ก ๋ฑ๋กํ๊ณ master ๋ธ๋์น๋ฅผ Pushํ๋ค:
์ด์ ํ๋ก์ ํธ๊ฐ GitHub์์ ์๋น์ค๋๋ ๊ณต์ ํ๊ณ ์ถ์ ์ฌ๋์๊ฒ URL์ ์๋ ค ์ฃผ๋ฉด ๋๋ค. URL์ http://github.com/testinguser/iphone_project
์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์ ์ฅ์์ ์ ๋ณด๋ฅผ ์ ์ดํด๋ณด๋ฉด Git URL์ด ๋ ๊ฐ๋ผ๋ ๊ฒ์ ๋ฐ๊ฒฌํ ์ ์๋ค.
๊ทธ๋ฆผ 4-8. ํ๋ก์ ํธ์ ๊ณต๊ฐ URL๊ณผ ๋น๊ณต๊ฐ URL
Public Clone URL
์ ๋ง ๊ทธ๋๋ก ๋๊ตฌ๋ ํ๋ก์ ํธ๋ฅผ Cloneํ ์ ์๋๋ก ๋ชจ๋์๊ฒ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ๊ณต๊ฐํ๋ ๊ฒ์ด๋ค. ์ด URL์ ๋ค๋ฅธ ์ฌ๋์ ์๋ ค์ฃผ๊ฑฐ๋ ์น์ฌ์ดํธ ๊ฐ์๋ฐ ๊ณต๊ฐํ๋ ๊ฒ์ ๋ถ๋ด์ค๋ฌ์ ํ์ง ์์๋ ๋๋ค.
Your Clone URL
์ ์ฝ๊ณ ์ธ ์ ์๋ SSH ๊ธฐ๋ฐ URL์ด๋ค. ์ฌ์ฉ์ ๊ณ์ ์ ๋ฑ๋กํ ๊ณต๊ฐํค์ ํ ์ง์ธ ๊ฐ์ธํค๋ก๋ง ์ ์ํ ์ ์๋ค. ๋ค๋ฅธ ์ฌ์ฉ์๋ก ์ด ํ๋ก์ ํธ์ ๋ฐฉ๋ฌธํ๋ฉด ์ด URL์ ๋ณผ ์ ์๊ณ ๊ณต๊ฐ URL๋ง ๋ณผ ์ ์๋ค.
Subversion์ผ๋ก๋ถํฐ ์ฝ๋ ๊ฐ์ ธ์ค๊ธฐ(Import)
GitHub์ ๊ณต๊ฐ ์ค์ธ Subversion ํ๋ก์ ํธ๋ฅผ Git ํ๋ก์ ํธ๋ก ๋ง๋ค์ด ์ค๋ค. ์ฌ์ฉ์ค๋ช ์ ํ๋จ์ ์๋ "Subversion์์ Importํ๊ธฐ" ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ์ํฌํธ ํผ์ ๋ณผ ์ ์๊ณ ๊ฑฐ๊ธฐ์ Subversion ํ๋ก์ ํธ์ URL์ ๋ฃ๋๋ค(๊ทธ๋ฆผ 4-9).
๊ทธ๋ฆผ 4-9. Subversion ํ๋ก์ ํธ๋ฅผ Importํ๋ ํ๋ฉด
ํ๋ก์ ํธ๊ฐ ๋นํ์ค ๋ฐฉ์์ ์ฌ์ฉํ๊ฑฐ๋ ๊ท๋ชจ๊ฐ ๋๋ฌด ํฌ๊ณ ๋น๊ณต๊ฐ๋ผ๋ฉด ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค. _7์ฅ_์์ ์๋์ผ๋ก ์ํฌํธํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ข ๋ ์์ธํ ๋ฐฐ์ด๋ค.
๋๋ฃ ์ถ๊ฐํ๊ธฐ
๋๋ฃ๋ฅผ ์ถ๊ฐํ์. ๋จผ์ John์จ, Josie์จ, Jessica์จ๋ฅผ ๋ชจ๋ GitHub์ ๊ฐ์ ์ํค๊ณ ๋์ ๊ทธ๋ค์ ๋๋ฃ๋ก ์ถ๊ฐํ๊ณ ์ ์ฅ์์ Pushํ ์ ์๋ ๊ถํ์ ์ค๋ค.
ํ๋ก์ ํธ ํ์ด์ง์ ์๋ Admin ๋ฒํผ์ ํด๋ฆญํด์ ๊ด๋ฆฌ ํ์ด์ง๋ก ์ด๋ํ๋ค(๊ทธ๋ฆผ 4-10).
๊ทธ๋ฆผ 4-10. GitHub์ ํ๋ก์ ํธ ๊ด๋ฆฌ ํ์ด์ง
๋ค๋ฅธ ์ฌ๋์๊ฒ ์ฐ๊ธฐ ๊ถํ์ ์ฃผ๋ ค๋ฉด โAdd another collaboratorโ ๋งํฌ๋ฅผ ํด๋ฆญํ๋ค. ๊ทธ๋ฌ๋ฉด ํ ์คํธ ๋ฐ์ค๊ฐ ์๋ก ๋ํ๋๋ ๋ฐ ๊ฑฐ๊ธฐ์ ์ฌ์ฉ์ ์ด๋ฆ์ ์ ๋ ฅํ๋ค. ์ฌ์ฉ์ ์ด๋ฆ์ ์ ๋ ฅํ๊ธฐ ์์ํ๋ฉด ์๋์ผ๋ก ์์คํ ์ ์กด์ฌํ๋ ์ฌ์ฉ์๋ฅผ ์ฐพ์์ ๋ณด์ฌ ์ค๋ค. ์ํ๋ ์ฌ์ฉ์๋ฅผ ์ฐพ์ผ๋ฉด Add ๋ฒํผ์ ํด๋ฆญํด์ ๊ทธ ์ฌ์ฉ์๋ฅผ ๋๋ฃ๋ก ๋ง๋ ๋ค.
๊ทธ๋ฆผ 4-11. ํ๋ก์ ํธ์ ๋๋ฃ ์ถ๊ฐํ๊ธฐ
์ถ๊ฐํ ์ฌ๋์ ๋๋ฃ ๋ชฉ๋ก ๋ฐ์ค์์ ๋ชจ๋ ํ์ธํ ์ ์๋ค(๊ทธ๋ฆผ 4-12).
๊ทธ๋ฆผ 4-12. ํ๋ก์ ํธ ๋๋ฃ๋ค
๊ทธ๋ฆฌ๊ณ ๋ง์ฝ ๋ค์ ํผ์ ์์ ํ๊ณ ์ถ์ด์ง๋ฉด "revoke" ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ์ซ์๋ธ๋ค. ์ซ๊ฒจ๋๋ฉด ๋๋ Pushํ ์ ์๋ค. ๋ ๊ธฐ์กด ํ๋ก์ ํธ์ ๋ฑ๋ก๋ ๋๋ฃ๋ฅผ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด ์ถ๊ฐํ ์๋ ์๋ค.
๋ด ํ๋ก์ ํธ
Subversion์์ Importํ๊ฑฐ๋ ๋ก์ปฌ์ ํ๋ก์ ํธ๋ฅผ Pushํ๊ณ ๋๋ฉด ํ๋ก์ ํธ ๋ฉ์ธ ํ์ด์ง๊ฐ ๊ทธ๋ฆผ 4-13๊ฐ์ด ๋ฐ๋๋ค.
๊ทธ๋ฆผ 4-13. GitHub์ ํ๋ก์ ํธ ๋ฉ์ธ ํ์ด์ง
์ฌ๋๋ค์ด ์ด ํ๋ก์ ํธ์ ๋ฐฉ๋ฌธํ๋ฉด ์ด ํ์ด์ง๊ฐ ์ ์ผ ์ฒ์ ๋ณด์ธ๋ค. ์ด ํ์ด์ง๋ ๋ช ๊ฐ์ง ํญ์ผ๋ก ๊ตฌ์ฑ๋๋ค. Commits ํญ์ ์ง๊ธ๊น์ง์ ์ปค๋ฐ์ git log
๋ช
๋ น์ ์คํ์ํจ ๊ฒ์ฒ๋ผ ์ต์ ๊ฒ๋ถํฐ ๋ณด์ฌ์ค๋ค. Network ํญ์ ํ๋ก์ ํธ๋ฅผ ๋ณต์ ํ ์ฌ๋๋ค๊ณผ ๊ธฐ์ฌํ ์ฌ๋๋ค์ ๋ชจ๋ ๋ณด์ฌ์ค๋ค. Downloads ํญ์๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ด๋ ํ๋ก์ ํธ์ ํ๊ทธ ๋ฒ์ ์ ์์ถํด์ ์ฌ๋ฆด ์ ์๋ค. Wiki ํญ์ ํ๋ก์ ํธ์ ๋ํ ์ ๋ณด๋ ๋ฌธ์๋ฅผ ์ฐ๋ ๊ณณ์ด๋ค. Graphs ํญ์ ์ฌ๋๋ค์ ํ๋์ ๊ทธ๋ฆผ๊ณผ ํต๊ณ๋ก ๋ณด์ฌ์ค๋ค. ๋ฉ์ธ ํญ์ธ Source ํญ์ ํ๋ก์ ํธ์ ๋ฉ์ธ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ README ํ์ผ์ด ์์ผ๋ฉด ์๋์ผ๋ก ํ๋ฉด์ ์ถ๋ ฅํด ์ค๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง ์ปค๋ฐ ๋ด์ฉ๋ ํจ๊ป ๋ณด์ฌ์ค๋ค.
ํ๋ก์ ํธ Fork
๊ถํ์ด ์๋ ํ๋ก์ ํธ์ ์ฐธ์ฌํ๊ณ ์ถ์ผ๋ฉด GitHub๋ ํ๋ก์ ํธ๋ฅผ Forkํ๋๋ก ๊ถ๊ณ ํ๋ค. ๋ง์นจ ๋งค์ฐ ํฅ๋ฏธ๋กญ๊ฒ ๋ณด์ด๋ ํ๋ก์ ํธ๋ฅผ ๋ฐ๊ฒฌํ๋ค๊ณ ํ์. ๊ทธ ํ๋ก์ ํธ๋ฅผ ์กฐ๊ธ ๋ฏ์ด๊ณ ์น๋ ค๋ฉด ํ๋ก์ ํธ ํ์ด์ง ์๋จ์ ์๋ "fork" ๋ฒํผ์ ํด๋ฆญํ๋ค. ๊ทธ๋ฌ๋ฉด GitHub๋ ์ ์ํ ์ฌ์ฉ์์ ๊ณ์ ์ผ๋ก ํ๋ก์ ํธ๋ฅผ Forkํด ์ค๋ค. ์ฌ์ฉ์๋ ์ด ํ๋ก์ ํธ์ ๋ง์๋๋ก Pushํ ์ ์๋ค.
๊ตณ์ด Pushํ ์ ์๋๋ก ์ฌ๋๋ค์ ๋๋ฃ๋ก ์ถ๊ฐํ์ง ์์๋ ๋๋ค. ์ฌ๋๋ค์ ๋ง์๊ป ํ๋ก์ ํธ๋ฅผ Forkํ๊ณ Pushํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ ํ๋ก์ ํธ์ ๊ด๋ฆฌ์๋ ๋ค๋ฅธ ์ฌ๋์ ํ๋ก์ ํธ๋ฅผ ๋ฆฌ๋ชจํธ ์ ์ฅ์๋ก ์ถ๊ฐํ๊ณ ๊ทธ ์์ ๋ฌผ์ ๊ฐ์ ธ์์ Mergeํ๋ค.
ํ๋ก์ ํธ ํ์ด์ง์ ๋ค์ด๊ฐ์ ์๋จ์ "fork" ๋ฒํผ์ ํด๋ฆญํ์ฌ ํ๋ก์ ํธ๋ฅผ ๋ณต์ ํ๋ค(๊ทธ๋ฆผ 4-14) ๊ทธ๋ฆผ 4-14์ ์๋ mojombo/chronic ํ๋ก์ ํธ ํ์ด์ง์ด๋ค
๊ทธ๋ฆผ 4-14. ์ด๋ค ์ ์ฅ์๋ ์ง "fork" ๋ฒํผ์ ํด๋ฆญํ๋ฉด Pushํ ์ ์๋ ์ ์ฅ์๋ฅผ ์ป์ ์ ์๋ค
ํด๋ฆญํ๋ ์๊ฐ, ์ด ํ๋ก์ ํธ๋ฅผ ์ฆ์ Forkํ๋ค(๊ทธ๋ฆผ 4-15).
๊ทธ๋ฆผ 4-15. Forkํ ํ๋ก์ ํธ
GitHub ์์ฝ
๋นจ๋ฆฌ ํ๋ฒ ์ ์ฒด๋ฅผ ํ์ด๋ณด๋ ๊ฒ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์์๋ GitHub์ ๋ํด ์ด ์ ๋๋ก๋ง ์ค๋ช ํ๋ค. ๋ช ๋ถ ๋ง์ ๊ณ์ ๊ณผ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ Push๊น์ง ํ ์ ์๋ค. GitHub์ ์๋ ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ๊ท๋ชจ๋ ๋งค์ฐ ํฌ๊ธฐ ๋๋ฌธ์ ๋ง์ฝ GitHub์ ์คํ ์์ค ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ฉด ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ด ๋น์ ์ ํ๋ก์ ํธ๋ฅผ ๋ณต์ ํ๊ณ ๋น์ ์ ๋์ธ ๊ฒ์ด๋ค. GitHub๋ Git์ ๋นจ๋ฆฌ ์ฌ์ฉํด ๋ณผ ์ ์๋๋ก ๋๋๋ค.
์์ฝ
๋ฆฌ๋ชจํธ ์ ์ฅ์๋ฅผ ๋ง๋ค๊ณ ๋ค๋ฅธ ์ฌ๋๊ณผ ํ์ ํ๊ฑฐ๋ ์์ ๋ฌผ์ ๊ณต๊ฐํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง๋ค.
์๋ฒ๋ฅผ ์ง์ ๊ตฌ์ถํ๋ ๊ฒ์ ํ ์ผ์ด ๋ง์๋ฐ๋ค๊ฐ ๋ฐฉํ๋ฒฝ๋ ํ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ ์๋ฒ๋ฅผ ๋ง๋ค๊ณ ๊ด๋ฆฌํ๋ ์ผ์ ์๊ฐ์ด ๋ง์ด ๋ ๋ค. ํธ์คํ ์ฌ์ดํธ๋ฅผ ์ด์ฉํ๋ฉด ์ฝ๊ฒ ์์ํ ์ ์๋ค. ํ์ง๋ง, ์ฝ๋๋ฅผ ํ์ธ์ ์๋ฒ์ ๋ณด๊ดํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ์ง ์๋ ์กฐ์ง๋ค์ด ๋ง๋ค.
์์ ์ ์กฐ์ง์์ ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก ํ์ ํด์ผ ํ ์ง ๊ณ ๋ฏผํด์ผ ํ๋ ์์ ์ด ๋์๋ค.
Last updated
Was this helpful?