GIT

[GIT] โšก๏ธ ๊นƒํ—™ Pull Request ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ• - ์•Œ๊ธฐ ์‰ฝ๊ฒŒ ์ •๋ฆฌ

์ธํŒŒ_ 2021. 11. 22. 14:59

Pull Request

์ฝ”๋“œ ๊ธฐ์—ฌ ์›๋ฆฌ (Fork ์™€ Pull Request (PR))

๋‹ค์Œ๊ณผ ๊ฐ™์ด Gildong์™€ Minji ๋ผ๋Š” ๊นƒํ—™ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž.

๊นƒํ—™ํฌํฌ

์ด๋•Œ Minji๊ฐ€ GIldong ๊ฐœ๋ฐœ์ž์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋งˆ์Œ์— ๋“ค์–ด, ๊ฐ™์ด ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•ด ๊ธฐ์—ฌ์ž(Contribute)๋กœ์„œ ๊ณตํ—Œ์„ ํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ €์žฅ์†Œ์— ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ €์žฅ์†Œ์˜ ์ฝ”๋“œ๋ฅผ ๋‚ด๊ฐ€ ์ˆ˜์ •ํ•˜๋ ค๋ฉด ๊ด€๋ฆฌ์ž๊ฐ€ ์ง์ ‘ ๋‚˜๋ฅผ ๊ธฐ์—ฌ์ž(Contribute)๋กœ ๋“ฑ๋ก์ด ๋˜์–ด์žˆ์–ด์•ผ ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๋ชจ๋“  ์‚ฌ๋žŒ์„ ๋‹ค Contribute๋กœ ๋“ฑ๋กํ•  ์ˆ˜๋Š” ์—†๋Š” ํ˜„์‹ค์ด๋‹ค.

 

์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด Fork ์ด๋‹ค.

๊นƒํ—™-pr-fork

ํฌํฌ๋กœ ์ฟก ์ฐ”๋Ÿฌ ๊ฐ€์ ธ์˜ค๋“ฏ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ €์žฅ์†Œ์— ์žˆ๋Š” ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋‚ด ์›๊ฒฉ ์ €์žฅ์†Œ, ๊นƒํ—ˆ๋ธŒ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด๋‹ค.

์ฆ‰, Minji๋ผ๋Š” ์œ ์ €๊ฐ€ Gildong์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ค‘ ํ•˜๋‚˜๋ฅผ Forkํ•˜์˜€๋‹ค๋ฉด, Minji์˜ github์— ํ•ด๋‹น ๋ ˆํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€ ์ง€์ œ ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ ๋‚˜์„œ Forkํ•ด์˜จ ์›๊ฒฉ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋‚ด ๋กœ์ปฌ์— Clone ํ•œ ํ›„ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.

Fork : ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์›๊ฒฉ์ €์žฅ์†Œ์— ๋ณต์‚ฌ
Clone : ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋กœ์ปฌ์ €์žฅ์†Œ์— ๋ณต์‚ฌ

๊นƒํ—™-pr-fork

 

์ด์ œ Minji ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๊ฒƒ ์ €๊ฒƒ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•œ ํ›„, ์•„๊นŒ forkํ–ˆ๋˜ Minji์˜ ์›๊ฒฉ ์ €์žฅ์†Œ์— ์ปค๋ฐ‹ํ•œ ๋’ค,

Gildong์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—๋„ ๋ฐ˜์˜์ด ๋˜๋ฉด ์ข‹๊ฒ ๋‹ค ์ƒ๊ฐ์ด๋“ค๋ฉด Pull Request๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฌ๋ฉด Gildong์ด ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ํ•˜๊ณ  ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉด ์ž์‹ ์˜ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— merge๋ฅผ ํ•˜๋Š” ์‹์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ธฐ์—ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

๊นƒํ—™-pr-fork


Pull Request ๋ž€?

๋”ฐ๋ผ์„œ Pull Request(PR)์„ ์ •๋ฆฌํ•˜์ž๋ฉด, ๋‚ด๊ฐ€ ์ˆ˜์ •ํ•œ ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋‹ˆ ๋‚ด branch๋ฅผ ๊ฐ€์ ธ๊ฐ€ ๊ฒ€ํ†  ํ›„ ๋ณ‘ํ•ฉํ•ด์ฃผ๋ผ๊ณ  ์š”์ฒญ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. PR์„ ํ†ตํ•ด ์ฝ”๋“œ ์ถฉ๋Œ์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๊ณ  push ๊ถŒํ•œ์ด ์—†๋Š” ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

 

pull request ์‚ฌ์šฉ ๋‹จ๊ณ„

pull request

์œ„์—์„œ Gildong๊ณผ Minji๋ฅผ ์˜ˆ๋ฅผ ๋“ค์–ด ์„ค๋ช…ํ–ˆ์ง€๋งŒ ๋‹ค์‹œํ•œ๋ฒˆ ์ด์ •๋ฆฌํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๋‚ด ์›๊ฒฉ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— Fork
  2. clone ์„ค์ •
  3. remote ์„ค์ •
  4. branch ์ƒ์„ฑ
  5. ์ˆ˜์ • ์ž‘์—… ํ›„ add, commit, push (๋งŒ์ผ ๋‚˜ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ๊ธฐ์—ฌ์ž(ํŒ€์›)์ด ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค๋ฉด fetch๋กœ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™€ ์ถฉ๋Œ์„ ํ•ด๊ฒฐ)
  6. Pull Request ์ƒ์„ฑ
  7. Merge Pull Request
  8. Merge ์ดํ›„ ๋™๊ธฐํ™” ๋ฐ branch ์‚ญ์ œ

๊นƒํ—™ Pull Request ์‹ค์Šต

 

1. ์›๋ณธ ์ €์žฅ์†Œ๋ฅผ Fork ๐Ÿด ํ•˜๊ธฐ

๊ธฐ์—ฌํ•˜๊ธฐ ์›ํ•˜๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ์šฐ์ธก ์ƒ๋‹จ์— ํฌํฌ ๋ฒ„ํŠผ๋ˆŒ๋Ÿฌ Forkํ•œ๋‹ค.

๊นƒํ—™-PullRequest
๊นƒํ—™-PullRequest

 

Fork๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋‚ด ์›๊ฒฉ ์ €์žฅ์†Œ์— ํ•ด๋‹น ๋ ˆํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ๋ณต์ œ ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ด๋ฆ„ ๋ฐ‘์— Fork From ์›๋ž˜์ €์žฅ์†Œ๋ผ๊ณ  ์ถœ์ฒ˜๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๊นƒํ—™-PullRequest

 

2. Forkํ•œ ์ €์žฅ์†Œ๋ฅผ ๋กœ์ปฌ๋กœ Clone ํ•˜๊ธฐ

์ด์ œ ์ž‘์—…ํ•˜๊ธฐ ์œ„ํ•ด ํฌํฌ ํ•œ ์›๊ฒฉ ์ €์žฅ์†Œ ์†Œ์Šค๋ฅผ ๊ทธ๋Œ€๋กœ ๋‚ด ๋กœ์ปฌ ์ปดํ“จํ„ฐ์— ๋ณต์‚ฌํ•ด ์ถ”๊ฐ€ํ•œ๋‹ค.

Code ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ํ‘œ์‹œ๋˜๋Š” URL์„ ๋ณต์‚ฌํ•˜๊ณ  ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

๊นƒํ—™-PullRequest

$ cd C:\Users\MS\Desktop\๊ณต๋ถ€ # clondํ•  ๋กœ์ปฌ ํด๋”๋กœ ์ด๋™

$ git clone <๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ URL>

๊นƒํ—™-PullRequest

 

3. ์›๋ณธ ์ €์žฅ์†Œ Remote ์„ค์ •

๋ ˆํŒŒ์ง€ํ† ๋ฆฌ๋ฅผ cloneํ•˜๋ฉด origin ์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ remote url์ด ๋‚ด ์›๊ฒฉ ์ €์žฅ์†Œ๋กœ ๊ธฐ๋ณธ์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค. 

ํ•˜์ง€๋งŒ ๋‚ด ์›๊ฒฉ ์ €์žฅ์†Œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ํฌํฌ ํ–ˆ๋˜ ์›๋ณธ ์ €์žฅ์†Œ๋„ remote๋กœ ๋“ฑ๋ก ํ•ด์ฃผ๋Š” ๊ฒŒ ์ข‹๋‹ค. ๋‚˜์ค‘์— ์›๋ณธ ์ €์žฅ์†Œ ๋‚ด์šฉ๊ณผ ๋™๊ธฐํ™” ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋”” ๋•Œ๋ฌธ์ด๋‹ค.

# ์›๋ณธ ์ €์žฅ์†Œ remote ๋“ฑ๋ก
$ git remote add <๋ณ„๋ช…> <์›๋ณธ ์ €์žฅ์†Œ url>
 
# ์›๊ฒฉ ์ €์žฅ์†Œ ํ™•์ธ
$ git remote -v

๊นƒํ—™-PullRequest

 

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

๊นƒํ—™-PullRequest

 

5. ์ฝ”๋“œ ์ž‘์—… ํ›„ Add / Commit / Push

์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด, ์ž์‹ ์˜ ๊นƒํ—™ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ(origin)์— add, commit, push ํ•˜์—ฌ ๋ฐ˜์˜ํ•œ๋‹ค.

๊นƒํ—™-PullRequest

$ git add . 

$ git commit -m "test์ž…๋‹ˆ๋‹ค. ๋ฌด์‹œํ•˜์„ธ์š”"

$ git push origin develop

๊นƒํ—™-PullRequest

 

Push ์™„๋ฃŒํ›„, ๊นƒํ—™ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์ ‘์†ํ•ด๋ณด๋ฉด ๋‚ด๊ฐ€ ๋ณ€๊ฒฝํ•œ ์‚ฌํ•ญ(text.txt)์ด ๋ฐ˜์˜๋˜์–ด ์žˆ๋Š”๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊นƒํ—™-PullRequest

 

6. Pull Request ์ƒ์„ฑ

๊นƒํ—™ ์ €์žฅ์†Œ ์ƒ๋‹จ์„ ๋ณด๋ฉด Compare & pull request ๋ฒ„ํŠผ์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ƒ๋‹จ์— ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ณ , PR ๋ฉ”์„ธ์ง€๋ฅผ ์ž‘์„ฑํ•˜๊ณ  Cretae pull request ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.

PR ๋ฉ”์„ธ์ง€๋ฅผ ์“ธ ๋•Œ์—๋Š” ๋ธŒ๋žœ์น˜์—์„œ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ์ˆ˜์ •ํ–ˆ๋Š”์ง€ ์ž์„ธํ•˜๊ฒŒ ์“ฐ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

๊นƒํ—™-PullRequest
๊นƒํ—™-PullRequest

 

7. Merge Pull Request

Pull Request๋ฅผ ๋ฐ›์€ ์›๋ณธ ์ €์žฅ์†Œ ๊ด€๋ฆฌ์ž๋Š” ์ฝ”๋“œ ๋ณ€๊ฒฝ๋‚ด์šฉ์„ ํ™•์ธํ•˜๊ณ  Merge ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ฒŒ ๋œ๋‹ค.

์›์ž‘์ž๊ฐ€ ์Šน์ธ์„ ํ•˜๋ฉด Merge Confirm์œผ๋กœ ์›๋ณธ ์ €์žฅ์†Œ์— ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์ด ๋ฐ˜์˜์ด ๋˜๊ณ , pull request์˜ ์ƒํƒœ๋Š” closed๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค. ๋งŒ์ผ ๋ง˜์— ๋“ค์ง€ ์•Š๋Š”๋‹ค ํ•˜๋ฉด Reject ๋œ๋‹ค.

๊นƒํ—™-PullRequest

 

8. Merge ์ดํ›„ ๋™๊ธฐํ™” ๋ฐ Branch ์‚ญ์ œ

์›๋ณธ ์ €์žฅ์†Œ์— Merge๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋กœ์ปฌ ์ฝ”๋“œ์™€ ์›๋ณธ ์ €์žฅ์†Œ์˜ ์ฝ”๋“œ๋ฅผ ๋™๊ธฐํ™”ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ž‘์—…ํ•˜๋˜ ๋กœ์ปฌ์˜ branch๋Š” ๋”์ด์ƒ ์‚ฌ์šฉ์„ ์•ˆํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ญ์ œํ•œ๋‹ค.

# ์ฝ”๋“œ ๋™๊ธฐํ™”
$ git pull father # ์›๋ณธ remote ์™€ ๋™๊ธฐํ™”
 
# branch ์‚ญ์ œ
$ git branch -d develop # ์šฉ๋ฌด๊ฐ€ ๋๋‚œ ๋ธŒ๋žœ์น˜ ์‚ญ์ œ

์ด๋Ÿฐ์‹์œผ๋กœ, ๋‚˜์ค‘์— ์ถ”๊ฐ€๋กœ ์ž‘์—…ํ•  ์ผ์ด ์žˆ์œผ๋ฉด git pull ๋ช…๋ น์„ ํ†ตํ•ด ์›๋ณธ ์ €์žฅ์†Œ์™€ ๋™๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์œ„์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด ๋œ๋‹ค.