Opensource SW #03 | Git
2022๋ 10์ 21์ผ 14:42
Git introduction
๐ git
๊น์ ์คํ์์ค๋ก ์ ๊ณต์ด ๋๋ ๋ถ์ฐํ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ด๋ค.
SVN : ์ค์ ์๋ฒ์ ์์ค์ฝ๋์ ํ์คํ ๋ฆฌ๋ฅผ ์ ์ฅ
Git : ์์ค์ฝ๋๋ฅผ ์ฌ๋ฌ ๊ฐ๋ฐ PC์ ์ ์ฅ์์ ๋ถ์ฐํด์ ์ ์ฅ
๐ git vs github
git: ๋ก์ปฌ ์์คํ ์ ์ค์น๋์ด์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ผ๋ก CLI๋ก ์ ๊ณต์ด ๋๋ค.
github: ํ์ ์ ์ํด ์๊ฒฉ์ผ๋ก ๊น ๋ ํฌ์งํฐ๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํธ์คํ ์๋น์ค์ด๋ค. GUI๋ก ์ ๊ณต์ด ๋๋ค.
๐ git์ด ์ ๊ณตํ๋ 3๊ฐ์ง ๊ธฐ๋ฅ
- ๋ฒ์ ๊ด๋ฆฌ: ๋๊ฐ, ์ธ์ , ๋ฌด์์ ์์ ํ๋์ง์ ๋ํด ๊ตฌ์ฒด์ ์ผ๋ก ์ฒดํฌํ ์ ์๋ค.
- ๋ฐฑ์ : github์์ ์๊ฒฉ ๋ ํฌ์งํฐ๋ฆฌ๋ฅผ ํตํด ๋ฐฑ์ ์ด ๊ฐ๋ฅํ๋ค.
- ํ์ : ์ฌ๋ฌ๋ช ์ด ๊ฐ์ ํ๋ก์ ํธ๋ฅผ ๊ณต์ ํ๊ณ ์ถฉ๋์ ๋ฐฉ์งํ ์ ์๋ค.
์์๋๋ก ๋ฐฐ์์ผ ํจ๊ณผ์ ์ผ๋ก ๋ฐฐ์ธ ์ ์๋ค.
Git Version Control
git์์๋ ๋ฒ์ ์ ๋ฐ๋ผ ํ์ผ์ ๋ค๋ฅด๊ฒ ์ ์ฅํ๋ ๊ฒ ์๋๋ผ ๊ฐ ๋ฒ์ ์ ๋ฐ๋ฅธ ์์ ๋ด์ฉ์ ์ ์ฅํ์ฌ ๋ฒ์ ์ ๊ด๋ฆฌํ๋ค.
git์ด ์ด๋ป๊ฒ ๋ฒ์ ์ ๊ด๋ฆฌํ๋์ง ์์ญ๊ณผ ์ํ, ๊ทธ๋ฆฌ๊ณ ํ์ผ์ ๊ธฐ์ค์ผ๋ก ์์๋ณด๊ณ , ๊ด๋ จ ๋ช ๋ น์ด๋ฅผ ์ตํ๋ณด์.
๐ git์ด ๋ฒ์ ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ - ์์ญ
git์๋ ์๋์ 3๊ฐ์ ์์ญ์ด ์๋ค.
- Working tree(Working directory): git repository๊ฐ ์กด์ฌํ๋ ํ์ฌ directory๋ก ํ์ฌ ํ์ผ์ด ์ ์ฅ๋๋ ํด๋์ด๋ค.
- Stage(Staging area): ๋์ ๋ณด์ด์ง ์๋ ๋จ๊ณ๋ก ๋ฒ์ ์ผ๋ก ๋ง๋ค ํ์ผ๋ค์ด ๋๊ธฐํ๋ ์ค๊ฐ ์์ญ์ด๋ค.
git add - Repository: Stage์ ๋๊ธฐํ๊ณ ์๋ ํ์ผ๋ค์ ๋ฒ์ ์ผ๋ก ๋ง๋ค์ด ์ ์ฅํ๋ ์์ญ์ด๋ค.
git commit
๐ git์ด ๋ฒ์ ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ - ์ํ
Working tree์ ์๋ ํ์ผ๋ค์ ํฌ๊ฒ trakedํ์ผ๊ณผ untrackedํ์ผ๋ก ๋๋๋ค.
- Untracked: git์ ์ด๊ธฐํํ๊ฑฐ๋ ํ์ผ์ ์๋ก ๋ง๋ค ๋, ์์ง git์ ์ฌ๋ผ๊ฐ์ง ์์ ํ์ผ๋ค์ ์๋ฏธํ๋ค.
-
Traked: Stage ์์ญ์ ํ ๋ฒ์ด๋ผ๋ ๊ฐ ํ์ผ๋ค์ Trakedํ์ผ์ด๋ฉฐ ํฌ๊ฒ Unmodified์ Modified๋ก ๋๋๋ค.
- Unmodified: commitํ ํ ์์ ๋์ง ์์ ํ์ผ๋ค
- Modified: ํ์ผ๋ค์ ์์ ํ๊ณ ์์ง staged ๋์ง ์์ ํ์ผ๋ค
- Staged: ์์ ํ๊ณ
git add๋ช ๋ น์ด๊ฐ ์ ๋ ฅ๋ ์ํ์ ํ์ผ๋ค
๐ git์ด ๋ฒ์ ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ - ํ์ผ
git์ ๋ด๋ถ์ ์ผ๋ก commit, tree, blob, tag์ 4๊ฐ์ง ์ค๋ธ์ ํธ ํ์ ์ ๊ด๋ฆฌํ๋ค.
์ด๋ฐ ์ค๋ธ์ ํธ๋ .git/objects์ ๊ฐ๋ณ์ ์ธ ํ์ผ๋ค๋ก ์กด์ฌํ๋ฉฐ, ๊ฐ๊ฐ์ด ํ๋์ ํ์ผ์ด๋ค.
git์ โhello.txtโ๋ผ๋ ํ์ผ์ ํ๋ ์ถ๊ฐํ๋ฉด, ๋ด์ฉ ์ ๋ถ๋ฅผ ํด์ํ ์ด๋ธ์ ๋ฃ์ด, 40์๋ฆฌ์ ํด์๊ฐ์ ๋ฝ์๋ด์ด ์ค๋ธ์ ํธ ํ์ผ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๋ค.
์ค๋ธ์ ํธ์ ํ์ผ์ด๋ฆ ์ค ์ 2๊ธ์๋ ๋๋ ํ ๋ฆฌ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๊ณ ,๋๋จธ์ง 38๊ธ์๋ฅผ ํ์ผ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๊ฒ ๋๋ค.
๐ git ๋ช ๋ น์ด - ๋ฒ์ ๊ด๋ฆฌ
git init: ์๋ก์ด git repository(.git)๋ฅผ ์์ฑํ๋ค.git status: ํ์ฌ git์ ์ํ๋ฅผ ํ์ธํ๋ ๋ช ๋ น์ด๋ก ํ์ฌ ์ด๋ค ํ์ผ์ด ์ถ์ ๋๊ณ ์๋์ง ํ์ธํ ์ ์๋ค.-
git log: ์ปค๋ฐํ ๋ฒ์ ๋ค์ ๋ํ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ ์ ์๋ค. ๊ฐ ๋ฒ์ ๋ณ๋ก[40๊ธ์์ commit hash, commit message, Author, Date]๊ฐ ์ถ๋ ฅ๋๋ค.--stat: ๊ฐ commit๋ง๋ค ์ด๋ค ํ์ผ์ด ์ฐ๊ด๋์ด ์๋์ง ํจ๊ป ์ถ๋ ฅ--oneline: ํ๋์ ๋ผ์ธ์ผ๋ก ๊ฐ๋จํ๊ฒ ์ถ๋ ฅ
git diff: modifiedํ์ผ๋ค์ ์ต์ ๋ฒ์ ๊ณผ ๋น๊ตํ์ฌ ์ฐจ์ด์ ์ ์ถ๋ ฅํ๋ ๋ช ๋ น์ดgit add: Untracked ํ์ผ๋ค ๋๋ Tracked์ค์ Modified ํ์ผ๋ค์ Stage์์ญ์ ์ ์ฅํ๋ค.-
git commit: staging area์ ์๋ ํ์ผ๋ค์ repository์ ์ ์ฅํ๋ค.-m: ์๋ํฐ๊ฐ ์ด๋ฆฌ์ง ์๊ณ , ๋ฐ๋ก commit ํค๋๋ฅผ ์์ฑํ ์ ์๋ค.-a: add์ ๋์์ commit์ ์งํํ๋ค.
-
git revert -- [file]: ์ด์ ๋ฒ์ ์ผ๋ก ๋๋์๊ฐ ์์ ๋ ํ์ผ์ ๋๋๋ฆฐ๋ค.(modified ์ํ์ ์๋ ํ์ผ์ด unmodified์ํ๊ฐ ๋๋ค.)revert [์ปค๋ฐ hash]:git reset --hard๋ ๋๋ฌด ์ํํด์ revertํ ์ปค๋ฐ์ ์๋ก ๋ง๋ค์ด์ ํด๋น ์ปค๋ฐ์ผ๋ก ๋๋์๊ฐ๋ค.
-
git reset HEAD [file]: ํด๋น ํ์ผ์ ๊ฐ์ฅ ์ต๊ทผ staging์ ์ทจ์ํ๋ค.HEAD^: ๊ฐ์ฅ ์ต๊ทผ commit์ ์ทจ์ํ๋ค.--hard [์ปค๋ฐ hash]: ํด๋น ์ปค๋ฐ์ผ๋ก ๋๋์๊ฐ๋ค. ์ด๋๊น์ง์ ๋ชจ๋ ์ปค๋ฐ๋ค์ด ์ญ์ ๋๊ณ ํ์ผ์์ ๋ ์ทจ์๋๋ค.
-
git restore:--staged:git reset HEAD [file]๊ณผ ๋์ผํ๊ฒ ํด๋น staging์ด ์ทจ์๊ฐ ๋๋ค.
Git Branch
๋ธ๋์น๋ git๋ฟ๋ง ์๋๋ผ ๊ฑฐ์ ๋ชจ๋ version๊ด๋ฆฌ ์์คํ ์ ์กด์ฌํ๋ ๊ธฐ๋ฅ์ผ๋ก, ์ด๋ฅผ ์ฌ์ฉํ๋ฉด main์ฝ๋๋ ๊ทธ๋๋ก ๋ ์ฑ๋ก main์ฝ๋์ ์ฝ๋๋ฅผ ์์ ํ๊ฑฐ๋ ์ถ๊ฐํ๋ ์ฝ๋๋ฅผ ๋์์ ์ผ๋ก ์์ฑํ ์ ์๋ค.
๐ Branch๊ด๋ จ ๋ช ๋ น์ด
- ๋ธ๋์น ์์ฑ:
git branch sub - ๋ธ๋์น ์ญ์ : main๋ธ๋์น์์
git branch -d sub - ๋ธ๋์น ์ด๋:
git checkout sub - ๋ธ๋์น merge: main๋ธ๋์น์์
git merge sub - ๋ชจ๋ ๋ธ๋์น ์ํ:
git log --branches - ํธ๋ฆฌ๊ตฌ์กฐ์ ๋ชจ๋ ๋ธ๋์น ์ํ:
git log --branches --graph - branch1์๋ ์๊ณ , branch2์ ์๋ commit ํ์ธ:
git log <branch1>..<branch2> - ์ ๊น ๊ฐ์ถ๋ค:
git stash
Github
๐ Remote & Local repository
๋ฐฑ์ ๊ณผ ํ์ ์ ์ํด ๋๊ฐ๋ฅผ ๋๋๋ค.
Remote repository(GitHub): ์๋ฒ๋ฅผ ํตํด ๋ง๋ค์ด์ง ์๊ฒฉ ์ ์ฅ์
Local repository(Git): ํ์ฌ ์์ ์ค์ธ ์ปดํจํฐ์ git repository
๐ Github๊ด๋ จ ๋ช ๋ น์ด
- remote์ local ์ฐ๊ฒฐ:
git remote add origin "์ฃผ์"
git clone [์๊ฒฉ์ ์ฅ์url]์ ํตํด ์๊ฒฉ์ ์ฅ์๋ฅผ ๋ณต์ฌํ๋ค๋ฉด ์๋์ผ๋กorigin์ด๋ผ๋ ์ด๋ฆ์ผ๋ก[์๊ฒฉ์ ์ฅ์url]์ฃผ์๊ฐ ์๊ฒฉ์ ์ฅ์๋ก ๋ฑ๋ก๋๊ฒ๋๋ค
- ์ฐ๊ฒฐ๋ remote repository ํ์ธ:
git remote -v - local์ Remote Repository๋ก ์
๋ก๋:
git push origin ๋ธ๋์น์ด๋ฆ - remote๋ฅผ Local Repository๋ก ๋ค์ด๋ก๋:
git pull origin ๋ธ๋์น์ด๋ฆ