์ค๋ต๊น ๐ช - ์ค๊ธํธ #6: Fork๋ ๋ ํฌ์ ๋ฉ์ธ ๋ ํฌ ๋๊ธฐํํ๋ ๋ฒ
by its_TIMIFork๋ ๋ ํฌ์ ๋ฉ์ธ ๋ ํฌ ๋๊ธฐํํ๋ ๋ฒ
GitHub์์ ํ์ ์ ํ๋ค ๋ณด๋ฉด, Forkํ ๋ ํฌ๋ฅผ ๋ฉ์ธ ๋ ํฌ์ ๋๊ธฐํํด์ผ ํ๋ ์ํฉ์ด ์์ฃผ ๋ฐ์ํ๋ค.
Fork๋ ์๋ณธ(๋ฉ์ธ) ๋ ํฌ์ ๋ณต์ฌ๋ณธ์ด์ง๋ง, ๋ฉ์ธ ๋ ํฌ๋ ๊ณ์ ์ ๋ฐ์ดํธ๋๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ์ง๋๋ฉด Forkํ ๋ ํฌ์ ์ฐจ์ด๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋ฐ๋ผ์, ์ต์ ์ํ๋ฅผ ์ ์งํ๊ธฐ ์ํด Fork๋ ๋ ํฌ๋ฅผ ๋ฉ์ธ ๋ ํฌ์ ๋๊ธฐํํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
์ด ๊ธ์์๋ Forkํ ๋ ํฌ๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ๋ ๋ฐฉ๋ฒ์ ๋จ๊ณ๋ณ๋ก ์ ๋ฆฌํ๋ค.
๐ Fork์ ๋ฉ์ธ ๋ ํฌ์ ๊ด๊ณ
GitHub์์ Fork๋ ๋ค๋ฅธ ์ฌ๋์ ๋ ํฌ๋ฅผ ๋ด ๊ณ์ ์ผ๋ก ๋ณต์ฌํ๋ ๊ณผ์ ์ด๋ค.
Forkํ ๋ ํฌ๋ ์๋ณธ ๋ ํฌ์ ์ฐ๊ฒฐ๋์ด ์์ง ์์ผ๋ฏ๋ก, ๋ฉ์ธ ๋ ํฌ์์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํด๋ ์๋์ผ๋ก ๋ฐ์๋์ง ์๋๋ค.
๊ทธ๋ ๋ค๋ฉด, ์ด๋ป๊ฒ ์ต์ ์ํ๋ก ๋๊ธฐํํ ์ ์์๊น?
๐ Fork๋ ๋ ํฌ๋ฅผ ๋ฉ์ธ ๋ ํฌ์ ๋๊ธฐํํ๋ ๊ณผ์
- Forkํ ๋ ํฌ๋ฅผ ๋ก์ปฌ๋ก ํด๋ก ํ๊ธฐ
- ๋ฉ์ธ ๋ ํฌ๋ฅผ ์๊ฒฉ ์ ์ฅ์(upstream)๋ก ์ถ๊ฐ
- ๋ฉ์ธ ๋ ํฌ์ ์ต์ ์ฝ๋ ๊ฐ์ ธ์ค๊ธฐ
- ๋ด ๋ก์ปฌ ๋ธ๋์น์ ๋ณํฉํ๊ธฐ
- ์ถฉ๋ ๋ฐ์ ์ ํด๊ฒฐ
- Fork๋ ๋ ํฌ(origin)์๋ ๋ณ๊ฒฝ ์ฌํญ ๋ฐ์(Push)
1๏ธโฃ Forkํ ๋ ํฌ ํด๋ก ํ๊ธฐ
์ฐ์ , GitHub์์ Forkํ ๋ ํฌ๋ฅผ ๋ก์ปฌ๋ก ๊ฐ์ ธ์์ผ ํ๋ค.
Forkํ ๋ ํฌ์ URL์ ํ์ธํ ํ, ์๋ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ค.
git clone <fork๋ ๋ ํฌ URL>
cd <๋ ํฌ ํด๋๋ช
>
์๋ฅผ ๋ค์ด, GitHub์ ์๋ itstimi-XD/code-examples๊ฐ Forkํ ๋ ํฌ์ผ ๊ฒฝ์ฐ:
git clone https://github.com/thombergs/code-examples.git
cd code-examples
โ ์ด์ Forkํ ๋ ํฌ๊ฐ ๋ก์ปฌ์ ๋ณต์ฌ๋์๊ณ , ํด๋น ํด๋๋ก ์ด๋ํ ์ ์๋ค.
2๏ธโฃ ๋ฉ์ธ ๋ ํฌ๋ฅผ ์๊ฒฉ ์ ์ฅ์๋ก ์ถ๊ฐํ๊ธฐ
Forkํ ๋ ํฌ๋ ๋ฉ์ธ ๋ ํฌ์ ๋ณ๋๋ก ๊ด๋ฆฌ๋๋ฏ๋ก, ๋ฉ์ธ ๋ ํฌ๋ฅผ upstream์ผ๋ก ์ถ๊ฐํด์ผ ํ๋ค.
git remote add upstream <๋ฉ์ธ ๋ ํฌ URL>
์๋ฅผ ๋ค์ด, ์๋ณธ(๋ฉ์ธ) ๋ ํฌ๊ฐ thombergs/code-examples๋ผ๋ฉด:
git remote add upstream https://github.com/thombergs/code-examples.git
โ upstream์ ์ถ๊ฐํ๋ฉด, ์ดํ ๋ฉ์ธ ๋ ํฌ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ฝ๊ฒ ๊ฐ์ ธ์ฌ ์ ์๋ค.
3๏ธโฃ ๋ฉ์ธ ๋ ํฌ์ ์ต์ ์ฝ๋ ๊ฐ์ ธ์ค๊ธฐ
์ด์ upstream(๋ฉ์ธ ๋ ํฌ)์์ ์ต์ ์ฝ๋๋ฅผ ๊ฐ์ ธ์จ๋ค.
git fetch upstream
โ ์ด ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด upstream์์ ์ต์ ๋ธ๋์น ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค์ง๋ง, ์์ง ๋ก์ปฌ ๋ธ๋์น์๋ ์ ์ฉ๋์ง ์๋๋ค.
4๏ธโฃ ๋ด ๋ธ๋์น์ ๋ฉ์ธ ๋ ํฌ ๋ณํฉํ๊ธฐ
๋ฉ์ธ ๋ ํฌ์์ ๊ฐ์ ธ์จ ์ต์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ด ๋ก์ปฌ ๋ธ๋์น์ ๋ณํฉํ๋ค.
git merge upstream/main
โ main ๋ธ๋์น๊ฐ ์ต์ ์ํ๋ก ์ ๋ฐ์ดํธ๋๋ค.
โ ๋ง์ฝ ๋ณ๊ฒฝ ์ฌํญ์ด ์ถฉ๋ ์์ด ์ ์ฉ๋๋ค๋ฉด, ์ฌ๊ธฐ์ ์๋ฃ!
โ ํ์ง๋ง Merge Conflict(์ถฉ๋)์ด ๋ฐ์ํ ์๋ ์๋ค.
5๏ธโฃ Merge Conflict(์ถฉ๋) ํด๊ฒฐํ๊ธฐ
๋ฉ์ธ ๋ ํฌ์ ๋ณ๊ฒฝ ์ฌํญ๊ณผ ๋ด Fork ๋ ํฌ์ ์ฝ๋๊ฐ ๊ฒน์น ๊ฒฝ์ฐ, ์๋ ๋ณํฉ์ด ์คํจํ ์ ์๋ค.
์ด ๊ฒฝ์ฐ, Git์ด ์ถฉ๋์ด ๋ฐ์ํ ํ์ผ์ ์๋ ค์ฃผ๋ฏ๋ก ์ง์ ์์ ํด์ผ ํ๋ค.
์ถฉ๋ ํ์ธ
git status
โ ์ถฉ๋์ด ๋ฐ์ํ ํ์ผ์ ํ์ธํ๊ณ ์ง์ ์์ ํ ํ, ์๋ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ค.
์ถฉ๋ ํด๊ฒฐ ํ ์ปค๋ฐํ๊ธฐ
git add .
git commit -m "Fix: Merge Conflict ํด๊ฒฐ"
โ ์ถฉ๋์ ํด๊ฒฐํ ํ, ๋ณ๊ฒฝ ์ฌํญ์ ์ปค๋ฐํ๋ค.
6๏ธโฃ Fork๋ ๋ ํฌ(origin)์ ์ต์ ์ฝ๋ ํธ์
์ด์ ์ต์ ์ฝ๋๊ฐ ์ ์ฉ๋ ์ํ์ด๋ฏ๋ก, Fork๋ ๋ ํฌ(GitHub origin)์๋ ๋ฐ์ํด์ผ ํ๋ค.
git push origin main
โ GitHub์ ์ฌ๋ผ๊ฐ ์๋ Fork๋ ๋ ํฌ๋ ์ต์ ์ฝ๋๋ก ๋๊ธฐํ ์๋ฃ! ๐
โ GitHub์์ PR(Pull Request)์ ๋ณด๋ผ ๋, ์ต์ ์ฝ๋๊ฐ ๋ฐ์๋ ์ํ๋ก ๋ณด๋ผ ์ ์๋ค.
๐ ์์ฝ ์ ๋ฆฌ ๐
๋จ๊ณ | ๋ช ๋ น์ด | ์ค๋ช |
1๏ธโฃ | git clone <fork๋ ๋ ํฌ URL> | Forkํ ๋ ํฌ๋ฅผ ๋ก์ปฌ์ ํด๋ก |
2๏ธโฃ | git remote add upstream <๋ฉ์ธ ๋ ํฌ URL> | ๋ฉ์ธ ๋ ํฌ(upstream)๋ฅผ ์๊ฒฉ ์ ์ฅ์๋ก ์ถ๊ฐ |
3๏ธโฃ | git fetch upstream | ๋ฉ์ธ ๋ ํฌ์์ ์ต์ ์ฝ๋ ๊ฐ์ ธ์ค๊ธฐ |
4๏ธโฃ | git merge upstream/main | ์ต์ ์ฝ๋์ ๋ด ๋ก์ปฌ ๋ธ๋์น ๋ณํฉ |
5๏ธโฃ | (์ถฉ๋ ๋ฐ์ ์) git status → git add . → git commit | ์ถฉ๋ ํด๊ฒฐ ํ ์ ์ฅ |
6๏ธโฃ | git push origin main | Fork๋ ๋ ํฌ์๋ ์ต์ ์ฝ๋ ๋ฐ์ |
๐น ๊ฒฐ๋ก
• Fork๋ ๋ ํฌ๋ ๋ฉ์ธ ๋ ํฌ์ ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํ๋ฏ๋ก, ์ง์์ ์ธ ๋๊ธฐํ๊ฐ ํ์ํ๋ค.
• ๋ฉ์ธ ๋ ํฌ์ ์ต์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์ ธ์ ๋ณํฉํ๋ ๊ณผ์ ์์ ์ถฉ๋์ด ๋ฐ์ํ ์ ์๋ค.
• ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ์ง์ ํด๊ฒฐ ํ, ๋ณ๊ฒฝ ์ฌํญ์ ์ปค๋ฐํ์ฌ ์ ๋ฐ์ดํธํ๋ค.
• ์ต์ข ์ ์ผ๋ก git push origin main์ ์คํํ๋ฉด GitHub์ Fork๋ ๋ ํฌ๋ ์ต์ ์ํ๋ก ์ ์ง๋๋ค.
์ด์ Fork ๊ธฐ๋ฐ ํ์ ์ ๋ ํจ์จ์ ์ผ๋ก ํ ์ ์์ ๊ฒ์ด๋ค! ๐
๋ค์ ๊ธ์์๋ Fork๋ ๋ ํฌ์์ ๋ณ๊ฒฝ ์ฌํญ์ PR๋ก ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฃฐ ์์ ์ด๋ค. ๐
๐ ๋ง๋ฌด๋ฆฌํ๋ฉฐ
Fork ๊ธฐ๋ฐ ํ์ ์ ํ ๋๋ ๋ฉ์ธ ๋ ํฌ์ ์ง์์ ์ผ๋ก ๋๊ธฐํํ๋ ๊ฒ์ด ์ค์ํ๋ค.
์ด์ git fetch upstream๊ณผ git merge๋ฅผ ํ์ฉํ์ฌ ์ต์ ์ํ๋ฅผ ์ ์งํ๋ ๋ฐฉ๋ฒ์ ์ตํ์ผ๋,
GitHub์์ ํ์ ํ ๋ ๋ ์์ํ๊ฒ ์งํํ ์ ์์ ๊ฒ์ด๋ค.
๋ค์ ์ค๋ต๊น์์๋ Fork๋ ๋ ํฌ์์ ์ถฉ๋์ ํด๊ฒฐํ ํ PR์ ์ ๋ฐ์ดํธํ๋ ๊ณผ์ ์ ๋ค๋ฃฐ ์์ ์ด๋ค!
๊ธฐ๋ํด๋ ์ข๋ค! ๐ ๐
'์ค๋ต ๊น๐ช > ์ค๊ธํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ธ๋ก๊ทธ์ ์ ๋ณด
Dev_TIMI
its_TIMI