Dev_TIMI

์Šค๋‚ต๊นƒ ๐Ÿช - ์ค‘๊ธ‰ํŽธ #6: Fork๋œ ๋ ˆํฌ์™€ ๋ฉ”์ธ ๋ ˆํฌ ๋™๊ธฐํ™”ํ•˜๋Š” ๋ฒ•

by its_TIMI

Fork๋œ ๋ ˆํฌ์™€ ๋ฉ”์ธ ๋ ˆํฌ ๋™๊ธฐํ™”ํ•˜๋Š” ๋ฒ•

 

GitHub์—์„œ ํ˜‘์—…์„ ํ•˜๋‹ค ๋ณด๋ฉด, Forkํ•œ ๋ ˆํฌ๋ฅผ ๋ฉ”์ธ ๋ ˆํฌ์™€ ๋™๊ธฐํ™”ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ž์ฃผ ๋ฐœ์ƒํ•œ๋‹ค.

Fork๋Š” ์›๋ณธ(๋ฉ”์ธ) ๋ ˆํฌ์˜ ๋ณต์‚ฌ๋ณธ์ด์ง€๋งŒ, ๋ฉ”์ธ ๋ ˆํฌ๋Š” ๊ณ„์† ์—…๋ฐ์ดํŠธ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด Forkํ•œ ๋ ˆํฌ์™€ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ, ์ตœ์‹  ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Fork๋œ ๋ ˆํฌ๋ฅผ ๋ฉ”์ธ ๋ ˆํฌ์™€ ๋™๊ธฐํ™”ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.

 

์ด ๊ธ€์—์„œ๋Š” Forkํ•œ ๋ ˆํฌ๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ์ •๋ฆฌํ•œ๋‹ค.


๐Ÿ“Œ Fork์™€ ๋ฉ”์ธ ๋ ˆํฌ์˜ ๊ด€๊ณ„

 

GitHub์—์„œ Fork๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๋ ˆํฌ๋ฅผ ๋‚ด ๊ณ„์ •์œผ๋กœ ๋ณต์‚ฌํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

Forkํ•œ ๋ ˆํฌ๋Š” ์›๋ณธ ๋ ˆํฌ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋ฉ”์ธ ๋ ˆํฌ์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•ด๋„ ์ž๋™์œผ๋กœ ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š”๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด, ์–ด๋–ป๊ฒŒ ์ตœ์‹  ์ƒํƒœ๋กœ ๋™๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

 

๐Ÿ›  Fork๋œ ๋ ˆํฌ๋ฅผ ๋ฉ”์ธ ๋ ˆํฌ์™€ ๋™๊ธฐํ™”ํ•˜๋Š” ๊ณผ์ •

 

  1. Forkํ•œ ๋ ˆํฌ๋ฅผ ๋กœ์ปฌ๋กœ ํด๋ก ํ•˜๊ธฐ
  2. ๋ฉ”์ธ ๋ ˆํฌ๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ(upstream)๋กœ ์ถ”๊ฐ€
  3. ๋ฉ”์ธ ๋ ˆํฌ์˜ ์ตœ์‹  ์ฝ”๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ
  4. ๋‚ด ๋กœ์ปฌ ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉํ•˜๊ธฐ
  5. ์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ ํ•ด๊ฒฐ
  6. 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

ํ™œ๋™ํ•˜๊ธฐ