Skip to content

Latest commit

ย 

History

History
808 lines (673 loc) ยท 52.6 KB

2-contributing.asc

File metadata and controls

808 lines (673 loc) ยท 52.6 KB

GitHub ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๊ธฐ

๊ณ„์ •์€ ์ด์ œ ๋งŒ๋“ค์—ˆ์œผ๋‹ˆ ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณผ ์ฐจ๋ก€๊ฐ€ ๋๋‹ค.

ํ”„๋กœ์ ํŠธ Fork ํ•˜๊ธฐ

์ฐธ์—ฌํ•˜๊ณ  ์‹ถ์€ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์•„๋งˆ ๊ทธ ํ”„๋กœ์ ํŠธ์— Push ํ•  ๊ถŒํ•œ์€ ์—†์„ ํ…Œ๋‹ˆ๊นŒ โ€œForkโ€ ํ•ด์•ผ ํ•œ๋‹ค. โ€œForkโ€ ํ•˜๋ฉด GitHub์ด ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ต์งธ๋กœ ๋ณต์‚ฌํ•ด์ค€๋‹ค. ๊ทธ ๋ณต์‚ฌ๋ณธ์€ ์‚ฌ์šฉ์ž ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์žˆ๊ณ  Push ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

Note

๊ณผ๊ฑฐ์—๋Š” โ€œForkโ€ ๊ฐ€ ์ข‹์€ ์˜๋ฏธ๋กœ ์“ฐ์ด์ง€ ์•Š์•˜๋‹ค. ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ โ€œForkโ€ ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋ณต์‚ฌํ•ด์„œ ์กฐ๊ธˆ์€ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ–ˆ๊ณ  ๋•Œ๋•Œ๋กœ ์›๋ž˜ ํ”„๋กœ์ ํŠธ์™€ ๊ฒฝ์Ÿํ•˜๊ฑฐ๋‚˜ ๊ธฐ์—ฌ์ž๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ๋„ ํ–ˆ๋‹ค. GitHub์—์„œ โ€œForkโ€ ๋Š” ๋‹จ์ˆœํžˆ ์ž์‹ ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๊ณต๊ฐœํ•œ ์ƒํƒœ๋กœ ์ˆ˜์ •ํ•˜๊ณ  ์ข€ ๋” ์—ด๋ฆฐ ๋ฐฉ์‹์œผ๋กœ ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ๋ฐฉ์‹์—์„œ๋Š” ์‚ฌ๋žŒ๋“ค์„ ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€ํ•˜๊ณ  Push ๊ถŒํ•œ์„ ์ค˜์•ผ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ํ”„๋กœ์ ํŠธ๋ฅผ โ€œForkโ€ ํ•ด์„œ Push ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Push ํ•œ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์›๋ž˜ ์ €์žฅ์†Œ๋กœ ๋ณด๋‚ด ๊ธฐ์—ฌํ•œ๋‹ค. ์ด๊ฒƒ์„ Pull Request๋ผ๊ณ  ๋ถ€๋ฅด๋Š”๋ฐ ๋‚˜์ค‘์— ๋‹ค์‹œ ์„ค๋ช…ํ•œ๋‹ค. ํ† ๋ก  ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฑฐ๊ธฐ์„œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ํ•˜๋ฉด์„œ ํ† ๋ก ํ•˜๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค์–ด ํ† ๋ก ์„ ์‹œ์ž‘ํ•œ๋‹ค. ํ”„๋กœ์ ํŠธ ์†Œ์œ ์ž ๋งˆ์Œ์— ๋“ค ๋•Œ๊นŒ์ง€ ์†Œ์œ ์ž์™€ ๊ธฐ์—ฌ์ž๋Š” ํ•จ๊ป˜ ํ† ๋ก ํ•œ๋‹ค. ๋งˆ์Œ์— ๋“ค๊ฒŒ ๋˜๋ฉด Merge ํ•œ๋‹ค.

ํ”„๋กœ์ ํŠธ๋Š” ์‰ฝ๊ฒŒ Fork ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ”„๋กœ์ ํŠธ ํŽ˜์ด์ง€๋ฅผ ๋ฐฉ๋ฌธํ•ด์„œ ์˜ค๋ฅธ์ชฝ ๊ผญ๋Œ€๊ธฐ์— ์žˆ๋Š” โ€œForkโ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ๋‹ค.

โ€œForkโ€ ๋ฒ„ํŠผ.
Figure 1. โ€œForkโ€ ๋ฒ„ํŠผ.

๋ช‡ ์ดˆ์•ˆ์— ๋ณต์‚ฌ๋œ ํ”„๋กœ์ ํŠธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•œ๋‹ค. ์ด ์ƒˆ ํ”„๋กœ์ ํŠธ์˜ ์†Œ์œ ์ž๋Š” Fork ํ•œ ์‚ฌ๋žŒ ์ž์‹ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ๋‹ค.

GitHub ํ”Œ๋กœ์šฐ

GitHub์€ Pull Request๊ฐ€ ์ค‘์‹ฌ์ธ ํ˜‘์—… ์›Œํฌํ”Œ๋กœ๋ฅผ ์œ„์ฃผ๋กœ ์„ค๊ณ„๋๋‹ค. ์ด ์›Œํฌํ”Œ๋กœ๋Š” Fork ํ•ด์„œ ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๋Š” ๊ฒƒ์ธ๋ฐ ๋‹จ์ผ ์ €์žฅ์†Œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ์ž‘์€ ํŒ€์ด๋‚˜ ์ „ ์„ธ๊ณ„์—์„œ ํฉ์–ด์ ธ์„œ ์ผํ•˜๋Š” ํšŒ์‚ฌ, ํ˜น์€ ํ•œ ๋ฒˆ๋„ ๋ณธ ์  ์—†๋Š” ์‚ฌ๋žŒ๋“ค ์‚ฌ์ด์—์„œ๋„ ์œ ์šฉํ•˜๋‹ค. ch03-git-branching.asc ์—์„œ ์„ค๋ช…ํ–ˆ๋˜ ch03-git-branching.asc ์ค‘์‹ฌ์œผ๋กœ ์ผํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

๋ณดํ†ต์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์ผํ•œ๋‹ค.

  1. ํ”„๋กœ์ ํŠธ๋ฅผ Fork ํ•œ๋‹ค.

  2. master ๊ธฐ๋ฐ˜์œผ๋กœ ํ† ํ”ฝ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ ๋‹ค.

  3. ๋ญ”๊ฐ€ ์ˆ˜์ •ํ•ด์„œ ์ปค๋ฐ‹ํ•œ๋‹ค.

  4. ์ž์‹ ์˜ GitHub ํ”„๋กœ์ ํŠธ์— ๋ธŒ๋žœ์น˜๋ฅผ Push ํ•œ๋‹ค.

  5. GitHub์— Pull Request๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

  6. ํ† ๋ก ํ•˜๋ฉด์„œ ๊ทธ์— ๋”ฐ๋ผ ๊ณ„์† ์ปค๋ฐ‹ํ•œ๋‹ค.

  7. ํ”„๋กœ์ ํŠธ ์†Œ์œ ์ž๋Š” Pull Request๋ฅผ Merge ํ•˜๊ณ  ๋‹ซ๋Š”๋‹ค.

์ด ๋ฐฉ์‹์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ch05-distributed-git.asc์—์„œ ์„ค๋ช…ํ•˜๋Š” Integration-Manager ์›Œํฌํ”Œ๋กœ์™€ ๊ฐ™๋‹ค. ํ† ๋ก ์ด๋‚˜ ๋ฆฌ๋ทฐ๋ฅผ ์ด๋ฉ”์ผ์ด ์•„๋‹ˆ๋ผ GitHub์—์„œ ์ œ๊ณตํ•˜๋Š” ์›น ๊ธฐ๋ฐ˜ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ฟ์ด๋‹ค.

GitHub์— ์žˆ๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ์ด ์›Œํฌํ”Œ๋กœ๋ฅผ ์ด์šฉํ•ด์„œ ๋ญ”๊ฐ€ ๊ธฐ์—ฌํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด์ž.

Pull Request ๋งŒ๋“ค๊ธฐ

Tony๋Š” ์ž์‹ ์˜ Arduino ์žฅ์น˜์—์„œ ์‹คํ–‰ํ•ด๋ณผ ๋งŒํ•œ ์ฝ”๋“œ๋ฅผ ์ฐพ๊ณ  ์žˆ์—ˆ๊ณ  GitHub์— ์žˆ๋Š” https://github.com/schacon/blink์—์„œ ๋งค์šฐ ํก์กฑํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ์ฐพ์•˜๋‹ค.

๊ธฐ์—ฌํ•˜๊ณ ์ž ํ•˜๋Š” ํ”„๋กœ์ ํŠธ.
Figure 2. ๊ธฐ์—ฌํ•˜๊ณ ์ž ํ•˜๋Š” ํ”„๋กœ์ ํŠธ.

๋‹ค ์ข‹์€๋ฐ ๋„ˆ๋ฌด ๋น ๋ฅด๊ฒŒ ๊นœ๋นก์ด๋Š” ๊ฒŒ ๋งˆ์Œ์— ์•ˆ ๋“ค์—ˆ๋‹ค. ๋งค์ดˆ ๊นœ๋นก์ด๋Š” ๊ฒƒ๋ณด๋‹ค 3์ดˆ์— ํ•œ ๋ฒˆ ๊นœ๋นก์ด๋Š” ๊ฒŒ ๋” ์ข‹์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค. ๊ทธ๋ž˜์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜์ •ํ•˜๊ณ  ์› ํ”„๋กœ์ ํŠธ์— ๋‹ค์‹œ ๋ณด๋‚ด๊ธฐ๋กœ ํ–ˆ๋‹ค.

์•ž์„œ ์„ค๋ช…ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ 'Fork' ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณต์‚ฌํ•œ๋‹ค. ์‚ฌ์šฉ์ž ์ด๋ฆ„์ด โ€œtonychaconโ€ ์ด๋ผ๋ฉด https://github.com/tonychacon/blink ์— ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ณต์‚ฌ๋œ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” ๋ณธ์ธ ํ”„๋กœ์ ํŠธ์ด๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋กœ์ปฌ์— Clone ํ•ด์„œ ํ† ํ”ฝ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค๊ณ  ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ๋‚˜์„œ GitHub์— ๋‹ค์‹œ Push ํ•œ๋‹ค.

$ git clone https://github.com/tonychacon/blink (1)
Cloning into 'blink'...

$ cd blink
$ git checkout -b slow-blink (2)
Switched to a new branch 'slow-blink'

$ sed -i '' 's/1000/3000/' blink.ino (macOS) (3)
# If you're on a Linux system, do this instead:
# $ sed -i 's/1000/3000/' blink.ino (3)

$ git diff --word-diff (4)
diff --git a/blink.ino b/blink.ino
index 15b9911..a6cc5a5 100644
--- a/blink.ino
+++ b/blink.ino
@@ -18,7 +18,7 @@ void setup() {
// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  [-delay(1000);-]{+delay(3000);+}               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  [-delay(1000);-]{+delay(3000);+}               // wait for a second
}

$ git commit -a -m 'three seconds is better' (5)
[slow-blink 5ca509d] three seconds is better
 1 file changed, 2 insertions(+), 2 deletions(-)

$ git push origin slow-blink (6)
Username for 'https://github.com': tonychacon
Password for 'https://[email protected]':
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 340 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To https://github.com/tonychacon/blink
 * [new branch]      slow-blink -> slow-blink
  1. Fork ํ•œ ๊ฐœ์ธ ์ €์žฅ์†Œ๋ฅผ ๋กœ์ปฌ์— Clone ํ•œ๋‹ค.

  2. ๋ฌด์Šจ ์ผ์ธ์ง€ ์„ค๋ช…์ด ๋˜๋Š” ์ด๋ฆ„์˜ ํ† ํ”ฝ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ ๋‹ค.

  3. ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.

  4. ์ž˜ ๊ณ ์ณค๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

  5. ํ† ํ”ฝ ๋ธŒ๋žœ์น˜์— ์ปค๋ฐ‹ํ•œ๋‹ค.

  6. GitHub์˜ ๊ฐœ์ธ ์ €์žฅ์†Œ์— ํ† ํ”ฝ ๋ธŒ๋žœ์น˜๋ฅผ Push ํ•œ๋‹ค.

Fork ํ•œ ๋‚ด ์ €์žฅ์†Œ์— ๊ฐ€๋ฉด GitHub์€ ํ† ํ”ฝ ๋ธŒ๋žœ์น˜๊ฐ€ ํ•˜๋‚˜ Push ๋๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ฃผ๊ณ  ์› ์ €์žฅ์†Œ์— Pull Request๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ํฐ ๋…น์ƒ‰ ๋ฒ„ํŠผ์„ ๋ณด์—ฌ์ค€๋‹ค.

์•„๋‹ˆ๋ฉด ์ €์žฅ์†Œ์˜ โ€œ๋ธŒ๋žœ์น˜โ€ ํŽ˜์ด์ง€๋กœ(https://github.com/<user>/<project>/branches) ๊ฐ€์„œ ํ•ด๋‹น ๋ธŒ๋žœ์น˜์˜ "New pull request" ๋ฒ„ํŠผ์„ ์ด์šฉํ•œ๋‹ค.

Pull Request ๋ฒ„ํŠผ
Figure 3. Pull Request ๋ฒ„ํŠผ

๋…น์ƒ‰ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด Pull Request์˜ ์ œ๋ชฉ๊ณผ ์„ค๋ช…์„ ์ž…๋ ฅํ•˜๋Š” ํ™”๋ฉด์ด ๋ณด์ธ๋‹ค. ํ•ญ์ƒน ํ”„๋กœ์ ํŠธ ์†Œ์œ ์ž๊ฐ€ ํŒ๋‹จ์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ๊ณต์„ ๋“ค์—ฌ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค. ์™œ ์ˆ˜์ •ํ–ˆ๋Š”์ง€ ์–ผ๋งˆ๋‚˜ ๊ฐ€์น˜ ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•ด์„œ ๊ด€๋ฆฌ์ž๋ฅผ ์„ค๋“ํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  โ€œaheadโ€ ํ† ํ”ฝ ๋ธŒ๋žœ์น˜๊ฐ€ master ๋ธŒ๋žœ์น˜์—์„œ ๋‹ฌ๋ผ์ง„ ์ปค๋ฐ‹๋„ ๋ณด์—ฌ์ฃผ๊ณ  ์ˆ˜์ •๋œ ๋‚ด์šฉ์„ โ€œunified diffโ€ ํ˜•์‹์œผ๋กœ ๋ณด์—ฌ์ค€๋‹ค. ์ด ์ˆ˜์ • ๋‚ด์šฉ์ด ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ์ž๊ฐ€ Merge ํ•  ๋‚ด์šฉ์ด๋‹ค.

Pull Request ์ƒ์„ฑ
Figure 4. Pull Request๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํŽ˜์ด์ง€

ํ™”๋ฉด์— ์žˆ๋Š” 'Create pull request' ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ํ”„๋กœ์ ํŠธ ์›์†Œ์œ ์ž๋Š” ๋ˆ„๊ตฐ๊ฐ€ ์ฝ”๋“œ๋ฅผ ๋ณด๋ƒˆ๋‹ค๋Š” ์•Œ๋ฆผ์„ ๋ฐ›๋Š”๋‹ค. ๊ทธ ์•Œ๋ฆผ์—๋Š” ํ•ด๋‹น Pull Request์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๋Š” ํŽ˜์ด์ง€์˜ ๋งํฌ๊ฐ€ ๋“ค์–ด ์žˆ๋‹ค.

Note

Pull Request๋Š” ๋ณดํ†ต ๊ณต๊ฐœ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค. ๊ธฐ์—ฌ์ž๋Š” ์ˆ˜์ •ํ•˜๊ณ  ๋‚˜์„œ ์› ์ €์žฅ์†Œ์— Pull Request๋ฅผ ์—ฐ๋‹ค. ๊ฐœ๋ฐœ ์ดˆ์ฐฝ๊ธฐ์—๋Š” ํ”„๋กœ์ ํŠธ ๋‚ด๋ถ€์—์„œ๋„ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋ฏธ Pull Request๋ฅผ ์—ด์–ด ๋†“์€ ํ† ํ”ฝ ๋ธŒ๋žœ์น˜๋ผ๊ณ  ํ• ์ง€๋ผ๋„ ๊ณ„์† Push ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งˆ์ง€๋ง‰์ด ์•„๋‹ˆ๋ผ ์ฒ˜์Œ๋ถ€ํ„ฐ Pull Request๋ฅผ ์—ด๋ฉด ์–ด๋–ค ์ฃผ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ํŒ€ ๋™๋ฃŒ์™€ ํ•จ๊ป˜ ํ† ๋ก ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ข‹๋‹ค.

Pull Request ๋†“๊ณ  ๊ฐ ๋†“๊ณ  ๋ฐฐ ๋†“๊ธฐ

Pull Request๊ฐ€ ์˜ค๋ฉด ํ”„๋กœ์ ํŠธ ์†Œ์œ ์ž๋Š” ๋ณ€๊ฒฝ ์ ์ด ๋ฌด์—‡์ธ์ง€ ํ™•์ธํ•œ ํ›„, Merge ํ˜น์€ ๊ฑฐ์ ˆํ•˜๊ฑฐ๋‚˜ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‹ฌ ์ˆ˜ ์žˆ๋‹ค. ์†Œ์œ ์ž๊ฐ€ ์•„์ด๋””์–ด ์ž์ฒด๋ฅผ ๋งˆ์Œ์— ๋“ค์–ด ํ•œ๋‹ค๋ฉด ๋น›์„ ๋ณด๊ธฐ๊นŒ์ง€ ์ข€ ๋” ๊ณต์„ ๋“ค์—ฌ์•ผ ํ•œ๋‹ค.

์ด๋Ÿฐ ์†Œํ†ต์„ ์ด๋ฉ”์ผ๋กœ ํ•˜๋Š” ์›Œํฌํ”Œ๋กœ๋Š” ch05-distributed-git.asc์— ์„ค๋ช…ํ–ˆ์—ˆ๋‹ค. GitHub์—์„œ๋Š” ์˜จ๋ผ์ธ์—์„œ ํ•œ๋‹ค. ํ”„๋กœ์ ํŠธ ์†Œ์œ ์ž๋Š” 'unified diff' ํ˜•์‹์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ฒ€ํ† ํ•˜๊ณ  ์ฆ‰๊ฐ ํ•ด๋‹น ๋ผ์ธ์— ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‹ฌ ์ˆ˜ ์žˆ๋‹ค.

PR ๋ผ์ธ ์ฝ”๋ฉ˜ํŠธ
Figure 5. Pull Request์˜ ์ฝ”๋“œ์— ์ฝ”๋ฉ˜ํŠธ ๋‹ฌ๊ธฐ

๊ด€๋ฆฌ์ž๊ฐ€ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‹ฌ๋ฉด Pull Request๋ฅผ ๋งŒ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์•Œ๋ฆผ์ด ๊ฐ„๋‹ค. ์‹ค์ œ๋กœ๋Š” ์ €์žฅ์†Œ๋ฅผ 'Watchโ€™ํ•˜๋Š” ์‚ฌ๋žŒ ๋ชจ๋‘์—๊ฒŒ ์•Œ๋ฆผ์ด ๊ฐ„๋‹ค. ์•Œ๋ฆผ ์ •์ฑ…์€ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋‹ค์Œ์— ๊ฒ€ํ† ํ•œ๋‹ค. ์•Œ๋ฆผ์„ ๋ฐ›๋Š” Tony๊ฐ€ ์ด๋ฉ”์ผ ์•Œ๋ฆผ์„ ์ผœ๋†จ๋‹ค๋ฉด ์ด๋ฉ”์ผ ์•Œ๋ฆผ๋„ ๋ฐ›๋Š”๋‹ค.

์ด๋ฉ”์ผ ์•Œ๋ฆผ์œผ๋กœ ์˜จ ์ฝ”๋ฉ˜ํŠธ
Figure 6. ์ด๋ฉ”์ผ ์•Œ๋ฆผ์œผ๋กœ ์˜จ ์ฝ”๋ฉ˜ํŠธ

๋ˆ„๊ตฌ๋‚˜ Pull Request์— ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‹ฌ ์ˆ˜ ์žˆ๋‹ค. Pull Request ํ† ๋ก  ํŽ˜์ด์ง€๋ฅผ ๋ณด๋ฉด ํ”„๋กœ์ ํŠธ ์†Œ์œ ์ž๊ฐ€ ์ฝ”๋“œ์— ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‹ฌ๊ฑฐ๋‚˜ Pull Request ์ž์ฒด์— ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‹ฌ๋ฉด์„œ ํ† ๋ก ํ•˜๋Š” ๊ฒƒ์„ ๋ณด์—ฌ ์ค€๋‹ค. ์ฝ”๋“œ ์ฝ”๋ฉ˜ํŠธ๋„ ๋งฅ๋ฝ์„ ์ด๋ฃจ์–ด ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ํ•  ์ˆ˜ ์žˆ๋‹ค.

PR ํ† ๋ก  ํŽ˜์ด์ง€
Figure 7. Pull Request ํ† ๋ก  ํŽ˜์ด์ง€

์ด ํ† ๋ก ์„ ๋ณด๊ณ  ๊ธฐ์—ฌ์ž๋Š” ์ž์‹ ์ด ๋ฌด์—‡์„ ํ•ด์•ผ ์ž์‹ ์˜ ์ฝ”๋“œ๊ฐ€ ๋ฐ›์•„๋“ค์—ฌ์งˆ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋‹คํ–‰ํžˆ ๋งค์šฐ ์ง๊ด€์ ์ด๋‹ค. ๋งŒ์•ฝ ์ด ์ผ์„ ์ด๋ฉ”์ผ๋กœ ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ๊ด€๋ จ ์ปค๋ฐ‹์„ ๋‹ค์‹œ ๋ง์•„์„œ ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ์— ๋‹ค์‹œ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, GitHub์—์„œ๋Š” ํ•ด๋‹น ํ† ํ”ฝ ๋ธŒ๋žœ์น˜์— ์ด์–ด์„œ ์ปค๋ฐ‹ํ•˜๊ณ  Push ํ•˜๋ฉด ๋œ๋‹ค. ์ตœ์ข… Pull Request์—์„œ Push๋กœ ์—…๋ฐ์ดํŠธํ•œ PR์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์˜ˆ์ „ ์ฝ”๋“œ์— ๋‹ฌ๋ ธ๋˜ ์ฝ”๋ฉ˜ํŠธ๋Š” ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค. ์ถ”๊ฐ€๋œ ์ปค๋ฐ‹์œผ๋กœ ์ธํ•ด ์ฝ”๋“œ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ธฐ์กด PR์— ์ด์–ด์„œ Push๋ฅผ ํ•˜๋ฉด ์•Œ๋ฆผ์ด ๊ฐ€์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ž˜์„œ Tony๋Š” ์ž์‹ ์ด ์ž‘์—…ํ•œ ๋‚ด์šฉ์„ ์ฝ”๋ฉ˜ํŠธ๋กœ ๋‚จ๊ฒผ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ”„๋กœ์ ํŠธ ์†Œ์œ ์ž๋Š” ๋ฌด์Šจ ์ผ์ด ์žˆ์—ˆ๋Š”์ง€ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ตœ์ข… PR
Figure 8. ์ตœ์ข… Pull Request

๊ผญ ์งš๊ณ  ๋„˜์–ด๊ฐ€์•ผ ํ•  ๊ฒƒ์ด ์žˆ๋‹ค. ์ด Pull Request์˜ โ€œFiles Changedโ€ ํƒญ์„ ํด๋ฆญํ•˜๋ฉด โ€œunifiedโ€ diff๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด Pull Request๊ฐ€ ์ฃผ ๋ธŒ๋žœ์น˜์— Merge ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋‹ฌ๋ผ์ง€๋Š”์ง€ ๋ณด์—ฌ์ค€๋‹ค. git diff ๋ช…๋ น์„ ๋นŒ์–ด ํ‘œํ˜„ํ•˜์ž๋ฉด git diff masterโ€ฆโ€‹<branch> ์™€ ๊ฐ™์€ ๋ช…๋ น์ด ์‹คํ–‰๋˜๋Š” ๊ฑฐ๊ณ  <branch> ๋Š” Pull Request์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ch05-distributed-git.asc์—์„œ ์ž์„ธํžˆ ์„ค๋ช…ํ•œ๋‹ค.

๊ทธ ์™ธ ์•Œ์•„๋‘๋ฉด ์ข‹์€ ๊ฒƒ์€ GitHub์€ Pull Request๊ฐ€ Merge ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•ด์„œ ์„œ๋ฒ„์—์„œ Merge ํ•  ์ˆ˜ ์žˆ๋„๋ก Merge ๋ฒ„ํŠผ์„ ์ œ๊ณตํ•œ๋‹ค. ์ด ๋ฒ„ํŠผ์€ ์ €์žฅ์†Œ์— ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ๋Š” ์‚ฌ๋žŒ๋งŒ ๋ณผ ์ˆ˜ ์žˆ๊ณ  ์ด ๋ฒ„ํŠผ์œผ๋กœ Merge ํ•˜๋ฉด Merge ์ปค๋ฐ‹์ด ์ƒ๊ธด๋‹ค(Trivial Merge). โ€œfast-forwardโ€ Merge๊ฐ€ ๊ฐ€๋Šฅํ•  ๋•Œ๋„ โ€œnon-fast-forwrdโ€ ๋กœ Merge ํ•œ๋‹ค.

๋กœ์ปฌ์— Pull Request ๋ธŒ๋žœ์น˜๋ฅผ ๋‹น๊ฒจ์™€์„œ Merge ํ•ด๋„ ๋œ๋‹ค. master ๋ธŒ๋žœ์น˜์— Merge ํ•ด์„œ GitHub์— Push ํ•˜๋ฉด ์ž๋™์œผ๋กœ ํ•ด๋‹น Pull Request๊ฐ€ ๋‹ซํžŒ๋‹ค.

์ด๋Ÿฐ ๋ฐฉ์‹์ด ๋Œ€๋ถ€๋ถ„์˜ GitHub ํ”„๋กœ์ ํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ์›Œํฌํ”Œ๋กœ๋‹ค. ํ† ํ”ฝ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค๊ณ  Pull Request๋ฅผ ์—ฐ๋‹ค. ๊ฑฐ๊ธฐ์„œ ํ† ๋ก ์„ ๊ณ„์† ํ•˜๊ณ  ๊ทธ ๋ธŒ๋žœ์น˜์— ์ปค๋ฐ‹์„ ํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ๋งˆ์ง€๋ง‰์—๋Š” Mergeํ•˜๊ณ  Request๋ฅผ ๋‹ซ๋Š”๋‹ค.

Note
Fork๋Š” ์˜ต์…˜

ํ•œ ์ €์žฅ์†Œ์˜ ๋‘ ๋ธŒ๋žœ์น˜๋ฅผ ๋‘๊ณ ๋„ Pull Request๋ฅผ ์—ด ์ˆ˜ ์žˆ๋‹ค. ํ•œ ์ €์žฅ์†Œ์— ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ๋Š” ๋™๋ฃŒ ๋‘˜์ด์„œ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ํ† ํ”ฝ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค๊ณ  Push ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ๊ฐ™์€ ์ €์žฅ์†Œ์˜ master ๋ธŒ๋žœ์น˜์— ๋Œ€ํ•ด Pull Request๋ฅผ ๋งŒ๋“ค์–ด ์ฝ”๋“œ ๋ฆฌ๋ทฐ์™€ ํ† ๋ก ์„ ์‹œ์ž‘ํ•œ๋‹ค. Fork๋Š” ํ•„์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค.

Pull Request ํŒ

GitHub์—์„œ ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ดค๋‹ค. Pull Request๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋„์›€์ด ๋˜๋Š” ์œ ์šฉํ•œ ํŒ์„ ๋ช‡ ๊ฐ€์ง€ ์‚ดํŽด๋ณด์ž.

Patch๋ฅผ Pull Request๋กœ ๋ณด๋‚ด๊ธฐ

๋ณดํ†ต ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Pull Request์˜ Patch๊ฐ€ ์™„๋ฒฝํ•˜๊ณ  ํ์ฒ˜๋Ÿผ ๊ผญ ์ˆœ์„œ๋Œ€๋กœ ์ ์šฉ๋ผ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋˜ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Patch ์ˆœ์„œ๊ฐ€ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. GitHub์˜ Pull Request๋Š” ์–ด๋–ค ์ฃผ์ œ๋ฅผ ๋‘๊ณ  ๋…ผ์˜ํ•˜๋Š” ์ž๋ฆฌ๋‹ค. ๋…ผ์˜๊ฐ€ ๋‹ค ๋ฌด๋ฅด์ต์œผ๋ฉด Merge ํ•œ๋‹ค.

์ด ์ฐจ์ด๋Š” ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ฒ˜์Œ๋ถ€ํ„ฐ ์™„๋ฒฝํ•œ ์ฝ”๋“œ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์—†์–ด์„œ ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ๋กœ Patch๋ฅผ ๋ณด๋‚ผ ์ผ์€ ๋ณ„๋กœ ์—†๋‹ค. Pull Request๋Š” ์ดˆ๊ธฐ๋ถ€ํ„ฐ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ์ž์™€ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ์ž ๋‹ต์„ ์ฐพ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ํ•จ๊ป˜ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ Pull Request๋ฅผ ์—ด๋ฉด ๊ด€๋ฆฌ์ž์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ์–ด๋–ป๊ฒŒ ์ˆ˜์ •ํ•˜๋Š” ๊ฒŒ ์ข‹์„์ง€ ์˜๊ฒฌ์„ ๋‚ธ๋‹ค. Patch๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ „์ฒด๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ์ˆ˜์ •ํ•œ ๋งŒํผ๋งŒ ํ•ด๋‹น ๋ธŒ๋žœ์น˜์— ์ปค๋ฐ‹ํ•˜๊ณ  ํ•˜๋˜ ์ผ๊ณผ ๋Œ€ํ™”๋ฅผ ๊ณ„์† ํ•ด ๋‚˜๊ฐ€๋ฉด ๋œ๋‹ค.

์ตœ์ข… Pull Request๋กœ ๋Œ์•„๊ฐ€์„œ ๋‹ค์‹œ ๋ณด๋ฉด ๊ธฐ์—ฌ์ž๊ฐ€ ์ปค๋ฐ‹์„ Rebase ํ•˜๊ฑฐ๋‚˜ Pull Request๋ฅผ ๋‹ค์‹œ ์—ด์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ƒฅ ๊ธฐ์กด ๋ธŒ๋žœ์น˜์— ์ข€ ๋” ์ปค๋ฐ‹ํ•˜๊ณ  Push ํ–ˆ์„ ๋ฟ์ด๋‹ค. ๋‚˜์ค‘์— ์‹œ๊ฐ„์ด ์ง€๋‚˜์„œ ์ด Pull Request๋ฅผ ๋‹ค์‹œ ์ฝ์œผ๋ฉด ์™œ ์ด๋Ÿฐ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฒฐ์ •ํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ๋งฅ๋ฝ์„ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์›น์‚ฌ์ดํŠธ์—์„œ โ€œMergeโ€ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด Merge ์ปค๋ฐ‹์„ ์ผ๋ถ€๋Ÿฌ ๋‚จ๊ธฐ๊ฒ ๋‹ค๋Š” ๋œป์ด ๋œ๋‹ค. ์ด Merge ์ปค๋ฐ‹์—๋Š” Pull Request ์ •๋ณด๊ฐ€ ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•˜๋ฉด ์–ธ์ œ๋“ ์ง€ ๋งฅ๋ฝ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Pull Request๋ฅผ ์ตœ์‹ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ

Pull Request๊ฐ€ ๋งŒ๋“  ์ง€ ์˜ค๋ž˜๋๊ฑฐ๋‚˜ ๊นจ๋—ํ•˜๊ฒŒ Merge ๋˜์ง€ ์•Š์œผ๋ฉด ๋ฉ”์ธํ…Œ์ด๋„ˆ๊ฐ€ ์‰ฝ๊ฒŒ Merge ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ˆ˜์ •ํ•œ๋‹ค. GitHub์€ ์ž๋™์œผ๋กœ Merge ํ•  ์ˆ˜ ์žˆ๋Š” Pull Request์ธ์ง€ ์•„๋‹Œ์ง€ Pull Request ํŽ˜์ด์ง€ ํ•˜๋‹จ์—์„œ ์•Œ๋ ค์ค€๋‹ค.

PR Merge ์‹คํŒจ
Figure 9. ๊นจ๋—ํ•˜๊ฒŒ Merge ํ•  ์ˆ˜ ์—†๋Š” Pull Request

๊นจ๋—ํ•˜๊ฒŒ Merge ํ•  ์ˆ˜ ์—†๋Š” Pull Request ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ฉด ํ•ด๋‹น ๋ธŒ๋žœ์น˜๋ฅผ ๊ณ ์ณ์„œ ๋…น์ƒ‰์œผ๋กœ ๋งŒ๋“ ๋‹ค. ๋ฉ”์ธํ…Œ์ด๋„ˆ๊ฐ€ ๊ณ ์น˜์ง€ ์•Š์•„๋„ ๋˜๋„๋ก ํ•œ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ๋Œ€์ƒ ๋ธŒ๋žœ์น˜(๋ณดํ†ต์€ master ๋ธŒ๋žœ์น˜)๋ฅผ ๊ธฐ์ค€์œผ๋กœ Rebase ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ณ  ๋Œ€์ƒ ๋ธŒ๋žœ์น˜๋ฅผ Pull Request ๋ธŒ๋žœ์น˜์— Merge ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

GitHub์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” ๋Œ€๋ถ€๋ถ„ ํ›„์ž๋ฅผ ๊ณ ๋ฅธ๋‹ค. ์•ž์„œ ์‚ดํŽด๋ดค๋˜ ๊ฒƒ๊ณผ ๊ฐ™์€ ์ด์œ ๋‹ค. Rebase ํ•˜๋ฉด ํžˆ์Šคํ† ๋ฆฌ๋Š” ๊นจ๋—ํ•ด์ง€์ง€๋งŒ ํ›จ์”ฌ ๋” ์–ด๋ ต๊ณ  ์—๋Ÿฌ ๋‚˜๊ธฐ ์‰ฝ๋‹ค.

Pull Request๊ฐ€ Merge ๋  ์ˆ˜ ์žˆ๋„๋ก ๋Œ€์ƒ ๋ธŒ๋žœ์น˜๋ฅผ Merge ํ•˜๋ ค๋ฉด ๋จผ์ € ์› ์ €์žฅ์†Œ๋ฅผ ๋ฆฌ๋ชจํŠธ๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ Fetch ํ•˜๊ณ  ๊ทธ ์ €์žฅ์†Œ์˜ ๋Œ€์ƒ ๋ธŒ๋žœ์น˜๋ฅผ ํ•ด๋‹น ํ† ํ”ฝ ๋ธŒ๋žœ์น˜์— Merge ํ•œ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๊ทธ ๋ธŒ๋žœ์น˜์— ๋„๋กœ Push ํ•œ๋‹ค.

โ€œtonychaconโ€ ์˜ˆ์ œ์— ์ด ์›Œํฌํ”Œ๋กœ๋ฅผ ์ ์šฉํ•ด๋ณด์ž. ์›์ €์ž๊ฐ€ ๋ญ”๊ฐ€ ์ˆ˜์ •์„ ํ–ˆ๋Š”๋ฐ Pull Request์™€ ์ถฉ๋Œ์ด ๋‚œ๋‹ค. ์—ฌ๊ธฐ๋ถ€ํ„ฐ ์‚ดํŽด๋ณด์ž.

$ git remote add upstream https://github.com/schacon/blink (1)

$ git fetch upstream (2)
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
Unpacking objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
From https://github.com/schacon/blink
 * [new branch]      master     -> upstream/master

$ git merge upstream/master (3)
Auto-merging blink.ino
CONFLICT (content): Merge conflict in blink.ino
Automatic merge failed; fix conflicts and then commit the result.

$ vim blink.ino (4)
$ git add blink.ino
$ git commit
[slow-blink 3c8d735] Merge remote-tracking branch 'upstream/master' \
    into slower-blink

$ git push origin slow-blink (5)
Counting objects: 6, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 682 bytes | 0 bytes/s, done.
Total 6 (delta 2), reused 0 (delta 0)
To https://github.com/tonychacon/blink
   ef4725c..3c8d735  slower-blink -> slow-blink
  1. ์› ์ €์žฅ์†Œ๋ฅผ โ€œupstreamโ€ ์ด๋ผ๋Š” ์ด๋ฆ„์˜ ๋ฆฌ๋ชจํŠธ๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค

  2. ๋ฆฌ๋ชจํŠธ์—์„œ ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ Fetch ํ•œ๋‹ค

  3. ๋Œ€์ƒ ๋ธŒ๋žœ์น˜๋ฅผ ํ† ํ”ฝ ๋ธŒ๋žœ์น˜์— Merge ํ•œ๋‹ค

  4. ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•œ๋‹ค

  5. ๋™์ผํ•œ ํ† ํ”ฝ ๋ธŒ๋žœ์น˜์— ๋„๋กœ Push ํ•œ๋‹ค

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Pull Request๋Š” ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜๊ณ  ๊นจ๋—ํ•˜๊ฒŒ Merge ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์žฌํ™•์ธ๋œ๋‹ค.

PR ๊ณ ์นจ
Figure 10. ๊นจ๋—ํ•˜๊ฒŒ Merge ํ•  ์ˆ˜ ์žˆ๋Š” Pull Request.

์—ฐ์†์„ฑ์€ Git์˜ ์žฅ๊ธฐ ์ค‘ ํ•˜๋‚˜๋‹ค. ์˜ค๋žซ๋™์•ˆ ๋ฌด์—‡์ธ๊ฐ€ ๋งŒ๋“ค๊ณ  ์žˆ๋‹ค๋ฉด ์ตœ์‹ ์œผ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€์ƒ ๋ธŒ๋žœ์น˜๋ฅผ ์‰ฝ๊ฒŒ Merge ํ•ด ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ๋‹ค ๋งˆ์น  ๋•Œ๊นŒ์ง€ ํ•˜๊ณ  ๋˜ ํ•˜๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. Merge ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ถฉ๋Œ๋งŒ ํ•ด๊ฒฐํ•˜๋ฉด ๋˜๊ณ  ์ง€์†์ ์œผ๋กœ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ธŒ๋žœ์น˜๋ฅผ ๊ผญ ๊นจ๋—ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์–ด์„œ Rebase ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์ด๋ฏธ ์—ด์–ด ๋†“์€ Pull Request์— ๋Œ€๊ณ  Push ํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿผ ์ด ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ€์ ธ๋‹ค Merge ํ•ด ๋†“์€ ์‚ฌ๋žŒ๋“ค์€ ch03-git-branching.asc์— ์„ค๋ช…ํ–ˆ๋“ฏ์ด ์ถฉ๊ฒฉ์— ๋น ์งˆ ๊ฒƒ์ด๋‹ค. ๋Œ€์‹  ๋ธŒ๋žœ์น˜๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด Push ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Pull Request๋„ ์ƒˆ๋กœ ์—ฌ๋Š”๋ฐ ์› Pull Request๊ฐ€ ๋ญ”์ง€ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ์ฐธ์กฐ๋ฅผ ๋‹ฌ๊ณ  ์›๋ž˜ ๊ฒƒ์€ ๋‹ซ๋Š”๋‹ค.

์ฐธ์กฐ

๊ทธ๋Ÿผ ๋ฐ”๋กœ โ€œ์–ด๋–ป๊ฒŒ Pull Request๋ฅผ ์ฐธ์กฐ์‹œํ‚ค์ง€?โ€ ๋ผ๋Š” ์˜๋ฌธ์ด ๋“ค๊ฒ ์ง€๋งŒ, ๋ฐฉ๋ฒ•์€ ๋งค์šฐ ๋งŽ๋‹ค. GitHub์— ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ๊ณณ ์–ด๋””์—์„œ๋‚˜ ์ฐธ์กฐ๋ฅผ ๋‹ฌ ์ˆ˜ ์žˆ๋‹ค.

๋จผ์ € Issue์™€ Pull Request๋ฅผ ์„œ๋กœ ์ฐธ์กฐ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•๋ถ€ํ„ฐ ์‚ดํŽด๋ณด์ž. ๋ชจ๋“  Pull Request์™€ Issue์—๋Š” ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ ์œ ์ผํ•œ ๋ฒˆํ˜ธ๋ฅผ ํ•˜๋‚˜ ํ• ๋‹นํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, #3์ธ Pull Request์™€ #3์ธ Issue๋Š” ๋™์‹œ์— ์žˆ์„ ์ˆ˜ ์—†๋‹ค. #<num> ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ฝ”๋ฉ˜ํŠธ๊ฐ€๋‚˜ ์„ค๋ช…์— Pull Request์™€ Issue๋ฅผ ์ฐธ์กฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ๋‹จ์ผ ํ”„๋กœ์ ํŠธ ๋ฒ”์œ„์—์„œ๋งŒ ์œ ํšจํ•˜๋‹ค. Fork ์ €์žฅ์†Œ์˜ Issue๋‚˜ Pull Request๋ฅผ ์ฐธ์กฐ์‹œํ‚ค๋ ค๊ณ  ํ•œ๋‹ค๋ฉด username#<num> ๋ผ๊ณ  ์“ฐ๊ณ  ์•„์˜ˆ ๋‹ค๋ฅธ ์ €์žฅ์†Œ๋ฉด username/repo#<num> ๋ผ๊ณ  ์จ์•ผ ํ•œ๋‹ค.

์„ค๋ช…์„ ์œ„ํ•ด ์ด๋ฏธ ๋ธŒ๋žœ์น˜๋ฅผ Rebase ํ–ˆ๊ณ  Pull Request๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ํ•˜์ž. ๊ทธ๋Ÿผ ์˜ˆ์ „ Pull Request๊ฐ€ ๋ญ”์ง€ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ์ƒˆ๊ฒƒ์—์„œ ์˜ˆ์ „ ๊ฒƒ์„ ์ฐธ์กฐํ•˜๊ฒŒ ํ•ด๋ณด๊ณ  Pull Request์˜ ์ƒํ˜ธ ์ฐธ์กฐ ํŽธ์ง‘.๊ฐ™์ด Fork ํ•œ ์ €์žฅ์†Œ์˜ ์ด์Šˆ๋‚˜ ์•„์˜ˆ ๋‹ค๋ฅธ ์ €์žฅ์†Œ์˜ ์ด์Šˆ๋„ ์ฐธ์กฐํ•˜๊ฒŒ ํ•ด๋ณด์ž.

PR ์ฐธ์กฐ ํŽธ์ง‘
Figure 11. Pull Request์˜ ์ƒํ˜ธ ์ฐธ์กฐ ํŽธ์ง‘.

์ด Pull Request๋ฅผ ๋ณด๋‚ด๋ฉด Pull Request์˜ ์ƒํ˜ธ ์ฐธ์กฐ.์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค.

PR ์ฐธ์กฐ
Figure 12. Pull Request์˜ ์ƒํ˜ธ ์ฐธ์กฐ.

GitHub URL์„ ์ „๋ถ€ ์ž…๋ ฅํ•ด๋„ ๋”ฑ ํ•„์š”ํ•œ ๋งŒํผ์œผ๋กœ ์ค„์–ด๋“ ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์›๋ž˜ ์žˆ๋˜ Pull Request๋ฅผ ๋‹ซ์œผ๋ฉด ์ƒˆ Pull Request์—๋Š” ๊ธฐ์กด Pull Request๊ฐ€ ๋‹ซํ˜”๋‹ค๊ณ  ์–ธ๊ธ‰๋œ๋‹ค. GitHub์€ Pull Request ํƒ€์ž„๋ผ์ธ์— ํŠธ๋ž™๋ฐฑ ์ด๋ฒคํŠธ๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ ๋‹ค. ๊ทธ๋ž˜์„œ ์ด Pull Request์— ๋ฐฉ๋ฌธํ•˜๋Š” ์‚ฌ๋žŒ์€ ์˜ˆ์ „ Pull Request๊ฐ€ ๋‹ซํ˜”๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๊ณ  ๊ทธ ๋งํฌ๊ฐ€ ์žˆ์–ด์„œ ๋ฐ”๋กœ ํด๋ฆญํ•ด์„œ ์˜ˆ์ „ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด ๋งํฌ๋Š” ๋‹ซ์€ Pull Request์˜ ํŠธ๋ž™๋ฐฑ์ฒ˜๋Ÿผ ์ƒ๊ฒผ๋‹ค.

๋‹ซ์€ PR์˜ ํŠธ๋ž™๋ฐฑ
Figure 13. ๋‹ซ์€ Pull Request์˜ ํŠธ๋ž™๋ฐฑ

์ด์Šˆ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ปค๋ฐ‹์˜ SHA๋„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค. 40์ž SHA๋ฅผ ์ ์œผ๋ฉด GitHub์€ ์ž๋™์œผ๋กœ ํ•ด๋‹น ์ปค๋ฐ‹์— ๋งํฌ๋ฅผ ๊ฑธ์–ด ์ค€๋‹ค. Fork ์ €์žฅ์†Œ๋‚˜ ์•„์˜ˆ ๋‹ค๋ฅธ ์ €์žฅ์†Œ์˜ ์ปค๋ฐ‹๋„ ์ด์Šˆ์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋งํฌ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

GitHub Flavored Markdown

๋‹ค๋ฅธ ์ด์Šˆ๋ฅผ ๋งํฌํ•˜๋Š” ๊ฒƒ์€ GitHub ๊ธ€์“ฐ๊ธฐ์˜ ์ฒซ๊ฑธ์Œ์— ๋ถˆ๊ณผํ•˜๋‹ค. โ€œGitHub Flavored Markdownโ€ ์ด๋ผ๋Š” ํ˜•์‹์œผ๋กœ ์ด์Šˆ๋‚˜ Pull Request์˜ ์„ค๋ช…, ์ฝ”๋ฉ˜ํŠธ, ์ฝ”๋“œ ์ฃผ์„ ๋“ฑ์—์„œ ๊ธ€์„ ์“ธ ์ˆ˜ ์žˆ๋‹ค. Markdown ํ˜•์‹์œผ๋กœ ๊ธ€์„ ์“ฐ๋ฉด ๊ทธ๋ƒฅ ํ…์ŠคํŠธ๋กœ ์“ด ๊ธ€์ด์ง€๋งŒ ํ˜•์‹์„ ๊ฐ–์ถฐ ๋ฏธ๋ˆํ•˜๊ณ  ์•„๋ฆ„๋‹ต๊ฒŒ ๋ Œ๋”๋ง๋œ๋‹ค.

GitHub Flavored Markdown ์˜ˆ์ œ.๋Š” Markdown์œผ๋กœ ์“ด ๊ธ€์ด ์–ด๋–ป๊ฒŒ ๋ Œ๋”๋ง๋˜๋Š”์ง€ ๋ณด์—ฌ์ค€๋‹ค.

Markdown ์˜ˆ์ œ
Figure 14. GitHub Flavored Markdown ์˜ˆ์ œ.
GitHub Flavored Markdown

GitHub Flavored Markdown(์ดํ•˜ GFM)์€ ๊ธฐ๋ณธ Markdown์„ ํ™•์žฅํ–ˆ๋‹ค. GFM์€ Pull Request๋‚˜ ์ด์Šˆ ๋“ฑ์˜ ๊ธ€์„ ์“ธ ๋•Œ ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค.

ํƒ€์Šคํฌ ๋ฆฌ์ŠคํŠธ

GFM์ด ํ™•์žฅํ•œ ๊ฒƒ ๊ธฐ๋Šฅ ์ค‘ ํƒ€์Šคํฌ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์žˆ๋Š”๋ฐ Pull Request์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ํƒ€์Šคํฌ ๋ฆฌ์ŠคํŠธ๋Š” ์™„๋ฃŒํ–ˆ๋‹ค๊ณ  ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์ฒดํฌ๋ฐ•์Šค์˜ ๋ชฉ๋ก์ด๋‹ค. ์ด์Šˆ๋‚˜ Pull Request์—์„œ ๋‹ค ํ–ˆ๋‹ค๊ณ  ํ‘œ๊ธฐํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

ํƒ€์Šคํฌ ๋ฆฌ์ŠคํŠธ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค.:

- [X] Write the code
- [ ] Write all the tests
- [ ] Document the code

์ด ํƒ€์Šคํฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์Šˆ๋‚˜ Pull Request์— ์‚ฌ์šฉํ•˜๋ฉด ํƒ€์Šคํฌ ๋ฆฌ์ŠคํŠธ.์ฒ˜๋Ÿผ ๋ Œ๋”๋ง๋œ๋‹ค.

ํƒ€์Šคํฌ ๋ฆฌ์ŠคํŠธ
Figure 15. ํƒ€์Šคํฌ ๋ฆฌ์ŠคํŠธ.

Pull Request๋ฅผ Merge ํ•˜๊ธฐ ์ „์— ๊ผญ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ผ์˜ ๋ชฉ๋ก์„ ํ‘œํ˜„ํ•  ๋•Œ ํƒ€์Šคํฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. Markdown์„ ์ง์ ‘ ๊ณ ์น˜์ง€ ์•Š๊ณ  ์ฒดํฌ๋ฐ•์Šค๋งŒ ํด๋ฆญํ•ด๋„ ํ•ด๋‹น ํƒ€์Šคํฌ๊ฐ€ ์™„๋ฃŒ๋๋‹ค๊ณ  ์—…๋ฐ์ดํŠธ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋‹นํžˆ ์ข‹์€ ๊ธฐ๋Šฅ์ด๋‹ค.

GitHub์€ ์ด์Šˆ๋‚˜ Pull Requests์— ์žˆ๋Š” ํƒ€์Šคํฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ง‘๊ณ„ํ•ด์„œ ๋ชฉ๋ก ํ™”๋ฉด์—์„œ ๋ณด์—ฌ์ค€๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํƒ€์Šคํฌ๋“ค์ด ์ •๋ฆฌ๋œ Pull Request๊ฐ€ ์žˆ์œผ๋ฉด Pull Request ์š”์•ฝ ํŽ˜์ด์ง€์—์„œ ์–ผ๋งˆ๋‚˜ ์ง„ํ–‰๋๋Š”์ง€ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ Pull Request๋ฅผ ํƒ€์Šคํฌ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ์ชผ๊ฐœ ๋‘๋ฉด ๊ทธ ๋ธŒ๋žœ์น˜๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ง„ํ–‰๋๋Š”์ง€ ์•Œ๊ธฐ ์‰ฝ๋‹ค. Pull Request ๋ชฉ๋ก ํ™”๋ฉด์—์„œ ๋ณด์—ฌ์ฃผ๋Š” ํƒ€์Šคํฌ ํ˜„ํ™ฉ.๋ฅผ ๋ณด์ž.

ํƒ€์Šคํฌ ๋ฆฌ์ŠคํŠธ์˜ ์˜ˆ
Figure 16. Pull Request ๋ชฉ๋ก ํ™”๋ฉด์—์„œ ๋ณด์—ฌ์ฃผ๋Š” ํƒ€์Šคํฌ ํ˜„ํ™ฉ.

Pull Request๋ถ€ํ„ฐ ์—ด์–ด ๋‘๊ณ  ์ผ์„ ํ•˜๋ฉด ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ์–ผ๋งˆ๋‚˜ ์ง„ํ–‰๋๋Š”์ง€ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ฝ”๋“œ ์กฐ๊ฐ

์ฝ”๋ฉ˜ํŠธ์— ์ฝ”๋“œ ์กฐ๊ฐ๋„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค. ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•ด์„œ ๋ธŒ๋žœ์น˜์— ์ปค๋ฐ‹ํ•˜๊ธฐ ์ „์— ๋ญ”๊ฐ€ ์•„์ด๋””์–ด๋ฅผ ์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•ด ๋ณผ ๋•Œ ์ข‹๋‹ค. ๊ทธ ์™ธ์—๋„ ๋‹จ์ˆœํžˆ ์ฝ”๋“œ ์˜ˆ์ œ๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ํ•ด๋‹น Pull Request์—์„œ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ๋ณด์—ฌ์ค„ ๋•Œ๋„ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฐฑํ‹ฑ์œผ๋กœ ๋œ โ€œFenceโ€ ์•ˆ์— ์ฝ”๋“œ ์กฐ๊ฐ์„ ๋„ฃ๋Š”๋‹ค.

```java
for(int i=0 ; i < 5 ; i++)
{
   System.out.println("i is : " + i);
}
```

์ฝ”๋“œ ์กฐ๊ฐ์— ์–ธ์–ด ์ด๋ฆ„์„ ์“ฐ๋ฉด GitHub์€ ๊ตฌ๋ฌธ๊ฐ•์กฐ(Syntax Highlight)๋„ ํ•ด์ค€๋‹ค. ๊ตฌ๋ฌธ๊ฐ•์กฐ๋กœ ๋ฏธ๋ˆํ•ด์ง„ ์ฝ”๋“œ.๋Š” ์–ธ์–ด ์ด๋ฆ„์„ ๋„ฃ์–ด์„œ ๊ตฌ๋ฌธ ๊ฐ•์กฐ๋œ ๊ฒฐ๊ณผ๋‹ค.

๋ฏธ๋ˆํ•œ ์ฝ”๋“œ
Figure 17. ๊ตฌ๋ฌธ๊ฐ•์กฐ๋กœ ๋ฏธ๋ˆํ•ด์ง„ ์ฝ”๋“œ.
์ธ์šฉ

์•„์ฃผ ๊ธด ๊ธ€์—์„œ ๋”ฑ ํ•œ ๋ถ€๋ถ„๋งŒ ์ง‘์–ด์„œ ๋…ผ์˜ํ•˜๊ณ  ์‹ถ์„ ๋•Œ > ๋ฌธ์ž๋กœ ํ•ด๋‹น ๋ถ€๋ถ„์„ ์ธ์šฉํ•˜๊ณ  ๊ทธ ๋ฐ‘์— ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‹จ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ๋งค์šฐ ํ”ํžˆ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ผ, ์ƒ๋‹นํžˆ ์œ ์šฉํ•˜๊ณ , ๋‹จ์ถ•ํ‚ค๋„ ์ง€์›ํ•œ๋‹ค. ์ธ์šฉํ•˜๊ณ  ์‹ถ์€ ํ…์ŠคํŠธ๋ฅผ ์„ ํƒํ•˜๊ณ  r ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋ฐ”๋กœ ์ฝ”๋ฉ˜ํŠธ ์ƒ์ž์— ํ•ด๋‹น ํ…์ŠคํŠธ๊ฐ€ ์ธ์šฉ๋œ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด ์ธ์šฉํ•œ๋‹ค.

> Whether 'tis Nobler in the mind to suffer
> The Slings and Arrows of outrageous Fortune,

How big are these slings and in particular, these arrows?

์ด ํ…์ŠคํŠธ๋Š” ์ธ์šฉ ์˜ˆ์ œ.์ฒ˜๋Ÿผ ๋ Œ๋”๋ง๋œ๋‹ค.

์ธ์šฉ ์˜ˆ์ œ
Figure 18. ์ธ์šฉ ์˜ˆ์ œ.
Emoji

๋งˆ์ง€๋ง‰์œผ๋กœ ์†Œ๊ฐœํ•˜๋Š” ๊ฒƒ์€ ๊ธ€์— Emoji๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. Emoji๋Š” GitHub ์ด์Šˆ๋‚˜ Pull Request์—์„œ ์ •๋ง ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค. GitHub์€ Emoji๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค. ์ฝ”๋ฉ˜ํŠธ๋ฅผ ์“ธ ๋•Œ : ๋ฌธ์ž๋กœ Emoji ์ž…๋ ฅ์„ ์‹œ์ž‘ํ•˜๋ฉด ์„ ํƒํ•ด์„œ ์ž๋™์™„์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก Emoji ๋ชฉ๋ก์„ ๋ณด์—ฌ์ค€๋‹ค.

Emoji ์ž๋™์™„์„ฑ
Figure 19. Emoji ์ž๋™์™„์„ฑ.

Emoji๋Š” :<name>: ํ˜•์‹์œผ๋กœ ์ƒ๊ฒผ๋‹ค. ์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ๋ณด์ž.

I :eyes: that :bug: and I :cold_sweat:.

:trophy: for :microscope: it.

:+1: and :sparkles: on this :ship:, it's :fire::poop:!

:clap::tada::panda_face:

๋ Œ๋”๋ง๋˜๋ฉด Emoji๋ฅผ ๋งŽ์ด ์“ด ๊ธ€.์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค.

Emoji
Figure 20. Emoji๋ฅผ ๋งŽ์ด ์“ด ๊ธ€.

Emoji๋Š” ์ •๋ณด ์ „๋‹ฌํ•˜๋Š” ๋ฐ๋„ ์ข‹์ง€๋งŒ ์–ผ๋งˆ๋‚˜ ์žฌ๋ฐŒ๊ณ  ๊ธฐ์œ์ง€ ๊ฐ™์€ ํ‘œํ˜„๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

Note

Emoji ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์›น ์„œ๋น„์Šค๊ฐ€ ์ •๋ง ๋งŽ๋‹ค. ์–ด๋–ค Emoji ๋ฌธ์ž๊ฐ€ ์žˆ๋Š”์ง€ ์‰ฝ๊ฒŒ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋Š” ์น˜ํŠธ์‹œํŠธ๊ฐ€ ์žˆ์–ด์„œ ๋‘๊ณ ๋‘๊ณ  ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฏธ์ง€

GitHub์ด ์ œ๊ณตํ•˜๋Š” ๊ธ€์— ์ด๋ฏธ์ง€๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ์€ ๊ธฐ์ˆ ์ ์œผ๋กœ GFM์ด ์•„๋‹ˆ์ง€๋งŒ ์—„์ฒญ ์œ ์šฉํ•˜๋‹ค. Markdown ํ˜•์‹์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ์ฒจ๋ถ€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์ด๋ฏธ์ง€๋ฅผ ์˜ฌ๋ฆฌ๊ณ  ๊ทธ URL์„ ์ฐพ์•„์„œ ์ผ์ผ์ด ์ž…๋ ฅํ•ด์•ผ ํ•˜๋Š”๋ฐ ๋ฒˆ๊ฑฐ๋กญ๋‹ค. GitHub์—์„œ๋Š” ๊ทธ๋ƒฅ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ”๋กœ Drag-and-Drop์œผ๋กœ ๋ถ™์—ฌ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

Drag and drop images
Figure 21. ๋Œ์–ด๋‹ค ๋†“๊ธฐ๋กœ ์ด๋ฏธ์ง€ ์ž๋™ ๋ถ™์ด๊ธฐ.

๋Œ์–ด๋‹ค ๋†“๊ธฐ๋กœ ์ด๋ฏธ์ง€ ์ž๋™ ๋ถ™์ด๊ธฐ.๋กœ ๋Œ์•„๊ฐ€์„œ ๋ณด๋ฉด Text Area ์œ„์— โ€œParsed As Markdownโ€ ์ด๋ผ๋Š” ํ‘œ์‹œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๋ฉด GitHub์—์„œ Markdown์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” ์น˜ํŠธ์‹œํŠธ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.