[GIT] โก๏ธ ๊นํ Pull Request ๋ณด๋ด๋ ๋ฐฉ๋ฒ - ์๊ธฐ ์ฝ๊ฒ ์ ๋ฆฌ
์ฝ๋ ๊ธฐ์ฌ ์๋ฆฌ (Fork ์ Pull Request (PR))
๋ค์๊ณผ ๊ฐ์ด Gildong์ Minji ๋ผ๋ ๊นํ ๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ์๋ค๊ณ ํ์.
์ด๋ Minji๊ฐ GIldong ๊ฐ๋ฐ์์ ํ๋ก์ ํธ๊ฐ ๋ง์์ ๋ค์ด, ๊ฐ์ด ํ๋ก์ ํธ์ ์ฐธ์ฌํด ๊ธฐ์ฌ์(Contribute)๋ก์ ๊ณตํ์ ํ๊ณ ์ถ๋ค๊ณ ํ๋ค.
ํ์ง๋ง ๋ด๊ฐ ๋ค๋ฅธ ์ฌ๋์ ์ ์ฅ์์ ์๋ ์ฝ๋๋ฅผ ์์ ํ๊ฑฐ๋, ๋ค๋ฅธ ์ฌ๋์ ์ ์ฅ์์ ์ฝ๋๋ฅผ ๋ด๊ฐ ์์ ํ๋ ค๋ฉด ๊ด๋ฆฌ์๊ฐ ์ง์ ๋๋ฅผ ๊ธฐ์ฌ์(Contribute)๋ก ๋ฑ๋ก์ด ๋์ด์์ด์ผ ํ๋ค.
ํ์ง๋ง ๋ชจ๋ ์ฌ๋์ ๋ค Contribute๋ก ๋ฑ๋กํ ์๋ ์๋ ํ์ค์ด๋ค.
์ด๋ ์ฌ์ฉํ๋ ๊ฒ์ด Fork ์ด๋ค.
ํฌํฌ๋ก ์ฟก ์ฐ๋ฌ ๊ฐ์ ธ์ค๋ฏ ๋ค๋ฅธ ์ฌ๋์ ์ ์ฅ์์ ์๋ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ๋ด ์๊ฒฉ ์ ์ฅ์, ๊นํ๋ธ๋ก ๊ฐ์ ธ์ค๋ ๊ฒ์ด๋ค.
์ฆ, Minji๋ผ๋ ์ ์ ๊ฐ Gildong์ ๋ ํฌ์งํ ๋ฆฌ ์ค ํ๋๋ฅผ Forkํ์๋ค๋ฉด, Minji์ github์ ํด๋น ๋ ํฌ์งํ ๋ฆฌ๊ฐ ๊ทธ๋๋ก ๊ฐ์ ธ์ ์ง์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ Forkํด์จ ์๊ฒฉ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ๋ด ๋ก์ปฌ์ Clone ํ ํ ์ฝ๋๋ฅผ ์์ ํ๋ฉด ๋๋ค.
Fork : ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์๊ฒฉ์ ์ฅ์์ ๋ณต์ฌ
Clone : ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ๋ก์ปฌ์ ์ฅ์์ ๋ณต์ฌ
์ด์ Minji ๊ฐ๋ฐ์๊ฐ ์ด๊ฒ ์ ๊ฒ ์ฝ๋๋ฅผ ์์ ํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ ํ ํ, ์๊น forkํ๋ Minji์ ์๊ฒฉ ์ ์ฅ์์ ์ปค๋ฐํ ๋ค,
Gildong์ ๋ ํฌ์งํ ๋ฆฌ์๋ ๋ฐ์์ด ๋๋ฉด ์ข๊ฒ ๋ค ์๊ฐ์ด๋ค๋ฉด Pull Request๋ฅผ ๋ณด๋ด๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฉด Gildong์ด ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํ๊ณ ๋ฌธ์ ๊ฐ ์์ผ๋ฉด ์์ ์ ๋ฉ์ธ ๋ธ๋์น์ merge๋ฅผ ํ๋ ์์ผ๋ก ํ๋ก์ ํธ๋ฅผ ๊ธฐ์ฌํ๋ ๋ฐฉ์์ด๋ค.
Pull Request ๋?
๋ฐ๋ผ์ Pull Request(PR)์ ์ ๋ฆฌํ์๋ฉด, ๋ด๊ฐ ์์ ํ ์ฝ๋๊ฐ ์์ผ๋ ๋ด branch๋ฅผ ๊ฐ์ ธ๊ฐ ๊ฒํ ํ ๋ณํฉํด์ฃผ๋ผ๊ณ ์์ฒญ ํด์ฃผ๋ ๊ฒ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. PR์ ํตํด ์ฝ๋ ์ถฉ๋์ ์ต์ํํ ์ ์๊ณ push ๊ถํ์ด ์๋ ์คํ ์์ค ํ๋ก์ ํธ์ ๊ธฐ์ฌํ ๋ ๋ง์ด ์ฌ์ฉํ๋ค.
pull request ์ฌ์ฉ ๋จ๊ณ
์์์ Gildong๊ณผ Minji๋ฅผ ์๋ฅผ ๋ค์ด ์ค๋ช ํ์ง๋ง ๋ค์ํ๋ฒ ์ด์ ๋ฆฌํ์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ด ์๊ฒฉ ๋ฆฌํฌ์งํ ๋ฆฌ์ Fork
- clone ์ค์
- remote ์ค์
- branch ์์ฑ
- ์์ ์์ ํ add, commit, push (๋ง์ผ ๋ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ๊ธฐ์ฌ์(ํ์)์ด ์์ค๋ฅผ ์์ ํ๋ค๋ฉด fetch๋ก ์ฝ๋๋ฅผ ๊ฐ์ ธ์ ์ถฉ๋์ ํด๊ฒฐ)
- Pull Request ์์ฑ
- Merge Pull Request
- Merge ์ดํ ๋๊ธฐํ ๋ฐ branch ์ญ์
๊นํ Pull Request ์ค์ต
1. ์๋ณธ ์ ์ฅ์๋ฅผ Fork ๐ด ํ๊ธฐ
๊ธฐ์ฌํ๊ธฐ ์ํ๋ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ฐ์ธก ์๋จ์ ํฌํฌ ๋ฒํผ๋๋ฌ Forkํ๋ค.
Fork๊ฐ ์๋ฃ๋๋ฉด ๋ด ์๊ฒฉ ์ ์ฅ์์ ํด๋น ๋ ํฌ์งํ ๋ฆฌ๊ฐ ๋ณต์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฆฌํฌ์งํ ๋ฆฌ ์ด๋ฆ ๋ฐ์ Fork From ์๋์ ์ฅ์๋ผ๊ณ ์ถ์ฒ๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
2. Forkํ ์ ์ฅ์๋ฅผ ๋ก์ปฌ๋ก Clone ํ๊ธฐ
์ด์ ์์ ํ๊ธฐ ์ํด ํฌํฌ ํ ์๊ฒฉ ์ ์ฅ์ ์์ค๋ฅผ ๊ทธ๋๋ก ๋ด ๋ก์ปฌ ์ปดํจํฐ์ ๋ณต์ฌํด ์ถ๊ฐํ๋ค.
Code ๋ฒํผ์ ๋๋ฌ ํ์๋๋ URL์ ๋ณต์ฌํ๊ณ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ค.
$ cd C:\Users\MS\Desktop\๊ณต๋ถ # clondํ ๋ก์ปฌ ํด๋๋ก ์ด๋
$ git clone <๋ ํฌ์งํฐ๋ฆฌ URL>
3. ์๋ณธ ์ ์ฅ์ Remote ์ค์
๋ ํ์งํ ๋ฆฌ๋ฅผ cloneํ๋ฉด origin ์ด๋ผ๋ ์ด๋ฆ์ผ๋ก remote url์ด ๋ด ์๊ฒฉ ์ ์ฅ์๋ก ๊ธฐ๋ณธ์ผ๋ก ์ค์ ๋์ด ์๋ค.
ํ์ง๋ง ๋ด ์๊ฒฉ ์ ์ฅ์ ๋ฟ๋ง ์๋๋ผ, ํฌํฌ ํ๋ ์๋ณธ ์ ์ฅ์๋ remote๋ก ๋ฑ๋ก ํด์ฃผ๋ ๊ฒ ์ข๋ค. ๋์ค์ ์๋ณธ ์ ์ฅ์ ๋ด์ฉ๊ณผ ๋๊ธฐํ ํ๊ธฐ ์ํด ์ฌ์ฉํ ๊ฒ์ด๋ ๋๋ฌธ์ด๋ค.
# ์๋ณธ ์ ์ฅ์ remote ๋ฑ๋ก
$ git remote add <๋ณ๋ช
> <์๋ณธ ์ ์ฅ์ url>
# ์๊ฒฉ ์ ์ฅ์ ํ์ธ
$ git remote -v
4. Branch ์์ฑ
ํ์ ์์ ํ๊ณผ ํจ๊ป ์ผํ ๋ ๋ธ๋์น ๋ถ๊ธฐ๋ ํ์์ด๋ค.
์๋ฅผ ๋ค์ด, ๋ฒ๊ทธ๋ฅผ ๊ณ ์น๋ ์์ ์ ํ๋ค๊ณ ํ๋ฉด bug-fix๋ผ๋ branch๋ฅผ ๋ง๋ค์ด ์ฝ๋๋ฅผ ๊ณ ์น ํ pushํ๋ฉด master ๋ธ๋์น์ ์ฝ๋๋ ๊ทธ๋๋ก ์ ์ง๋ ์ฑ๋ก bug-fix ๋ธ๋์น๋ง ์ต์ ์ฝ๋๊ฐ ๋๊ฒ ๋๋ค.
๊ทธ๋์ ๋ง์ฝ์ bug-fix ๋ธ๋์น์์ ์์ ๋ ์ฝ๋๊ฐ ์ฌ์ด๋ ์ดํํธ๋ฅผ ๋ฐ์ํ๋ค๊ณ ํด๋ master์ ์ฝ๋๊ฐ ๋จ์์๊ธฐ ๋๋ฌธ์ ๋ค์ ์ด์ ์ฝ๋๋ก ๋๋๋ฆฌ๊ธฐ๊ฐ ์ฝ๋ค.
๋ฐ๋ผ์ ํ์ ์์๋ branch๋ฅผ ๋ง๋ค์ด ์์ ํ ๋ค ๋ค์ ์์ ์ด ์๋ฃ๋๋ฉด ์ญ์ ํ๋ ์์ผ๋ก ์งํํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋ฐ์ฉ branch๋ฅผ ๋ง๋ค์ด์ ์งํํ๋ค.
# ๋ธ๋์น ์์ฑ
$ git branch <branch ์ด๋ฆ>
# ๋ธ๋์น ์ด๋
$ git checkout <branch ์ด๋ฆ>
# ๋ธ๋์น ์์ฑํ ์ด๋ (๋จ์ถ ๋ช
๋ น์ด)
$ git checkout -b <branch ์ด๋ฆ>
# ๋ธ๋์น ๋ฆฌ์คํธ
$ git branch
5. ์ฝ๋ ์์ ํ Add / Commit / Push
์ฝ๋๋ฅผ ์์ ํ๊ฑฐ๋ ๊ธฐ๋ฅ ์ถ๊ฐ ์์ ์ด ์๋ฃ๋๋ฉด, ์์ ์ ๊นํ ๋ฆฌํฌ์งํ ๋ฆฌ(origin)์ add, commit, push ํ์ฌ ๋ฐ์ํ๋ค.
$ git add .
$ git commit -m "test์
๋๋ค. ๋ฌด์ํ์ธ์"
$ git push origin develop
Push ์๋ฃํ, ๊นํ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ ์ํด๋ณด๋ฉด ๋ด๊ฐ ๋ณ๊ฒฝํ ์ฌํญ(text.txt)์ด ๋ฐ์๋์ด ์๋๊ฒ์ ๋ณผ ์ ์๋ค.
6. Pull Request ์์ฑ
๊นํ ์ ์ฅ์ ์๋จ์ ๋ณด๋ฉด Compare & pull request ๋ฒํผ์ด ํ์ฑํ๋์ด ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์๋จ์ ๋ฒํผ์ ํด๋ฆญํ๊ณ , PR ๋ฉ์ธ์ง๋ฅผ ์์ฑํ๊ณ Cretae pull request ๋ฒํผ์ ๋๋ฅด๋ฉด ํ ๋ฆฌํ์คํธ๋ฅผ ์์ฑํ๊ฒ ๋๋ค.
PR ๋ฉ์ธ์ง๋ฅผ ์ธ ๋์๋ ๋ธ๋์น์์ ์ด๋ค ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ์์ ํ๋์ง ์์ธํ๊ฒ ์ฐ๋ ๊ฒ์ด ์ข๋ค.
7. Merge Pull Request
Pull Request๋ฅผ ๋ฐ์ ์๋ณธ ์ ์ฅ์ ๊ด๋ฆฌ์๋ ์ฝ๋ ๋ณ๊ฒฝ๋ด์ฉ์ ํ์ธํ๊ณ Merge ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๊ฒ ๋๋ค.
์์์๊ฐ ์น์ธ์ ํ๋ฉด Merge Confirm์ผ๋ก ์๋ณธ ์ ์ฅ์์ ๋ณ๊ฒฝ๋ ์ฌํญ์ด ๋ฐ์์ด ๋๊ณ , pull request์ ์ํ๋ closed๋ก ๋ณ๊ฒฝ๋๋ค. ๋ง์ผ ๋ง์ ๋ค์ง ์๋๋ค ํ๋ฉด Reject ๋๋ค.
8. Merge ์ดํ ๋๊ธฐํ ๋ฐ Branch ์ญ์
์๋ณธ ์ ์ฅ์์ Merge๊ฐ ์๋ฃ๋๋ฉด ๋ก์ปฌ ์ฝ๋์ ์๋ณธ ์ ์ฅ์์ ์ฝ๋๋ฅผ ๋๊ธฐํํ๋ค.
๊ทธ๋ฆฌ๊ณ ์์ ํ๋ ๋ก์ปฌ์ branch๋ ๋์ด์ ์ฌ์ฉ์ ์ํ๊ธฐ ๋๋ฌธ์ ์ญ์ ํ๋ค.
# ์ฝ๋ ๋๊ธฐํ
$ git pull father # ์๋ณธ remote ์ ๋๊ธฐํ
# branch ์ญ์
$ git branch -d develop # ์ฉ๋ฌด๊ฐ ๋๋ ๋ธ๋์น ์ญ์
์ด๋ฐ์์ผ๋ก, ๋์ค์ ์ถ๊ฐ๋ก ์์ ํ ์ผ์ด ์์ผ๋ฉด git pull ๋ช ๋ น์ ํตํด ์๋ณธ ์ ์ฅ์์ ๋๊ธฐํ๋ฅผ ์งํํ๊ณ ์์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ๋๋ค.