์ด๋ณด์๋ฅผ ์ํ GitHub์์ ๊ฐ๋ฐ ํ๋ก์ ํธ ํ์ ์์ํ๊ธฐ: ForkยทCloneยทPull Request๋ฅผ ํ ๋ฒ์ ์ดํดํ๋ ์ค์ต ๊ฐ์ด๋
์ด๋ณด์๋ฅผ ์ํ GitHub์์ ๊ฐ๋ฐ ํ๋ก์ ํธ ํ์ ์์ํ๊ธฐ: ForkยทCloneยทPull Request๋ฅผ ํ ๋ฒ์ ์ดํดํ๋ ์ค์ต ๊ฐ์ด๋ 1...
์ด๋ณด์๋ฅผ ์ํ GitHub์์ ๊ฐ๋ฐ ํ๋ก์ ํธ ํ์ ์์ํ๊ธฐ: ForkยทCloneยทPull Request๋ฅผ ํ ๋ฒ์ ์ดํดํ๋ ์ค์ต ๊ฐ์ด๋
1) ์ ์ฒด ๊ทธ๋ฆผ: Fork, Clone, PR์ด ํ์ํ ์ด์
- Fork: ๋ค๋ฅธ ์ฌ๋(๋๋ ์กฐ์ง)์ ์ ์ฅ์๋ฅผ ๋ด ๊ณ์ ์ผ๋ก ๋ณต์ ํด โ๋ด ๊ณต๊ฐโ์์ ๋ง์๊ป ์คํํ ์ ์๊ฒ ํฉ๋๋ค. ์๋ณธ์ ์ง์ ์ฐ๊ธฐ ๊ถํ์ด ์์ด๋ ๊ธฐ์ฌ ๊ฐ๋ฅ.
- Clone: Forkํ ์ ์ฅ์๋ฅผ ๋ด PC๋ก ๋ด๋ ค๋ฐ๋ ๊ฒ. ๋ก์ปฌ์์ ์ฝ๋ ์์ ยท์คํยทํ ์คํธ๋ฅผ ํฉ๋๋ค.
- Pull Request(PR): ๋ด๊ฐ ๋ง๋ ๋ณ๊ฒฝ์ฌํญ์ ์๋ณธ ์ ์ฅ์์ โ์ด ๋ณ๊ฒฝ์ ํฉ์ณ์ฃผ์ธ์โ๋ผ๊ณ ์ ์ํ๋ ํ์ ์ ์ฐจ. ์ฝ๋ ๋ฆฌ๋ทฐ์ ํ์ง ๊ด๋ฆฌ์ ํต์ฌ์ ๋๋ค. ํ ๋ฌธ์ฅ์ผ๋ก ์์ฝํ๋ฉด: Fork๋ก ๋ด ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ , Clone์ผ๋ก PC์์ ์์ ํ ๋ค, PR๋ก ์๋ณธ์ ๋ฐ์์ ์์ฒญํฉ๋๋ค.
2) ์ค์ต ์ค๋น: ๊ผญ ์์์ผ ํ ์ฉ์ด 3๊ฐ
(1) origin๊ณผ upstream
- origin: ๋ณดํต ๋ด Fork ์ ์ฅ์๋ฅผ ๊ฐ๋ฆฌํค๋ ์๊ฒฉ ์ด๋ฆ
- upstream: ๋ณดํต ์๋ณธ ์ ์ฅ์๋ฅผ ๊ฐ๋ฆฌํค๋ ์๊ฒฉ ์ด๋ฆ(์ง์ ์ถ๊ฐํด์ค์ผ ํ๋ ๊ฒฝ์ฐ ๋ง์)
(2) main๊ณผ ๋ธ๋์น
ํ์ ์์๋ main(๋๋ master)์ ๋ฐ๋ก ์์ ํ์ง ์๊ณ , ์์ ์ฉ ๋ธ๋์น๋ฅผ ๋ง๋ค์ด ๋ณ๊ฒฝํฉ๋๋ค. ์ถฉ๋์ ์ค์ด๊ณ ๋ฆฌ๋ทฐ๊ฐ ์ฌ์์ ธ์.
(3) ์ปค๋ฐ(Commit)
์์ ์ โํ ๋ฉ์ด๋ฆฌโ๋ก ์ ์ฅํ๋ ๊ธฐ๋ก. ๋ฉ์์ง๋ ๋์ค์ ์ฐพ๊ธฐ ์ฝ๊ฒ ๋ฌด์์ ์ ๋ฐ๊ฟจ๋์ง ์ฐ๋ ๊ฒ ์ค์ํฉ๋๋ค.
3) ์ค์ต: Fork โ Clone โ ๋ธ๋์น โ PR๊น์ง ํ ๋ฒ์
์๋ ์์๋ โ๋ฌธ์ ์คํ ์์ โ ๊ฐ์ ์์ ๊ธฐ์ฌ๋ฅผ ๊ฐ์ ํฉ๋๋ค. ๊ฐ๋ฐ ์ด๋ณด์๊ฐ ๊ฐ์ฅ ๋ง์ด ์ฑ๊ณตํ๋ ์ฒซ PR์ด๊ธฐ๋ ํด์.
Step 1. Fork ํ๊ธฐ (์น์์)
์๋ณธ ์ ์ฅ์ ํ์ด์ง์์ Fork ๋ฒํผ์ ๋๋ฌ ๋ด ๊ณ์ ์ผ๋ก ๋ณต์ ํฉ๋๋ค. ์ด์ ๋ด ๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ์๊ฒผ์ต๋๋ค.
Step 2. Clone ํ๊ธฐ (ํฐ๋ฏธ๋์์)
๋ด Fork ์ ์ฅ์๋ฅผ ๋ก์ปฌ๋ก ๋ฐ์ต๋๋ค.
git clone <๋ด-ํฌํฌ-์ ์ฅ์-์ฃผ์>
cd <์ ์ฅ์-ํด๋>
Step 3. upstream ์ถ๊ฐ(์ ํ์ด์ง๋ง ๊ฐ๋ ฅ ์ถ์ฒ)
์๋ณธ ์ ์ฅ์ ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ๋ผ๊ฐ๋ ค๋ฉด upstream์ ์ก์๋๋ฉด ํธํฉ๋๋ค.
git remote add upstream <์๋ณธ-์ ์ฅ์-์ฃผ์> git remote -v
Step 4. ์ต์ ์ํ๋ก ๋๊ธฐํํ๊ณ ๋ธ๋์น ๋ง๋ค๊ธฐ
์๋ณธ์ด ์ ๋ฐ์ดํธ๋์ ์ ์์ผ๋ ๋จผ์ ๋ง์ถ ๋ค ์์ ๋ธ๋์น๋ฅผ ๋ง๋ญ๋๋ค.
git fetch upstream git checkout main git merge upstream/main git checkout -b docs/fix-typo
๋ธ๋์น ์ด๋ฆ์ ํ ๊ท์น์ด ์์ผ๋ฉด ๋ฐ๋ฅด๊ณ , ์์ผ๋ฉด feature/, fix/, docs/ ๊ฐ์ ์ ๋์ฌ๋ฅผ ๋ถ์ด๋ฉด ๊ด๋ฆฌ๊ฐ ์ฌ์์.
Step 5. ์ฝ๋ ์์ โ ์ปค๋ฐ
์๋ฅผ ๋ค์ด README.md์ ์คํ๋ฅผ ์์ ํ๋ค๊ณ ํด๋ณผ๊ฒ์.
git status
git add README.md
git commit -m "docs: fix typo in README"
์ปค๋ฐ ๋ฉ์์ง๋ ๋์ฌ๋ก ์์ํ๊ณ , ๋ณ๊ฒฝ ๋ชฉ์ ์ด ๋ณด์ด๊ฒ ์ ์ผ๋ฉด ๋ฆฌ๋ทฐ์ด๊ฐ ์ดํดํ๊ธฐ ์ข์ต๋๋ค.
Step 6. ๋ด Fork(origin)๋ก push
๋ก์ปฌ ๋ธ๋์น๋ฅผ ๋ด ์๊ฒฉ ์ ์ฅ์์ ์ฌ๋ฆฝ๋๋ค.
git push origin docs/fix-typo
Step 7. Pull Request ๋ง๋ค๊ธฐ (์น์์)
๋ด Fork ์ ์ฅ์๋ก ๊ฐ๋ฉด โCompare & pull requestโ ๊ฐ์ ๋ฒํผ์ด ๋ณด์ ๋๋ค. PR ์์ฑ ์ ์๋ 3๊ฐ์ง๋ฅผ ์ฑ์ฐ๋ฉด ํต๊ณผ์จ์ด ํ ์ฌ๋ผ๊ฐ์.
-
๋ฌด์์ ๋ฐ๊ฟจ๋์ง: ์คํ ์์ , ๋ฌธ๊ตฌ ๊ฐ์ ๋ฑ ํ ์ค ์์ฝ
-
์ ๋ฐ๊ฟจ๋์ง: ํผ๋ ๋ฐฉ์ง, ๋ฌธ์ ์ ํ์ฑ ๊ฐ์ ๋ฑ ์ด์
-
์ด๋ป๊ฒ ํ์ธํ๋์ง: ๋ฌธ์ ๋ ๋๋ง ํ์ธ, ๋น๋/ํ ์คํธ ์ฌ๋ถ ์์ ํ ํ๋ฆฟ:
-
๋ณ๊ฒฝ ๋ด์ฉ: README ์ค์น ๋ฌธ์ ์คํ 1๊ฑด ์์
-
ํ์ธ: ๋ก์ปฌ์์ ๋ฌธ์ ํ์ธ(๋ ๋๋ง ๋ฌธ์ ์์)
4) ํ์ ์์ ์์ฃผ ๊ฒช๋ ์ํฉ 3๊ฐ์ง์ ํด๊ฒฐ
(1) PR์์ โ์ถฉ๋(Conflict)โ์ด ๋ฌ์ด์
์๋ณธ์์ ๊ฐ์ ํ์ผ์ด ๋ฐ๋์์ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค. ๋ก์ปฌ์์ ์๋ณธ ๋ณ๊ฒฝ์ ๋ค์ ๊ฐ์ ธ์ ์ ๋ฆฌํฉ๋๋ค.
git fetch upstream git checkout main git merge upstream/main git checkout docs/fix-typo git merge main
์ถฉ๋ ํ์ผ์ ์ด์ด ์๋์ผ๋ก ์ ๋ฆฌํ ๋ค ๋ค์ ์ปค๋ฐํ๊ณ git push ํ๋ฉด PR์ ๋ฐ์๋ฉ๋๋ค.
(2) ๋ฆฌ๋ทฐ์์ ์์ ์์ฒญ์ด ์์ด์
PR ๋ซ์ง ๋ง๊ณ ๊ฐ์ ๋ธ๋์น์์ ์์ ์ปค๋ฐ์ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
# ์์ ํ
git add .
git commit -m "docs: refine wording per review"
git push origin docs/fix-typo
(3) ์ค์๋ก ๋ค๋ฅธ ํ์ผ๊น์ง ์ปค๋ฐํ์ด์
์์ ์ค์๋ ํํฉ๋๋ค. ๋ถํ์ํ ๋ณ๊ฒฝ์ ๋๋๋ฆฌ๊ณ ๋ค์ ์ปค๋ฐํ์ธ์.
git restore <ํ์ผ๋ช
>
git add <ํ์ผ๋ช
>
git commit -m "chore: revert unintended changes"
5) ์ด๋ณด์๊ฐ ์ฒซ ํ์ ์์ ์ฑ๊ณตํ๋ ํ
- ์๊ฒ ๋ฐ๊พธ๊ณ ์์ฃผ PR: ํฐ ๊ธฐ๋ฅ๋ณด๋ค ์์ ๊ฐ์ ์ด ํฉ์ณ์ง ํ๋ฅ ์ด ๋์ต๋๋ค.
- ํ PR = ํ ๋ชฉ์ : ๋ฌธ์ ์์ PR์ ์ฝ๋ ๋ฆฌํฉํฐ๋ง์ ์์ง ์๊ธฐ.
- ์ง๋ฌธ์ ๊ตฌ์ฒด์ ์ผ๋ก: โ์ ๋ผ์โ๋ณด๋ค โ์ด๋ ๋ช ๋ น์์ ์ด๋ค ๋ฉ์์ง๊ฐ ๋์๋์งโ๋ฅผ ๊ณต์ ํ๋ฉด ํด๊ฒฐ์ด ๋นจ๋ผ์. ์ฌ๊ธฐ๊น์ง ๋ฐ๋ผ์๋ค๋ฉด, ์ด์ GitHub ํ์ ์ ๋ผ๋๋ ์กํ ๊ฒ๋๋ค. ๋ค์ ๋จ๊ณ๋ก๋ ํ์ ๋ธ๋์น ์ ๋ต(์: Git Flow ๊ฐ๋จ ๋ฒ์ )์ด๋ ๋ฆฌ๋ทฐ ๊ท์น์ ์ตํ๋ฉด, ๊ฐ๋ฐ ํ๋ก์ ํธ์์ ํจ์ฌ ์์ฐ์ค๋ฝ๊ฒ ๊ธฐ์ฌํ ์ ์์ด์.
โฌ๏ธ ์ด ๊ธ์ด ๋์์ด ๋์ จ๋ค๋ฉด, ์๋ ๊ด๊ณ ๋ฅผ ํ ๋ฒ๋ง ํด๋ฆญํด์ฃผ์ธ์! ์ ์๊ฒ ํฐ ํ์ด ๋ฉ๋๋ค ๐โโ๏ธ โฌ๏ธ