What is Git? - ParkEunwoo/seoul-smart-app GitHub Wiki
1. Git ์ด๋ ๋ฌด์์ธ๊ฐ?
-
โ๏ธ๋ฒ์ ๊ด๋ฆฌ๋ฅผ์ํ ์ํํธ์จ์ด
- ๋ฒ์ ๊ด๋ฆฌ? -์์ค ํ๋ ๋๋ ๋ฌถ์์ ํ๋์ ๋ฒ์ ์ผ๋ก ๊ฐ์ฃผํ์ฌ ๊ด๋ฆฌ -ํ๋ก์ ํธ ์ด๋ค ๋ถ๋ถ๋ ๊ฒน์ณ์ฐ์ง ์๊ฒ ํ๋ก์ ํธ ๋ณ๊ฒฝ์ ๊ด๋ฆฌ -ํ์ผ/ํด๋๋ฅผ ์ถ๊ฐ/์์ /์ญ์ ํ์ฌ ์ฌ๋์ด ์ง์ ๋ฌถ์์ ๋ฒ์ ์ผ๋ก ๊ด๋ฆฌ
- -> ex. ์ต์ข .ai, ในใ ์ต์ข .ai, ์ด๊ฑฐ์ง์ง์ต์ข .ai, ํ์ด๊ฒ์ง์ง.ai โฆ ์ด๋ ๊ฒ ์ฌ๋ฌ๋ฒ์ ์ ์ ์ฅํ ํ์ ์์ด, ์ ์ฅํ๋ฉด ์ด์ file ์์ overwriteํ๊ฑฐ๋ ์ฌ๋ฌ version์ผ๋ก ๋๋์ด ์ ์ฅํจ
-
โ๏ธ๋ถ์ฐ์ ์ฅ์
- ๊ฐ๋ฐ ํ์ ์ ์ํด ์ฌ์ฉ -๊ฐ์ ๋ชจ๋์ ๊ฐ๋ฐํ๋๋ผ๋ ์์ค๋ฅผ ์๋ก ๊ณต์ ํ๋ฉด์ ๊ฐ๋ฐ -์ ์ฒด ๊ฐ๋ฐ ์์ค๋ฅผ ๊ณต์ ํ๋ฉฐ ๊ฐ๋ฐํํธ๋ฅผ ๋๋์ด ๊ณต์
-
โ๏ธGitHub๋? : Git ์ ์ฅ์๋ฅผ ์ง์ ์ค์นํ์ง ์๊ณ , GitHub์ ํตํด ์ฌ์ฉ ๊ฐ๋ฅ
- GitHub-fork : ๋ค๋ฅธ์ฌ๋์ ์ ์ฅ์๋ฅผ ๊ฐ์ ธ์ ์ ์ ์ฅ์๋ก ๋ง๋ค์ด๋๋ ๊ธฐ๋ฅ
- ์คํ์์ค๋ฅผ pull / commit ํ์ฌ ์ฌ์ฉ๊ฐ๋ฅ
2. ๊น์ ๋์ ์๋ฆฌ
git์ 4๊ฐ์ง ๊ฐ์ฒด๋ก ๊ตฌ์ฑ๋๋ค.
: blob, tree, commit, tag
- blob : ํ์ผ์ ๋ด์ฉ์ ๋ด์
- tree : ๋๋ ํ ๋ฆฌ์ ํ์ผ๋ช /๋ด์ฉ์ ํด๋น๋๋ ๋ธ๋ฝ์ ์ ๋ณด
- commit : commit ์ ๋ณด
- tag : branch์ ๋ฌ๋ฆฌ ํน์ ๋ฒ์ ์์น์ ๋ํด ๋์ค์ ์ฐพ์๊ฐ ์ ์๋๋ก ์ด๋ฆ์ ์ง์ ํด๋์๊ฒ ๋ฟ!
3. Git branch
: ๋ฒ์ ๋ค์ ๋ฌถ์ด์ branch ๋ผ๊ณ ํํ -> branch๋ ์๋ค๊ฐ๋คํ๋ฉฐ ๊ฐ๊ฐ์ ๋ํด ๋ด์ฉ์ ๋ณ๊ฒฝ, ๋ฒ์ ๊ด๋ฆฌ
- default branch : master //
git branch
๋ช ๋ น์ด๋ก ํ์ฌ branch ํ์ธ ๊ฐ๋ฅ - ๋ด ์ปดํจํฐ ๋ด์ ์๋ branch : local branch ์ธ๋ถ ์๋ฒ์ ์๋ branch: remote branch
branch ์์ฑ
$ git branch pong
$ git branch
pong
* master
$ git checkout pong
Switched to branch 'pong'
$ git branch
* pong
master
/////////////////////////////
//์๋ฅผ ํ๊บผ๋ฒ์ ํ๋ ค๋ฉด,
$ git checkout -b pong
4. Git ์ฉ์ด
- ์ ์ฅ์(Repository) : ํ๋ก์ ํธ๊ฐ live ํ ์ ์๋ ๋๋ ํ ๋ฆฌ/์ ์ฅ๊ณต๊ฐ
- ๋ฒ์ ๊ด๋ฆฌ(Version Control) : ๊น์ ์ฃผ๋ชฉ์ . ํ๋ก์ ํธ ํ์คํ ๋ฆฌ์ ๋ชจ๋ ์์ ์ ^์ค๋
์ท^์ ์ ์งํ๋ฏ๋ก, ๊ฒฐ์ฝ ์์ด๋ฒ๋ฆฌ๊ฑฐ๋ ๊ฒน์ณ์ฐ์ง ์์ ์ ์๋ค.
๊ฒน์ณ์ฐ๋ฉด ์คํ๋ ค ์๋ฌ - ์ปค๋ฐ(Commit) :
commit
์ ๊ทธ ์์ repo์ ^์ค๋ ์ท^์ ์ฐ์ด, ํ๋ก์ ํธ๋ฅผ ์ด์ ์ ์ด๋ ํ ์ํ๋ก๋ ์ฌํ๊ฐ/๋ณต์๊ฐ๋ฅํ ์ฒดํฌํฌ์ธํธ๋ฅผ ๊ฐ์ง ์ ์๋ค. - ๋ธ๋์น(Branch) : ๋ฉ์ธ ํ๋ก์ ํธ์ branch off -> ์์ ์ด ๋ณ๊ฒฝํ๊ณ ์ถ์ ๋ถ๋ถ์ ์์ ํ์ฌ ์๋ก์ด ๋ฒ์ ์ ์์ฑ -> ํ๋ก์ ํธ์ ๋ฉ์ธ ๋๋ ํ ๋ฆฌ์ธ
master
์ branch๋ฅผ ๋ค์ merge.
5. ์ฃผ์ ๋ช ๋ น์ด
git init
: ๊น ์ ์ฅ์ ์ด๊ธฐํ. ์ด๊ธฐ, ์ ์ฅ์๋ ๋๋ ํ ๋ฆฌ ์์์ ์ด ๋ช ๋ น์ ์คํํ๋ค.git config
: configure Set up Git - GitHub Helpgit help
:git help init
๋ฑ ๊น์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉ/์ค์ ํ๋ํต์ฌ์ ์ธ ๋ช ๋ น์ด๋ค์ ๋ณด์ฌ์ค๋ค.git add
- index(=stage area, tree๊ตฌ์กฐ)์ object์ด๋ฆ๊ณผ ์ค์ ํ์ผ์ด ์ถ๊ฐ๋๊ณ (tracked) objects์ blobํ์ ์ผ๋ก ํ์ผ๋ด์ฉ์ด ์ถ๊ฐ๋จ
git add .
์ ์ ์ฒด ํ์ผ์ด staging ์ํ๋ก ๋ณํ๋ฉฐ, tracked ๊ฐ๋ฅํ ์ํ๊ฐ ๋๋ค.- ๋ ํฌ์ ์ file์ ์ถ๊ฐํ์ง๋ ์์ง๋ง, ๊น์ด ์ file๋ค์ ์ง์ผ๋ณผ ์ ์๊ฒ ํจ! โ์ค๋ ์ทโ์ ํฌํจ๋๋ค.
git pull
: local pc์์ ์์ ํ ๋, ์์ ํ๊ณ ์๋ ์ ์ฅ์์ ์ต์ ๋ฒ์ ์ ์ํ ๋ ๊นํ์ผ๋ก๋ถํฐ ๋ณ๊ฒฝ์ฌํญ์ ๋ค์ด๋ก๋ํ๋ค. -> ํ์ ์git push
ํ๊ธฐ ์ git pull
์ ํ ํ ๊ฐ์ ธ์ค์.git commit
: ์ ์ฅ์์ โ์ค๋ ์ทโ์ ์ฐ๊ธฐ ์ํด ์ ๋ ฅํ๋ค.git commit -m โCommit Message"
์ ํ์์ผ๋ก ์ฌ์ฉํ๋ค.git push
: ๋ก์ปฌ์์ ์์ ํ๊ณ ๋ณธ์ธ์ ์ปค๋ฐ์ ๊นํ์์ ์จ๋ผ์ธ์ผ๋ก ๋ณผ ์ ์๊ธฐ๋ฅผ ์ํ๊ณ , -> ํ์ ์ ํ ๋ฆฌํ์คํธ๋ฅผ ์๊ตฌํ๊ธฐ์ํ์ฌ ํ๋ ์์ . ์ด๋ push log๋ฅผ ์ ์์ฑํ๋๋ก ํ์.git status
: ์ ์ฅ์ ์ํ๋ฅผ ์ฒดํฌํ๋ ๋ช ๋ น์ด. ํ์ฌ ์ด๋ ๋ ํฌ์ ์ด๋ค ๋ธ๋์น์์ ์์ ํ๊ณ ์๋์ง, staginge๋์ด์๋ ํ์ผ๋ค์ด edit๋์๋์ง ๋ฑ์ ์๋ ค์ฃผ๋ ํจ์์ค๋ฌ์ด ์ ์ฅ์์ด๋ค. -> workspace, index(stage) ํ์ผ์ ๋ด์ฉ๊ณผ ์ต์ commit obj ์ฌ์ด์ ์ฐจ์ด๋ฅผ ๋น๊ตํ์ฌ add, commit ํ ๊ฒ ์๋์ง๋ฅผ ํ์ธ์์ผ์คgit merge
: ํ์ฌ branch์์์ ์์ ์๋ฃ ํ master branch๋ก ๋ณํฉํ ๋ ์ฌ์ฉํ๋ค. : ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ๊ฐ์ ๊ฐ๋ฐํ ๋ฒ์ ์ ํฉ์น๋ ๊ฒฝ์ฐ +์๋ก ๋ค๋ฅธ branch ๋ฅผ ํ๋๋ก ํฉ์น๋ ๊ฒฝ์ฐgit rebase
:git merge
์ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์ผ๋, merge๋ branch ๋ถ๊ธฐ๋ฅผ ๊ทธ๋๋ก ๋์ง๋ง(๋์ค),git rebase
๋ ๋ถ๊ธฐ๋ ๊ฒ์ด ์ผ๋ ฌ๋ก ํฉ์ณ์ง๋ค(ํ์ค) ->git rebase
๋ฅผ ํ๋ฉด ์กฐ์ ์ปค๋ฐ๊ฐ์ฒด(base)๋ฅผ ์๋ ๋ธ๋์น์ ์ต์ ์ปค๋ฐ๊ฐ์ฒด(rebase)๋ก ๋ฐ๊พผ๋ค.
config -> init -> add -> commit -> push
git config โglobal user.name โpongsoyunโ
git config โglobal user.email โ[email protected]โ // ์ต์ด 1ํ ์ค์ !(global)
mkdir ~/MyProject // ๋ก์ปฌ ๋๋ ํ ๋ฆฌ ์์ฑ ํ
cd ~/myproject // ๋๋ ํ ๋ฆฌ๋ก ์ด๋
git init // ๊น ์ ์ฅ์ ์ด๊ธฐํ
git status // ํ์ฌ ์ํ ์ ๊ฒ
git add example.cpp // ํ์ฌ ๋๋ ํ ๋ฆฌ์ example.cpp ํ์ผ ์ถ๊ฐ
git add . // ํ์ฌ ๋๋ ํ ๋ฆฌ์ ๋ชจ๋ ํ์ผ ์ถ๊ฐ
git commit -m โAdd Exampleโ // ์ปค๋ฐํด์ "Add Example" ์์ค๋ช
์ผ๋กํ๋ ์ค๋
์ท์ ์ฐ๋๋ค.
git remote add origin https://github.com/pongsoyun/myproject.git // ๋ก์ปฌ๊ณผ ์๊ฒฉ ์ ์ฅ์๋ฅผ ์ฐ๊ฒฐํ๋ค.
git remote -v // ํ์ฌ ํด๋์ ๋ก์ปฌ๊ณผ ์๊ฒฉ ์ ์ฅ์ ์ฐ๊ฒฐ์ํ๋ฅผ ํ์ธ(์ฃผ์)
git push origin master // ๊นํ์ผ๋ก ํธ์ฌ
์ ๊ณผ์ ์ ๊ฑฐ์ณ ํธ์ฌ ์๋ฃ -> ํ์๋ค์ feedback ํ pull request
-> merge -> pull
ํ์ฌ ๋ก์ปฌ์ ๋ ํฌ๋ฅผ ์ต์ ์ ๊ฒ์ผ๋ก ์ ์ง
cf
Files Status
- ํฌ์ฅ ์ ์ธ ํ์ผ๋ค: Unstaged Files
- ํฌ์ฅํ๊ธฐ๋ก ํ ํ์ผ๋ค : Staged Files
- ํฌ์ฅ ์๋ฃ ํ์ผ ๋ฌถ์: Commit -> ์๋ก์ด ์ปค๋ฐ
.gitignore ์ด๋?
- .gitignore ํ์ผ ๋ด๋ถ์ ์ฌ๋ฆฌ๊ณ ์ถ์ง ์์ ํ์ผ์ด ์๋ค๋ฉด ๊ธฐ์ฌํ๋ค. ๊น์ด ์์์ ์ ์ธํ๋ค.
์ฐฉํ๋ค
์ ๋จธ์ง(Merge) ํ ํ๋ฆฌํ(Pull Request)
ํ์ ์ ๋งค์ฐ ์ค์ํ ๋ถ๋ถ Main ํ์ด์ง๋ฅผ ๋ค ๋ง๋ค๊ณ , dev branch์ feature/main branch๋ฅผ ํฉ์น๋ ค ํ ๋ -> ๋ฆฌ๋ทฐ๋ฅผ ๋จผ์ ๋ฐ๊ณ ํฉ์ณ์ผ ํจ โdev branch์ ์ฝ๋๋ฅผ ํฉ์น๊ณ ์ถ์ด! โ -> ๋ก์ปฌ ์์ push -> โ๋ณ๊ฒฝ์ฌํญ ํ์ธ ํ๋ฆฌ์ฆ ใ ใ โ -> โPull Requestโ -> Files changed๋ฅผ ๋ณด๊ณ , ํ์ ์๋ค์ feedback -> Merge pull request -> dev ๋ธ๋์น์ ํฉ์นจ