๐์ค์ฉ ๊ฐ์ด๋: Git ์๊ฐ + GitHub์ ์ฝ๋ ์ฌ๋ฆฌ๋ ๋ฐฉ๋ฒ
Source: Dev.to
์๊ฐ
ํ์ฌ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ์์ญ ๊ฐ์ง ์ธ์ด, ํ๋ ์์ํฌ, ๋๊ตฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์คํ์ ๊ด๊ณ์์ด ๋ชจ๋ ๊ฐ๋ฐ์๋ ์ด๊ธฐ์ ๋ฒ์ ๊ด๋ฆฌ์ ๋ฅ์ํด์ ธ์ผ ํฉ๋๋ค.
ํต์ฌ ๋๊ตฌ ๋ ๊ฐ์ง๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Git โ ์ ์ธ๊ณ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ฒ์ ๊ด๋ฆฌ ์์คํ .
- GitHub โ Git ๊ธฐ๋ฐ์ ํธ์คํ ๋ฐ ํ์ ํ๋ซํผ.
Git๊ณผ GitHub๋ฅผ ์ฐ๋ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ ์, ์ ์ด๋ฌํ ๋๊ตฌ๊ฐ ์กด์ฌํ๋์ง ๊ทธ๋ฆฌ๊ณ ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ๋์ํ๋์ง ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด ๊ธฐ๋ฐ์ ๋ชจ๋ ์ ๋ฌธ๊ฐ์๊ฒ ์์ ๊ฐ์ ์ฃผ๊ณ ์ผ์์ ์ธ ์ค์๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
Git์ Linus Torvalds(๋ฆฌ๋ ์ค ์ฐฝ์์)๊ฐ ๋ง๋ ์คํโ์์ค ๋ฒ์ ๊ด๋ฆฌ ์ํํธ์จ์ด์ ๋๋ค. ์๋ ๋๊ธฐ๋ ๊ฐ๋จํ์ต๋๋ค: ์ปค๋ ๋ฒ์ ์ ๋น ๋ฅด๊ณ ํจ์จ์ ์ด๋ฉฐ ์ ๋ขฐํ ์ ์๊ฒ ๊ด๋ฆฌํ ์์คํ ์ด ํ์ํ๋๋ฐ, ๋น์ ๋๊ตฌ๋ค์ ์ด๋ฅผ ์ ๊ณตํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
Git์ด ์ ์ธ๊ณ ํ์ค์ด ๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋น ๋ฆ
- ๋ถ์ฐํ(๊ฐ ๋จธ์ ์ด ์ ์ฒด ์ ์ฅ์๋ฅผ ๊ฐ์ง)
- ์์ ํจ(ํด์ฑ ๊ธฐ๋ฐ)
- ์๊ฒฉ ์๋ฒ์์ ๋๊ธฐํ๊ฐ ๊ฐ๋จํจ
Git์ ์ด๋ป๊ฒ ๋์ํ ๊น?
๊ณผ๊ฑฐ์ ์ฐจ์ด์ (diff)๋ง ์ ์ฅํ๋ ์์คํ ๊ณผ ๋ฌ๋ฆฌ, Git์ ์ค๋ ์ท ์ ์ฒด๋ฅผ ๋งค ์ปค๋ฐ๋ง๋ค ์ ์ฅํฉ๋๋ค. ํ๋ก์ ํธ์ โ์ฌ์งโ์ ์ฐ์ง๋ง, ์ค์ ๋ก๋ ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ํด์์ ์ค๋ณต ์ ๊ฑฐ๋ฅผ ํตํด ๋ค์ ์ ์ฅํฉ๋๋ค.
๊ฐ ์ค๋ ์ท์ ์ปค๋ฐ์ด๋ฉฐ, ์๊ฐ ์์๋๋ก ์ด์ด์ง๋๋ค. ์ด๋ฅผ ํตํด ๋น ๋ฅด๊ณ ์์ ํ๋ฉฐ ํ์์ด ์ฌ์ด ํ์คํ ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
Git์ ๊ธฐ๋ณธ์ ์ผ๋ก .git/objects/์ ์ ์ฅ๋๋ ๋ถ๋ณ ๊ฐ์ฒด๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์
๋๋ค. ์ฃผ์ ๊ฐ์ฒด ์ ํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Blob โ ํ์ผ ๋ด์ฉ.
- Tree โ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ํ๋ด๋ฉฐ, Blob ๋ฐ ๋ค๋ฅธ Tree๋ฅผ ๊ฐ๋ฆฌํด.
- Commit โ Tree์ ๋ถ๋ชจ ์ปค๋ฐ๋ค์ ๊ฐ๋ฆฌํด.
- Tag โ ์ผ๋ฐ์ ์ผ๋ก ๋ฒ์ ํ์์ฉ์ผ๋ก ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋ ๋ง์ปค.
๊ฐ ๊ฐ์ฒด๋ ๋ด์ฉ์ ํด์๊ฐ์ผ๋ก ์ด๋ฆ์ด ์ง์ ๋์ด:
- ์ํธํ์ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ
- ๋ถ๋ณ ํ์คํ ๋ฆฌ
- ์์ ๊ฐ์ง
- ์๋ ์ค๋ณต ์ ๊ฑฐ
๋ธ๋์น๋ ํ๋ก์ ํธ ๋ณต์ฌ๊ฐ ์๋๋ผ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ผ ๋ฟ์ ๋๋ค. ์๋ฅผ ๋ค์ด:
main โ ๋ฉ์ธ ๋ผ์ธ์ ์ต์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํด
๋ธ๋์น๋ฅผ ๋ง๋ค๋ฉด ์๋ก์ด ํฌ์ธํฐ๊ฐ ์์ฑ๋๊ณ , ํด๋น ๋ธ๋์น์์ ์ปค๋ฐ์ ํ๋ฉด ํฌ์ธํฐ๊ฐ ์์ชฝ์ผ๋ก ์ด๋ํฉ๋๋ค. ๊ทธ๋์ ๋ธ๋์น๋ฅผ ๋ง๋๋ ๊ฒ์ด ๋น์ฉ์ด ๊ฑฐ์ ์์ผ๋ฉฐ ์ ๊ทน ๊ถ์ฅ๋ฉ๋๋ค.
์ปค๋ฐ๋ค์ ๋ฐฉํฅ์ฑ ๋น์ํ ๊ทธ๋ํ(DAG) ๋ฅผ ํ์ฑํฉ๋๋ค:
- ๊ฐ ์ปค๋ฐ์ ์์ ์ ๋ถ๋ชจ๋ฅผ ๊ฐ๋ฆฌํด.
- ๋ณํฉ(Merge)์ ๋ ๊ฐ์ ๋ถ๋ชจ๋ฅผ ๊ฐ์ง.
- ํ์คํ ๋ฆฌ๋ ํญ์ ์์ผ๋ก ์งํ๋จ.
Git์๋ ์ธ๋ฑ์ค๋ผ๋ ์ค๊ฐ ์์ญ์ด ์์ด, ์ด๋ค ๋ด์ฉ์ด ์ปค๋ฐ์ ํฌํจ๋ ์ง ์ ํํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ ๊น๋ํ ์ปค๋ฐ, ์ธ๋ฐํ ์ ์ด, ํ์ผ ์ผ๋ถ๋ง ์ปค๋ฐํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค.
์๊ฒฉ ์ ์ฅ์๋?
GitHub, GitLab, Bitbucket ๊ฐ์ ์๋ฒ๋ ํด๋ผ์ฐ๋์ ํธ์คํ ๋ ์ถ๊ฐ Git ์ ์ฅ์์ ๋ถ๊ณผํฉ๋๋ค. ์ฃผ์ ๋ช ๋ น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
git pushโ ์ปค๋ฐ์ ๋ณด๋ด๊ณ ์๊ฒฉ ๋ ํผ๋ฐ์ค๋ฅผ ์ ๋ฐ์ดํธ.git pullโ ์๊ฒฉ ์ปค๋ฐ์ ๋ฐ์์ ๋ก์ปฌ ๋ธ๋์น๋ฅผ ์ ๋ฐ์ดํธ.
Merge
- ๋ ๋ถ๋ชจ๋ฅผ ๊ฐ์ง ์ปค๋ฐ์ ์์ฑ.
- ๋ณ๋ ฌ ํ์คํ ๋ฆฌ๋ฅผ ์ ์ง.
Rebase
- ์ปค๋ฐ์ ์ฌ์์ฑํ์ฌ ๋ถ๋ชจ๋ฅผ ๋ณ๊ฒฝ.
- ์ ํ ํ์คํ ๋ฆฌ๋ฅผ ์์ฑ.
- ์๋ก์ด ํด์๋ฅผ ์์ฑ.
๋ ๋ฐฉ๋ฒ ๋ชจ๋ ํ๋ ๊ฐ๋ฐ์์ ํ์ ๋๊ตฌ์
๋๋ค. Git์ ๊ธฐ์กด ์ปค๋ฐ์ ์ ๋ ์์ ํ์ง ์๊ณ ์ ์ปค๋ฐ์ ๋ง๋ค๋ฉฐ, ์ค๋๋ ์ปค๋ฐ์ โ๊ณ ์โ๊ฐ ๋์ด git gc์ ์ํด ์ ๋ฆฌ๋ ์ ์์ต๋๋ค.
์ด๋ก ์์ฝ
- Git์ ํด์ ๊ธฐ๋ฐ์ ๋ถ๋ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค.
- ์ปค๋ฐ์ ์ค๋ ์ท.
- ๋ธ๋์น๋ ํฌ์ธํฐ.
- ํ์คํ ๋ฆฌ๋ DAG.
- ์๊ฒฉ ์ ์ฅ์๋ ๋จ์ํ ์ถ๊ฐ ๋ ํผ๋ฐ์ค.
GitHub
GitHub๋ ์ ์ธ๊ณ์์ ๊ฐ์ฅ ํฐ ์ฝ๋ ํธ์คํ ํ๋ซํผ์ผ๋ก, ์๋ฐฑ๋ง ๊ฐ์ ์ ์ฅ์๊ฐ ์กด์ฌํฉ๋๋ค. ๋ง์ดํฌ๋ก์ํํธ๊ฐ ์์ ํ๊ณ ์์ผ๋ฉฐ ๋ค์์ ์ ๊ณตํฉ๋๋ค:
- ์ ์ฅ์ ํธ์คํ
- issues
- ํ ๋ฆฌํ์คํธ
- CI/CD ์ํฌํ๋ก์ฐ(GitHub Actions)
- ํ ํ์
- ํ๋ถํ ์น ์ธํฐํ์ด์ค
- ๋ฐ์คํฌํฑยท๋ชจ๋ฐ์ผ ์ฑ
์์ฝํ๋ฉด: Git์ ๋ก์ปฌ์์ ์ฝ๋๋ฅผ ๊ด๋ฆฌํ๊ณ , GitHub๋ ์ฝ๋๋ฅผ ๊ณต์ ยทํ์ ยท๋ฐฐํฌํ ์ ์๊ฒ ํด์ค๋๋ค.
๋จ๊ณ๋ณ ๊ฐ์ด๋
1. Git ์ค์น
git --version
์ค์น๋์ง ์์๋ค๋ฉด, ํด๋น ํ์ด์ง์์ ๋ค์ด๋ก๋ํฉ๋๋ค.
2. ์ด๋ฆ๊ณผ ์ด๋ฉ์ผ ์ค์
git config --global user.name "Seu Nome"
git config --global user.email "seuemail@example.com"
3. ๋ก์ปฌ ์ ์ฅ์ ๋ง๋ค๊ธฐ
# ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ์์
git init
git add .
git commit -m "primeiro commit"
4. GitHub์ ์ ์ฅ์ ๋ง๋ค๊ธฐ
- ํ์ด์ง์ ์ ์ํฉ๋๋ค.
- New repository ํด๋ฆญ.
- ์ด๋ฆ ์ง์ .
- ์ด๊ธฐ ํ์ผ์ ๋ง๋ค์ง ์๋๋ก ์ ํ(์ฒซ ํธ์ ์ ์ถฉ๋ ๋ฐฉ์ง).
5. ๋ก์ปฌ ์ ์ฅ์๋ฅผ GitHub์ ์ฐ๊ฒฐ
git remote add origin https://github.com/usuario/repositorio.git
6. ๊ธฐ๋ณธ ๋ธ๋์น๋ฅผ main์ผ๋ก ์ง์
git branch -M main
7. ํ๋ก์ ํธ๋ฅผ GitHub์ ํธ์
git push -u origin main
์๋ฃ! ๐ ์ด์ ํ๋ก์ ํธ๊ฐ ์จ๋ผ์ธ์ ์ฌ๋ผ๊ฐ์ต๋๋ค.
์ฃผ์ ์์ ํ๋ฆ
git add .
git commit -m "mensagem"
git pull
git push
ํํ ๋ฐ์ํ๋ ๋ฌธ์
-
ํธ์ ๊ฑฐ๋ถ
git pull --rebase origin main -
์ถฉ๋
-
ํ์ผ์ ์ด์ด ์ถฉ๋์ ํด๊ฒฐํ ๋ค:
git add . git commit
-
-
์ธ์ฆ ์คํจ
- SSH ํค๋ฅผ ์ค์ ํ๊ฑฐ๋ GitHub CLI๋ฅผ ํตํด ๋ก๊ทธ์ธํฉ๋๋ค.
Cheatsheet (Git ์ฃผ์ ๋ช ๋ น)
์ค์
git config --global user.name
git config --global user.email
์ด๊ธฐํ
git init
์ํ์ ๋ก๊ทธ
git status
git log --oneline
์คํ ์ด์ง ๋ฐ ์ปค๋ฐ
git add arquivo
git add .
git commit -m "mensagem"
๋ธ๋์น
git branch
git checkout -b nova-branch
git switch main
Merge & Rebase
git merge nome-branch
git rebase main
์๊ฒฉ๊ณผ ๋๊ธฐํ
git remote -v
git push
git pull
์ ์ฅ์ ๋ณต์
git clone url