
๐ ํจํธ์ค์บ ํผ์ค ๋ฐ๋ธ์บ ํ ํ๋ก ํธ์๋ 1์ฃผ์ฐจ ํน๊ฐ ์๊ฐ ํ ์ค์ต ๋ฐ ๋ณต์ต ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
๐ ์๋ชป๋ ์ ๋ณด๋ ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ์ ๋ง ๊ฐ์ฌํฉ๋๋ค!
๐ ํ์ต์ ๋์๋ ๋์ : ํ ๊ฐ๋ฐ์ ์ํ Git, GitHub ์์ํ๊ธฐ
์ผ์์ํ์์ ๊ณผ์ ๋ ์ ๋ฌด๋ฅผ ํ๋ค ๋ณด๋ฉด ํน์ ํ์ผ์ ์์ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ด ๋ฐ์ํฉ๋๋ค. ๊ทธ๋ด ๋๋ ๋ณดํต ๊ธฐ์กด์ ํ์ผ์ ๋ณต์ฌํ ํ ์์ ํ๊ฒ ๋๊ณ , ์ด ๊ณผ์ ์์ ๋์ผํ ๋ชฉ์ ์ ๊ฐ์ง ํ์ผ์ด ์ฌ๋ฌ ๊ฐ ๋ง๋ค์ด์ง๊ฒ ๋ฉ๋๋ค. ๋ํ, ํ๋์ ํ๋ก์ ํธ๋ฅผ ๋ ๋ช ์ด์์ด ๊ด๋ฆฌํ๊ฒ ๋๋ฉด ์ฌ๋ฌ ์ฌ๋์ด ๊ฐ์ ํ์ผ์ ์์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ค์ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ด์ ์ฌ๋ฌ ๋ช ์ด ์ฐธ์ฌํ๋ ๊ฐ๋ฐ ํ๋ก์ ํธ์์๋ Git๊ณผ GitHub๋ฅผ ์ฌ์ฉํด ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ํ์ง๋ง ์ฒ์ ์ ํ๋ ๋ถ๋ค์ "Git์ด GitHub ์๋์ผ?"๋ผ๊ณ ์ฐฉ๊ฐํ๊ธฐ๋ ํ๊ณ , ๋ค๋ฅด๋ค๋ ๊ฒ์ ์์ง๋ง ์ ํํ ๋ฌด์์ด ๋ค๋ฅธ์ง ํท๊ฐ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. (๊ทธ๊ฒ ๋ฐ๋ก ์ ) ๊ทธ๋์ ์ด๋ฒ ํฌ์คํ ์ ํตํด Git๊ณผ GitHub์ ์ฐจ์ด์ ์ ๋ํด ์์๋ณด๊ณ , Git์ด ์ด๋ป๊ฒ ํ์ผ์ ๊ด๋ฆฌํ๋์ง์ ๋ํด ์์ ๋ณด๋ ค ํฉ๋๋ค.
Git์ ๋ถ์ฐํ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ผ๋ก ํ์ผ์ ๋ณ๊ฒฝ ์ด๋ ฅ์ ๊ด๋ฆฌํฉ๋๋ค.
์ฌ๊ธฐ์ ๋ฒ์ ๊ด๋ฆฌ๋? ๋ด๊ฐ ์ํ๋ ์์ (๋ฒ์ )์ผ๋ก ์ด๋ํ ์ ์๊ฒ ํด์ฃผ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๋ฅผ ๋์์ฃผ๋ ์์คํ ์ด ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ด๋ฉฐ, ๋ค์ํ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ค ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๊ฒ์ด Git์ ๋๋ค.
ํธ์คํ ์ด๋? ์ผ์ ๊ณต๊ฐ์ ์ด์ฉํ ์ ์๋๋ก ์๋ํด ์ฃผ๋ ์๋น์ค๋ฅผ ์๋ฏธํฉ๋๋ค.
์ฐ๋ฆฌ๋ Git์ ์ฌ์ฉํด ํ๋ก์ ํธ์ ๋ฒ์ ์ ๋ณด๋ค ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ํ์ง๋ง, ์ฌ๋ฌ ์ฌ๋๊ณผ ํ์ ํ๋ ์ํฉ์์ ๋ด ์ปดํจํฐ์์๋ง ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํ๋ฉด ๊ทธ๊ฒ ํฐ ์๋ฏธ๊ฐ ์์๊น์? ์ด์ ์ฐ๋ฆฌ๋ GitHub๋ผ๋ ํธ์คํ ์๋น์ค๋ฅผ ์ฌ์ฉํด Git์ผ๋ก ๊ด๋ฆฌํ๋ ํ๋ก์ ํธ๋ฅผ ์น์์ ์ฌ๋ ค๋๊ณ ๊ณต๊ฐ๊ณผ ์๊ฐ์ ์ ์ฝ ์์ด ์ฌ๋ฌ ์ฌ๋๋ค๊ณผ ํ์ ํ ์ ์์ต๋๋ค.
์ ์ฌ์ง์ ๋ก์ปฌ ํ๊ฒฝ์์ git-obj ํด๋๋ฅผ git init ๋ช
๋ น์ด๋ก ์ด๊ธฐํํ ์ํ๋ก, ์์ง ์๋ฌด ํ์ผ๋ ์์ฑ๋์ง ์์ ์ํ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ .git/objects ํด๋๋ Git ๊ฐ์ฒด๊ฐ ์ ์ฅ๋๋ ๊ณณ์ผ๋ก ํ์ฌ๋ ๋๊ฐ์ด ์๋ฌด๊ฒ๋ ์กด์ฌํ์ง ์๋ ์ํ์
๋๋ค.
README.md ํ์ผ์ ํ๋ ์์ฑํ๊ณ , git status ๋ช
๋ น์ ํตํด ํ์ผ์ ์ํ๋ฅผ ํ์ธํ๋ฉด Untracked ์ํ์ธ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์์ง๊น์ง๋ ์ํน ํธ๋ฆฌ์ ํ์ผ์ด ์ถ๊ฐ๋ ๊ฒ ์ธ์ ๋ณ๋ค๋ฅธ ๋ณํ๋ ์์ต๋๋ค.
(Tip) Git Index๋ ์คํ ์ด์ง์ ๋ค๋ฅธ ์ด๋ฆ์ ๋๋ค.
git add README.md ๋ช
๋ น ์คํ ํ git status ๋ช
๋ น์ผ๋ก ์ํ๋ฅผ ํ์ธํ๋ฉด README.md ํ์ผ์ด ์คํ
์ด์ง์ ์ถ๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ๋ํ .git ๋ด๋ถ์ index ํ์ผ์ด ํ๋ ์์ฑ๋ ๊ฒ์ ๋ณผ ์ ์๋๋ฐ, ์ด ํ์ผ์ด ๋ฐ๋ก Git์ ์คํ
์ด์ง(Git Index)์
๋๋ค.
๊ทธ๋ฆฌ๊ณ .git/objects ํด๋๋ฅผ ํ์ธํด๋ณด๋ฉด ๋ชป ๋ณด๋ 2f ํด๋๊ฐ ์๊ธด ๊ฒ์ ์ ์ ์์ต๋๋ค. ์ด๋ Git ๊ฐ์ฒด ์ค ํ๋๋ก git cat-file -t ํด์ ๋ช
๋ น์ ํตํด blob ๊ฐ์ฒด์์ ํ์ธํ ์ ์์ต๋๋ค.
์ด๋ ํด๋๋ช
, ํ์ผ๋ช
์ด ์์ฑ๋๋ ๊ท์น์ ์๋์ Git์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ์ฐธ๊ณ ํด์ฃผ์ธ์!
โ๏ธ index ํ์ผ ๋ด์ฉ์ด ๊ถ๊ธํ๋ค๋ฉด?
git ls-files --stage๋ช ๋ น์ ํตํด ํ์ธํ ์ ์์ต๋๋ค.
โ๏ธ Git์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ
Git์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ๋ฐ์ดํฐ์ ํค๋๋ก ์์ฑํ SHA-1 ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ผ ์ด๋ฆ์ ์ง์ต๋๋ค. ํด์์ ์ฒ์ ๋ ๊ธ์๋ฅผ ๋ฐ์ ๋๋ ํ ๋ฆฌ ์ด๋ฆ์ ์ฌ์ฉํ๊ณ ๋๋จธ์ง 38๊ธ์๋ ํ์ผ ์ด๋ฆ์ ์ฌ์ฉํฉ๋๋ค. ์์ธํ ๋ด์ฉ๊ณผ ์ค์ต๋ฐฉ๋ฒ์ ๊ณต์ ๋ฌธ์๋ฅผ ํตํด ํ์ธํ ์ ์์ต๋๋ค.
commit ๋ช
๋ น ์คํ ํ git status ๋ช
๋ น์ผ๋ก ์ํ๋ฅผ ํ์ธํ๋ฉด '์์
ํด๋ ๊นจ๋ํจ(clean)' ์ํ์์ ํ์ธํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ clean ์ํ๋ ์คํ
์ด์ง๊ฐ ๋น์ด์๋ค๊ฐ ์๋ ์ํนํธ๋ฆฌ์ ์คํ
์ด์ง, HEAD ์ปค๋ฐ์ ๋ด์ฉ์ด ๋๊ฐ๋ค๋ ๋ป์
๋๋ค.
.git/objects ํด๋์ ๋ณํ๋ฅผ ์ดํด๋ณด๋ฉด 2๊ฐ์ ๊ฐ์ฒด๊ฐ ์ถ๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ git cat-file -t ํด์ ๋ช
๋ น์ด๋ก ํ์
์ ํ์ธํด๋ณด๋ฉด ๊ฐ๊ฐ tree์ commit ๊ฐ์ฒด์์ ํ์ธํ ์ ์์ต๋๋ค.
โ๏ธ Tree ๊ฐ์ฒด
์ผ์ข ์ ๋๋ ํ ๋ฆฌ(ํด๋) ์ญํ ์ ๋ด๋นํ๋ฉฐ ํ์ผ์ ํ์ ๊ณผ ํด์๊ฐ, ์ค์ ํ์ผ๋ช ์ ํฌํจํ๋ ๊ฐ์ฒด์ ๋๋ค.