1. Git ์ค์น ๋ฐ ์ค์
sudo apt-get install git-core
#์ฌ์ฉ์ ์ ๋ณด ์ถ๊ฐ (ํ์ฌ ์์คํ
์ ๋ชจ๋ ๋๋ ํ ๋ฆฌ์์ ํด๋น ์ ๋ณด ์ฌ์ฉ)
git config --global user.name "์ด๋ฆ"
git config --global user.email "์ด๋ฉ์ผ ์ฃผ์"
#๊ธฐ๋ณธ ์ค์ ๋ฆฌ์คํธ ํ์ธ
git config --list
2. Git Repository ์์ฑ
#์๋ก์ด ํ๋ก์ ํธ ์์ฑ
git init
#Git ์๋ฒ์ ํ๋ก์ ํธ ๋ณต์
git clone [REPO_URL] [LOCAL_DIR]
3. Branch ์์ฑ๊ณผ ๊ด๋ฆฌ
์ฐธ๊ณ : Git ๋ธ๋์น - ๋ธ๋์น๋ ๋ฌด์์ธ๊ฐ
Branch์ ์๋๊ตฌ์กฐ
Branch ๊ด๋ จ ๋ช ๋ น์ด
- branch ๋ชฉ๋ก ํ์ธ
git branch
# ๋ชฉ๋ก์ *์ด ๋ถ์ด ์๋ ๊ฒ์ด ํ์ฌ branch (HEAD)
- branch ์์ฑ
git branch [BRANCH_NAME]
- branch ์ ํ
git checkout [BRANCH_NAME] # BRANCH_NAME์ผ๋ก ์ ํ
git checkout -b [BRANCH_NAME] # branch ์์ฑ + ์ ํ
- branch ์ญ์
git branch -d [BRANCH_NAME]
- branch ์ด๋ฆ ๋ณ๊ฒฝ (rename)
git branch -m [NEW_NAME] #ํ์ฌ branch ์ด๋ฆ์ [NEW_NAME]์ผ๋ก ๋ณ๊ฒฝ
4. Add, Commit, Push
์ฐธ๊ณ : Git์ ๊ธฐ์ด - ์์ ํ๊ณ ์ ์ฅ์์ ์ ์ฅํ๊ธฐ
Git์์ ํ์ผ์ ์ธ ๊ณณ์ ์ ์ฅ๋๋ค.
- working directory : ํ์ผ์ ์์ ํ ๋ ์ง์ ์ด์ฉํ๋ ๋ก์ปฌ ์์ ๊ณต๊ฐ
- index(stage) : ์์ ๊ณต๊ฐ๊ณผ ํ์ ๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ๋ ๊ณต๊ฐ ์ฌ์ด์ buffer
- head : ์ต์ข ์ฝ๋๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ
๋ชจ๋ ํ์ผ์ ์ถ์ ๋์(tracked)๊ณผ ๊ทธ๋ ์ง ์์ ํ์ผ(untracked)๋ก ๋๋๋ค. ํ ๋ฒ stage์ ์ฌ๋ ธ๊ฑฐ๋ clone์ ํตํด ๋ด๋ ค๋ฐ์ ๋ชจ๋ ํ์ผ์ tracked๊ฐ ๋๋ค. ๋ค์ ๋งํด ์๋ก ์์ฑํด์ stage์ ํ๋ฒ๋ ์ฌ๋ฆฌ์ง ์์ ํ์ผ๋ง์ด untracked ํ์ผ์ด๋ค.
Tracked ํ์ผ์ modified์ unmodified ๋ ์ค ํ๋์ ์ํ๋ฅผ ๊ฐ๋๋ค. Tracked ํ์ผ์ด commit๋ ์ดํ๋ก ์์ ๋๋ฉด modified ์ํ๊ฐ ๋๊ณ , ๋ค์ commit์ ํ๋ฉด unmodified ์ํ๋ก ๋ฐ๋๋ค.
working directory์ ํ์ผ ํน์ ํด๋๋ฅผ stage์ ์ฌ๋ฆฐ๋ค.
# ์ ์ฒด ์ถ๊ฐ (untracked ํ์ผ๊ณผ modified ํ์ผ)
git add *
# ์ผ๋ถ ํ์ผ ์ถ๊ฐ
git add (ํ์ผ๊ฒฝ๋ก)
-> ํ์ผ์ด stage์ ์๋ ์ํ
Stage๋ commit์ ๋ฐ์ํ ํ์ผ๋ค์ ๋ชฉ๋ก์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. add ๋ช ๋ น์ ํ์ผ์ ์๋ก ์ถ์ ํ ๋๋ ์ฌ์ฉํ๊ณ , modified ์ํ์ ํ์ผ์ stage์ ์ฌ๋ฆด ๋๋ ์ฌ์ฉํ๋ค.
Stage์ ์๋ ํ์ผ๋ค์ ์ํ๋ฅผ ํ์ธํ๋ค.
git status
commit์ ์ด์ฉํ์ฌ stage์ ์๋ ํ์ผ๋ค์ ์ฌ๋ฆฐ๋ค.
git commit -m "์ค๋ช
"
-> ํ์ผ์ด head์ ์๋ ์ํ. ํ์ง๋ง, github์๋ ๋ฐ์์ด ๋์ง ์๋๋ค
ํน์, -a ์ต์ ์ผ๋ก add์ commit์ ํ๋ฒ์ ์คํํ ์ ์๋ค. (๋จ, ํ๋ฒ๋ add ๋์ง ์์ ํ์ผ์ ๋ฐ๋ก add๋ฅผ ํด์ค์ผ ํ๋ค.)
git commit -am "์ค๋ช
"
github repository์ commit์ ์ ๋ฐ์ดํธํ๋ค.
init์ผ๋ก ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๊ฒฝ์ฐ, git์๊ฒ ํ์ผ์ ์ฌ๋ฆด github์ remote repository ์๋ฒ ์ฃผ์๋ฅผ ์๋ ค์ฃผ์ด์ผ ํ๋ค.
git remote add [REPO] [URL]
๋ณ๊ฒฝ์ฌํญ์ remote repository์ ๋ฐ์ํ๋ค.
git push [REPO] [BRANCH]
-> ํ์ผ์ด github์ ์ฌ๋ผ๊ฐ ์ํ
5. Merge
์ฐธ๊ณ : Git ๋ธ๋์น - ๋ธ๋์น์ Merge์ ๊ธฐ์ด
๋ branch๋ฅผ ํฉ์ณ์ฃผ๋ ๊ฒ์ merge๋ผ๊ณ ํ๋ค. Merge์๋ ์ธ ๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ์์ ์ ์๋ค.
1) Feed-forward merge
master
branch๋ฅผ hotfix
branch๋ก mergeํ ๋, hotfix branch๊ฐ master branch ์ดํ์ commit์ ๊ฐ๋ฆฌํค๊ณ ์์ผ๋ฏ๋ก ์ด ๊ฒฝ์ฐ๋ ๋จ์ํ ๊ฐ๋ฆฌํค๋ commit์ ์ฎ๊ฒจ์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
git checkout master #master branch๋ก ์ด๋
git merge hotfix #hotfix branch๋ก merge
git branch -d hotfix #๋์ผํ commit์ ๊ฐ๋ฆฌํค๊ณ ์์ผ๋ฏ๋ก hotfix branch๋ ์ญ์
2) 3-way merge
๊ฐ๋ผ์ง๋ branch์ ์๋ ๋ branch๋ฅผ mergeํ๋ ค๋ ๊ฒฝ์ฐ, ๊ณตํต ์กฐ์์ธ ๋ถ๊ธฐ์ ๊น์ง ํจ๊ป ์ด์ฉํ์ฌ 3-way merge๋ฅผ ํ๊ฒ ๋๋ค. ์ด๋ ๊ณตํต ์กฐ์๊ณผ ๋ branch๋ฅผ ๋น๊ตํ์ฌ, ์๋ก ์์ ๋ ๋ถ๋ถ์ ํฉ์น๋ ๋ฐฉ์์ด๋ค.
git checkout master
git merge iss53
3) ์ถฉ๋
๋ง์ฝ ๊ฐ๋ผ์ง๋ branch์ ์๋ ๋ branch๊ฐ ์๋ก ๊ฐ์ ๋ด์ฉ์ ์์ ํ์ ๊ฒฝ์ฐ ์ถฉ๋์ด ๋ฐ์ํ๊ณ , ์ด ๊ฒฝ์ฐ์๋ 3-way merge๋ฅผ ์ํํ ์ ์๋ค. ์ด ๋๋ git status
๋ช
๋ น์ ์ด์ฉํด ์ถฉ๋์ด ์ผ์ด๋ ๋ถ๋ถ์ ํ์ธํ๊ณ ์ง์ ๊ณ ์ณ ์ฃผ์ด์ผ ํ๋ค.
6. Remote repository์ Remote branch
์ฐธ๊ณ : Git ์ ์ฅ์ - ๋ฆฌ๋ชจํธ ์ ์ฅ์, Git ๋ธ๋์น - ๋ฆฌ๋ชจํธ ๋ธ๋์น
Remote repository: ๋ก์ปฌ์ด ์๋ ์๊ฒฉ์ ์๋ repository. ์ ์ฅ์๋ฅผ cloneํ๋ฉด origin
์ด๋ผ๋ remote repository๊ฐ ์๋์ผ๋ก ๋ฑ๋ก๋๋ค.
- Remote repository ๋ชฉ๋ก ํ์ธ
git remote
- Remote repository ์ถ๊ฐํ๊ธฐ
git remote add [REPO] [URL]
#ex) git remote add pb https://github.com/paulboone/ticgit
Remote branch: Remote repository์ ์๋ branch๋ฅผ ๊ฐ๋ฅดํค๋ ํฌ์ธํฐ
Remote tracking branch: Remote branch๋ฅผ ์ถ์ ํ๋ branch. ๋ก์ปฌ์์ ์์๋ก ์์ ํ ์ ์๊ณ remote branch์ ์ ๋ฐ์ดํธ์ ๋ฐ๋ผ ์๋์ผ๋ก ๊ฐฑ์ ๋จ. <remote>/<branch>์ ํ์์ผ๋ก ๋์ด ์๋ค. (ex: origin/master)
clone์ผ๋ก ์๋ฒ์์ repository๋ฅผ ๋ณต์ ํด์ค๋ฉด git์ ์๋์ผ๋ก origin์ด๋ผ๋ ์ด๋ฆ์ ๋ถํ๊ณ , ์๋ฒ์ master branch๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ๋ง๋ ๋ค(origin/master). Git์ ๋ก์ปฌ์ master branch๊ฐ origin/matser์ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค. ์ฌ์ฉ์๋ ์ด branch์์ ์์ ์ ํ ์ ์๋ค.
์ดํ ๋ก์ปฌ์ master branch์์ ์ถ๊ฐ์ ์ผ๋ก commit์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ชจ์ต์ด ๋๋ค.
Remote repository์์ ์์ค ๊ฐ์ ธ์ค๊ธฐ
Remote repository์์์ ์์ค๋ฅผ ๋๊ธฐํํ๊ธฐ ์ํด ๋ก์ปฌ๋ก ๊ฐ์ ธ์ค๋ ๋ช ๋ น์ด๋ pull๊ณผ fetch ๋ ๊ฐ์ง๊ฐ ์๋ค.
pull์ Remote repository์ ์์ค๋ฅผ ๊ฐ์ ธ์ ๋ก์ปฌ ์์ค์ ๋ณํฉํ๋ค. pull์ fetch + merge์ ๋์ผํ๋ค.
fetch๋ Remote repository์ ์์ค๋ฅผ ๊ฐ์ ธ์ค๊ธฐ๋ง ํ๊ณ ๋ณํฉํ์ง๋ ์๋๋ค.
* pull vs clone
Clone์ init + remote + pull๊ณผ ๋์ผํ๋ค. ์ฆ clone์ ์ด๊ธฐ ๋ค์ด๋ก๋์ ์ฌ์ฉํ๊ณ , pull์ ์ค๊ฐ์ค๊ฐ remote์์์ ๋ณ๊ฒฝ์ฌํญ์ ๋ค์ด๋ก๋ ๋ฐ๋ ๋ฐ์ ์ด์ฉํ๋ค.
Remote repository๋ก ์์ค ์ ์กํ๊ธฐ
์ฐ๊ธฐ ๊ถํ์ด ์๋ remote repository๋ก ๋ก์ปฌ์ branch๋ฅผ pushํ ์ ์๋ค. ๋ก์ปฌ repository์ branch๋ ์๋์ผ๋ก remote repository๋ก ์ ์ก๋์ง ์๊ธฐ ๋๋ฌธ์, push๋ฅผ ํ์ง ์๊ณ ๋ก์ปฌ์๋ง ๋๋ ๋น๊ณต๊ฐ branch๋ฅผ ๋ ์๋ ์๋ค.
git push [REMOTE] [BRANCH]
7. Github ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๊ธฐ (Fork, Pull Request)
์ฐธ๊ณ : GitHub - GitHub ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๊ธฐ
(๋งํฌ์ ์ค๋ช ์ด ์ ๋์ด ์์ด์ Fork์ Pull Request์ ๋ํ ์ค๋ช ์ ์๋ตํจ)
* fork vs clone
- Fork๋ GitHub ์์์ ์ํ๋๋ ๊ธฐ๋ฅ์ด๊ณ , clone์ Git์์ ์ํ๋๋ ๊ธฐ๋ฅ์ด๋ค.
- Fork๋ ๋ค๋ฅธ ์ฌ๋์ github repository๋ฅผ ๋ด github repository๋ก ๋ณต์ ํ๊ณ , clone์ ๋ค๋ฅธ ์ฌ๋์ reposity๋ฅผ ๋ด local ์์น๋ก ๋ณต์ ํ๋ค.
- Forkํ repository์ ๋ณ๊ฒฝ์ฌํญ์ pull request๋ฅผ ๋ณด๋ด ์๋ณธ repository์ ๋ฐ์(์ ์์ฒญ)ํ ์ ์๋ค. ์ด ๊ณผ์ ์ clone ํ ๋ณ๊ฒฝ์ฌํญ์ push๋ฅผ ํตํด ๋ด github repository๋ก ๋ณด๋ธ ํ์, ์ถ๊ฐ์ ์ผ๋ก ์๋ณธ repository๋ก ํด๋น ๋ณ๊ฒฝ์ฌํญ์ ๋ณด๋ด๋ ๊ฒ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
7. VSCode๋ก Git ์ด์ฉํ๊ธฐ (์งฑ ํธํจ)
์ฐธ๊ณ : https://demun.github.io/vscode-tutorial/git/
git๊ณผ ์ฐ๋๋ ํด๋๋ฅผ vscode์์ ์ด๋ฉด ์ข์ธก ํญ์์ 'Source control' ๋ฉ๋ด๋ฅผ ์ด์ฉํ ์ ์๋ค.
๋ด์ฉ์ ์์ ํ๋ฉด 'Changes' ์๋์ ์์ ์ฌํญ์ด ๋ํ๋๋ค. (git status์ ๋์ผ)
์์ ์ฒดํฌํ์ (๋นจ๊ฐ ํ์ดํ) ๋ฅผ ๋๋ฅด๋ฉด ๋ณ๊ฒฝ์ฌํญ์ ๋ชจ๋ commit์ ํ ์ ์๋ค. (commit -am๊ณผ ๋์ผ)
์ค์ stage, commit, push ๋ฑ์ ๋ช ๋ น์ด๋ฅผ ์ง์ ๋ ธ์ถํ์ง ์๊ณ , ๋ณด๋ค ์ง๊ด์ ์ผ๋ก ๊ธฐ๋ฅ๋ค์ด ๊ตฌํ๋์ด ์๋ค
๋ฌผ๋ก ๋ค์ํ ๋ช ๋ น์ ์ง์ ์ํํ ์๋ ์๋ค. ์ฐ์ธก ์๋จ์ '...' ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ณด๋ค ๋ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
Commit์ ํ ์งํ์ ๋ชจ์ต์ด๋ค. 'Sync Changes' ๋ฒํผ์ด ๋ํ๋๋ค. ์ด ๋ฒํผ์ push๋ฅผ ์๋ฏธํ๋ค.
์ด๋ ๊ฒ ๋ ๊ฐ์ ๋ฒํผ๋ง์ ์ด์ฉํด stage->commit->push์ ๊ณผ์ ์ ํ๋ฒ์ ์ํํ ์ ์๋ค.
'๐ป OS & Tools > Git' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Git Stash - ๋ณ๊ฒฝ๋ ํ์ผ๋ค์ ์์ ์ ์ฅํ๊ธฐ (0) | 2022.11.08 |
---|---|
Git commit ์ ํํ ์๊ฐ ํ์ธํ๊ธฐ (2) | 2022.10.26 |