[Git] ๐ Git, Github ์ฌ์ฉ๋ฒ ๋ฐ ๋ด์ฉ ์ ๋ฆฌ
๐ ๊ฐ์
4ํ๋ ์ ๊ณต๊ณผ๋ชฉ์ธ S/W Engineering ์์ ์ ๋ค์ผ๋ฉด์ DevOps์ ๊ดํ ๋ด์ฉ์ ๋ฃ๊ณ ์ด๋ฅผ velog์ ์ ๋ฆฌํด๋ณด๊ณ ์ ๊ธ์ ๊ฒ์ํ๋ค!!
CI/CD(Continuous Integration/Continuous Delivery(Deploy)) ํ์ดํ๋ผ์ธ์ ๋ ์์ฃผ ๋ ์ ๋ขฐ์ฑ ๋์ ์์ ๋ ์ฝ๋๋ฅผ deployํ ์ ์๋๋ก SW๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ๋ก ์ด๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ CI/CD ๊ฐ๋ฐ ๋ฌธํ๋ค์ DevOps ๋๊ตฌ๋ค์ ๋ฐ์ ์ผ๋ก ์ด์ด์ง๊ฒ ๋์๋๋ฐ ์ด๋ ๋จ๊ณ๋ณ๋ก ์ํ๋๋ ๊ฐ๋ฐ์์ ํน์ DevOps๋ฅผ ์ฌ์ฉํ๋ฉฐ ํจ์จ์ ์ธ ๊ด๋ฆฌ, ์คํ์ด ๊ฐ๋ฅํด์ก๋ค๊ณ ๋ณผ ์ ์๋ค.
๋ฐ๋ผ์!! ์ด ๊ฒ์๊ธ์ ๊ทธ์ค์์๋ Git์ ๋ํด์ ์์๋ณผ ๊ฒ ์ด๋ค. ๋ํ Github๋ฅผ ์์๋ณด๋ฉด์ ์ด๋ค ์์ผ๋ก ์๊ฒฉ ์ ์ฅ์์ ๋ก์ปฌ ์ ์ฅ์๊ฐ์ Push, Pull์ด ์ด๋ฃจ์ด์ง๋์ง๋ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.
๐ Git
๐ซ Git
Git์ ๊ฐ๋ฐ์๋ผ๋ฉด ์ ๋ง ๊ธฐ๋ณธ์ ์ด๊ณ ํ์!!์ ์ธ DevOps๋ผ๊ณ ๋ณผ ์ ์๋ค. ๋ค์์ ๊ฐ๋ฐ์ ์ฌ์ด์ ํ๋ ฅ์ ์ฉ์ดํ๊ฒ ํ ๋ฟ๋ง ์๋๋ผ ํ ๊ณต์ ์์ ์ ์ต์ ํ๋ ๋๊ตฌ์ธ ๋ถ์ฐ VCS๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ํ ๋๊ฐ ์ธ์ ๋ฌด์์ ์์ ํ์๋์ง trackingํ๊ณ ์์ ๋ ๋ด์ฉ์ ๋๋๋ฆด ์ ์๊ธฐ ๋๋ฌธ์ ํ์์ ์ผ๋ก ์์์ผํ๋ ๋๊ตฌ๊ฐ ์๋๊ฐ ์๊ฐ๋๋ค.
์ด๋ฌํ Git์ CI/CD์์๋ version-control์ด ๊ต์ฅํ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ฆฌ ์ฌ์ฉ๋๋ DevOps์ด๋ค.
๐ซ Git structure
Git์ working Directory, Staging Area, .git directory๋ก ๋๋์ด ์๊ฐํ ์ ์๋ค. ์ด ๊ตฌ์กฐ๋ modified, staged, committed ๋จ๊ณ๋ก ๋ํ ๋๋์ด์ ์๊ฐํ ์ ์๋๋ฐ ์ด๋ฅผ ๋๋์ด์ ํ๋ฒ ๋ณด์!!
- Working Directory
ํ์ฌ ์์
ํ๋ working directory์์๋ ์ฌ์ฉ์์ ๋ก์ปฌ ์ปดํจํฐ์์ ์์
ํ ํ ๋ณ๊ฒฝ๋ ํ์ผ๋ค์ด ์กด์ฌํ ๊ฒ์ด๋ค. ์ด๋ฅผ modifiedํ ์ํ๋ก ๋ณผ ์ ์๊ณ ์ด๋ฐ modified๋ ๋ด์ฉ๋ค์ ์ ์ฉํ๊ธฐ ์ํด์ staging area๋ก ๋ณด๋ด์ฃผ์ด์ผ ํ๋ค!! ์ด๋ฌํ ์์
์ Stage Fixes๋ก ๋ณผ ์ ์๋ค.
- Staging Area
์์ ์งํํ ์์ ๋ ํ์ผ๋ค์ staging ์์ญ์ผ๋ก ๋ณด๋ด์ฃผ์๋ค๋ฉด ์ด ์ง์ ์์๋ commit์ ์งํํ ์ ์๋ค. ์ด ์์ญ์ Staged๋ ์ํ์ด๋ฉฐ commit์ ํตํด .git directory์ ์ํ๋ ๋ง์ ์ถ๊ฐํด์ ์ด๋ค ๋ด์ฉ์ ์์
์ธ์ง ์ค๋ช
์ ์ถ๊ฐํ ์ ์๋ค. ๋ํ Staging Area๋ ์บ์์์ญ์์ ๊ธฐ์ตํด๋์!!
- .git directory(Repository)
๋ง์ง๋ง์ผ๋ก commit์ ํ์๋ค๋ฉด ์ด๋ฅผ .git directory์๋ commited๋ ์ํ๋ก ๋ณผ ์ ์๋ค. ์ด๋ ๋ค์ ์ฐ๋ฆฌ๊ฐ ์์
ํ๋ working directory๋ก checkout๋ ์ ์๋๋ฐ ๋ค์ ๋์๊ฐ์ ์ํ๋ ์์
์ ์ํํ ํ staging area๋ฅผ ๊ฑฐ์ณ git repository๋ก commit ๋ด์ฉ์ ์ ๋ฌํ๋ ๊ฒ์ผ๋ก ์์
์ด ์ด๋ฃจ์ด์ง๋ค!!
๐ซ Git command
๋จผ์ ๋๋ m1 macbook proํ๊ฒฝ์์ git ํ๊ฒฝ์ ์ธํ
ํด์ฃผ์๋ค!!
(๋ํ git์ ์ค์นํ๊ธฐ ์ํ homebrew ์ค์น๊ฐ ์๋ฃ๋์๋ค๋ ๊ฐ์ ์์ ์ถ๋ฐํ๋ค!)
// git ์ค์น
brew install git
git --version
homebrew๋ฅผ ์ด์ฉํ์ฌ git์ ์ค์นํ๊ตฌ git์ ๋ฒ์ ์ ํ์ธํด๋ณผ ์ ์๋ค!!
๋ค์์ ๊ธฐ๋ณธ์ ์ธ git์ ์ํํ๋ ๊ณผ์ ์ด๋ค!!
// .git ํ์ผ ์์ฑํ๊ธฐ
git init
// stage ์์ญ์ผ๋ก file ์ถ๊ฐ
// add .ํ๊ฒ ๋๋ฉด ๋ชจ๋ ๋ณ๊ฒฝ ํ์ผ stage์์ญ์ผ๋ก
git add <file>
// modified, staged ์ํ ํ์ธํ๊ธฐ
git status
// ์ปค๋ฐํ๊ธฐ
// -am ์ add๋ฅผ ์๋ตํ๊ณ add์ commit์ ๋์์ ์ํ
git commit -m "~"
git commit -am "~"
// name์ ์ฌ์ฉ์ ์ด๋ฆ, email์ ์ฌ์ฉ์ ์ด๋ฉ์ผ ์ค์ ํ๊ธฐ
git config --global user.name '~~'
git config --gloabl user.email '~~'
// git์ commit๋ ๋ด์ฉ๋ค, ํ์ฌ head๊ฐ ๊ฐ๋ฆฌํค๋ branch ํ์ธ ๋ฑ ๋ก๊ทธ๋ฅผ ํ์ธ
git log
๐ซ Git branch & command
branch ์์ ์ ๋ง๊ทธ๋๋ก ๊ฐ์ง๋ฅผ ์น๋ ๊ฒ์ด๋ค! ์ด ์์ ์ ํตํด์ git์ด ์๋ก์ด ์์ ์ ๊ธฐ์กด์ ์์ ์ ๊ฑด๋๋ฆฌ์ง ์๊ณ ๋ถ๊ธฐํ์ฌ ์งํํ ์ ์๋ค!! ๋ค์ ์ฌ์ง์ ๋ณด๋ฉด ์ดํด๊ฐ ๋น ๋ฅด๋ค.
์ฌ์ง๊ณผ ๊ฐ์ด C1 ๋ถ๋ถ์์ ๋ถ๊ธฐํ์ฌ C2์ C3์ ํด๋นํ๋ ์๋ก์ด branch๋ค์ ์์ฑํด ์ค ์ ์๋ค. ์ด๋ branch๋ฅผ ๋๋์๊ฐ ์๋ ์์ผ๋ฉฐ ๊ฐ์ ๋ง๋ branch์์ ์์ ์ ์งํํ ์๋ ์๋ค. Head๊ฐ ๊ฐ๋ฆฌํค๋ ๋ถ๋ถ์ ํ์ฌ ์์นํ ์์ ์ํ์ด๋ฉฐ ์ฒ์ ์์ฑ๋ head๋ master๋ก ์์ ์ ์งํํ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๋๋์ด์ง branch๋ค์ ํตํฉํ๋ ๊ณผ์ ๋ ์ค์ํ๋ค. fast-forwarding ๋ฐฉ์์ ์ ์ฌ์ง ์ฒ๋ผ c2์์ ๋๋์ด์ง c3, c4์ branch๋ค์ด ์กด์ฌํ๋๋ฐ c4์ ์์ ์ ์ด์ c2์ ์์ ๊ณผ ๊ทธ๋๋ก ์ด์ด์ง๋ฉด์ mergeํ๋ ๊ฒ์ ๋งํ๋ค. ์ด๋ ์ด์ ์์ ์ ๋ด์ฉ๋ค์ ํฌํจํ๊ณ ๊ทธ๋๋ก ์ด์ด์ง๋ merge ์ํ๊ณผ์ ์ผ๋ก ๋ณผ ์ ์๋ค.
๋ํ 3-way merging๊ณผ์ ๋ ์๋๋ฐ ์ด๋ ์์ ๋๊ฐ๋๊ธธ๋ก ๋๋์ด์ง c3, c4์ branch๋ค์ ํตํฉํ๋ ๊ฒ์ผ๋ก ๋๋์ด์ง ์์ ๊ณผ์ ์ ๋น๊ตํ๊ณ mergeํ๋ ๊ณผ์ ์ด๋ค. ํ์ง๋ง ์ธ์ ๋ ์๋ก์ ์์ ๋ด์ฉ์ ์ผ์นํ์ง ์์ ์ ์๋ค. ๋ฐ๋ผ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ๋ ํ๋๋ฐ ์ด๋ฅผ ์ํด์ ๊ผญ merge coflict๋ฅผ ํด์ ํด์ฃผ์ด์ผํ๋ค. ์ด๋ git์ด ์๋ ค์ฃผ์ด ๊ฐ๋ฐ์๋ค์ด ์กฐ์จ์ ํตํด ํ์ผ์ ์์๋ฅผ ๊ณ ์ณ์ฃผ๊ฑฐ๋ ๋ด์ฉ์ ๋ณ๊ฒฝํด์ค์ผ๋ก์จ ํด์ํ ์ ์๋ค!!
// branch ์์ฑํ๊ธฐ
git branch <branch name>
// ํ์ฌ์ branch์์ ์
๋ ฅ๋ branch์ merge ์ํ
git merge <branch name>
// ์
๋ ฅ๋ branch๋ก ๋ถ๊ธฐ
git checkout <branch name>
๐ Github
๐ซ Github
๊ทธ๋ ๋ค๋ฉด ์ง๊ธ๊น์ง git์ ๋ํด์ ์์๋ณด์๋๋ฐ github๋ ๋ฌด์์ผ๊น?? github๋ git๊ณผ ๋ถ๋ช ํ ๋ค๋ฅธ ์๋น์ค๋ก remote repository ์๋น์ค๋ก git์ ์ด์ฉํ์ฌ ๊ด๋ฆฌํ ์ ์๋ ์๋ฒ์ด๋ค.
github๋ฅผ ์ฌ์ฉํ๊ฒ๋๋ฉด ์ฌ์ฉ์์ ๋ก์ปฌ์์ ์ง์ github ๊ณ์ ์์ repository์ ํ์ผ์ ์ฌ๋ ค ๋๊ณ ๋ค์ด ๋ฐ์ ์ ์๋ค!! ๋ค์๋งํด์ github๋ git์ ์๊ฒฉ ์ ์ฅ์ ์๋น์ค๋ค ์ค ํ๋๋ผ๊ณ ์๊ฐํ ์ ์๋ค!!
๐ซ Github commands
github๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ๋น์ฐํ! github์ ๊ณ์ ์ด ํ์ํ๋ค.
๐ https://github.com/
ํ์๊ฐ์
๊ณผ ํจ๊ป github๋ฅผ ์ด์ฉํ ์ ์๋ค.
์ด์ ๊น์ง๋ ํจ์ค์๋ ์ ๋ ฅ์ ํตํด์ pushํ ์ ์์๋๋ฐ ์ด์ personal access token์ ํตํด์ ์ธ์ฆ์ ํ ์ ์์ผ๋ ๊ผญ setting -> developer setting -> personal access tokens -> generate token ์ ์ฐจ๋ฅผ ํตํด ํ ํฐ์ ์์ฑํ๊ณ ๊ธฐ์ตํด๋๋๋กํ์!! (์ ์ด๋์ผ์ง ๋ค์ ๋ณผ ์ ์์. ๋ฉ๋ชจ์ฅ์ ๊ธฐ์ตํ๊ธฐ)
// github์ ์๊ฒฉ์ ์ฅ์์ ์ฐ๊ฒฐํ๊ธฐ
git remote add origin <remote repository URL>
// github ์๊ฒฉ์ ์ฅ์ ํ์ผ๋ค ๋ด๋ ค๋ฐ๊ธฐ
// ๋ง์ง๋ง์ .์ ์
๋ ฅํ๋ฉด ํด๋๋ ์๋ตํ๊ณ ๋ด์ฉ๋ค์ ๋ฐ์์ด
git clone <remote repository URL>
// ์๊ฒฉ์ ์ฅ์๋ก ๋ด์ฉ push
git push origin <branch name>
// ์๊ฒฉ์ ์ฅ์์ ๋ด์ฉ์ ๊ฐ์ ธ์ด
git pull
// fetch๋ ๋ด์ฉ์ ๊ฐ์ ธ์ค๊ณ ๋ฐ๋ก ๋ฐ์ํ์ง ์์
// merge ๋ช
๋ น์ ํตํด ๋ก์ปฌ working directory์ ๋ฐ์ํ ์ ์์
git fetch origin
// fork๋ git ๋ช
๋ น์ด๊ฐ ์๋!!!!
๐ ์ ๋ฆฌ
์ด๋ ๊ฒ ๊ฐ๋จํ์ง๋ง ์์ ์๊ฐ์ ๋ฐฐ์ด Git๊ณผ Github์ ๋ด์ฉ๋ค์ ์์ฝํ๊ณ ๋ณต์ตํด๋ณด์๋ค. ์์ผ๋ก ๊ฐ๋ฐ์๋ผ๋ฉด ์ ๋ง ์๋ ์์ด ๋ง์ฃผํ๊ณ ํ์ ์ ์ํ ๋๊ตฌ๋ก์จ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๊ฒ ๋ DevOps์ธ git์ ์ดํดํ๋ ๊ฒ์ ํ์๋ผ๊ณ ์๊ฐ๋๋ค. ์ฌ์ฉํ๋ค๋ณด๋ฉด ์ค๋ฅ๋ฅผ ๋ง์ฃผํ๊ธฐ๋ ํ๊ฒ ์ง๋ง ์ด๋ ์์ฃผ ์ฌ์ฉํด์ ์ต์ํด์ง๋๋ก ํด๋ณด์!!
๋ฒ์จ 4์์ ์ ๋ฐ์ด ์ง๋๊ฐ๋ค. S/W Engineering ์์ ์์ ๋ ๋ค๋ฅธ ๋ด์ฉ๋ค์ ๋ณต์ตํ ๋ ๋ค๋ฅธ DevOps๋ฅผ ์ ๋ฆฌํด๋ณด๋๋กํ์!!
ํ์ดํ !!
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ([Git] ๐ Git, Github ์ฌ์ฉ๋ฒ ๋ฐ ๋ด์ฉ ์ ๋ฆฌ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@choco1drink/Git-Git-Github-์ฌ์ฉ๋ฒ-๋ฐ-๋ด์ฉ-์ ๋ฆฌ์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค