CS

Git Upstream ์ด๋ž€? Upstream๊ณผ Origin ์ฐจ์ด์ ๊ณผ ํ•„์š”ํ•œ ์ด์œ 

soonge2 2025. 3. 4. 15:26

๐ŸŒฟ Git Upstream ์ด๋ž€? 

ํ˜‘์—…์„ ์œ„ํ•ด ํŒ€ ๋ ˆํฌ๋ฅผ forkํ•˜๊ณ  ๊ฐœ์ธ ๋ ˆํฌ์™€ ๋กœ์ปฌ ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ ์—ฐ๊ฒฐํ•ด ๊ฐœ๋ฐœํ•˜๋˜ ์ค‘, 

ํŒ€ ๋ ˆํฌ์— ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์ง€๋งŒ ๊ฐœ์ธ ๋ ˆํฌ์—๋Š” ์ž๋™์œผ๋กœ ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. 

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํŒ€ ๋ ˆํฌ์˜ ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐœ์ธ ๋ ˆํฌ๋กœ ๊ฐ€์ ธ์˜ค๊ณ , ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด์„œ Upstream๊ณผ Origin์˜ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 

์ด์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜์—ฌ ํฌ์ŠคํŒ…์œผ๋กœ ๊ณต์œ ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿซ› Git Upstream๊ณผ Git Origin ๊ฐœ๋…

๋กœ์ปฌ ๊ฐœ๋ฐœํ™˜๊ฒฝ์—์„œ ์›๊ฒฉ ์ €์žฅ์†Œ์™€ ์—ฐ๊ฒฐํ•ด ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ, Origin๊ณผ Upstream ์ด๋ผ๋Š” ๊ฐœ๋…์ด ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค.

๋‘˜ ๋‹ค ์›๊ฒฉ ์ €์žฅ์†Œ(remote repository)๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

์–ด๋–ค ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ƒ์— ๋”ฐ๋ผ ์—ญํ• ์˜ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

  • origin: ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์ง์ ‘ ์—ฐ๊ฒฐ๋œ ์›๊ฒฉ ์ €์žฅ์†Œ.
    • ๋‚ด๊ฐ€ clone ํ•œ ์›๊ฒฉ ์ €์žฅ์†Œ.
    • ๋‚ด ๋กœ์ปฌ์—์„œ ์ฝ”๋“œ๋ฅผ pushํ•˜๊ฑฐ๋‚˜ pullํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ๋Œ€์ƒ์ž…๋‹ˆ๋‹ค.
  • upstream: Forkํ•œ ๊ฐœ์ธ ๋ ˆํฌ๊ฐ€ ์›๋ณธ ๋ ˆํฌ์™€ ๋™๊ธฐํ™”ํ•  ๋•Œ ํ•„์š”ํ•œ ์›๊ฒฉ ์ €์žฅ์†Œ.
    • forkํ•œ ๊ฒฝ์šฐ์—๋งŒ ํ•„์š”ํ•œ ๊ฐœ๋…. 
    • ์›๋ณธ ๋ ˆํฌ๊ฐ€ ์กด์žฌํ•˜๊ณ , ๊ฐœ์ธ ๋ ˆํฌ๊ฐ€ ๊ทธ ์›๋ณธ์—์„œ fork ๋˜์—ˆ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

git fork & upstream workflow ©soonge2

 

์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋„๋ก ๊ทธ๋ฆผ์„ ๋งŒ๋“ค์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 

 

1. ํ˜‘์—…์„ ์œ„ํ•ด ํŒ€ ๋ ˆํฌ๋ฅผ forkํ•ด ๊ฐœ์ธ ๋ ˆํฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. (๊ฐ์ž ๊ฐœ์ธ ๋ ˆํฌ์—์„œ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•œ ํ›„ ํŒ€ ๋ ˆํฌ์— ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.)

2. ๊ฐœ์ธ ๋ ˆํฌ๋ฅผ ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์œผ๋กœ cloneํ•˜์—ฌ, ๋กœ์ปฌ์—์„œ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

3. ๊ฐœ๋ฐœ์ด ๋๋‚œ ํ›„, ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ๊ฐœ์ธ ๋ ˆํฌ(origin)๋กœ push ํ•ฉ๋‹ˆ๋‹ค.

4. ๊ฐœ์ธ ๋ ˆํฌ์—์„œ ํŒ€ ๋ ˆํฌ(upstream)์œผ๋กœ Pull Request(PR)์„ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค. 

5. ํŒ€์—์„œ PR์„ Merge ํ•˜๋ฉด ์›๋ณธ ๋ ˆํฌ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋ฉ๋‹ˆ๋‹ค. 

 

 

 

๐Ÿซ› Upstream์ด ํ•„์š”ํ•œ ์ด์œ  

upstream์€ ์™œ ํ•„์š”ํ•œ๊ฐ€์š”?

 

Forkํ•œ ๊ฐœ์ธ ๋ ˆํฌ๋Š” ์›๋ณธ ๋ ˆํฌ์™€ ์ž๋™์œผ๋กœ ๋™๊ธฐํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ฆ‰, ์›๋ณธ ๋ ˆํฌ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์—ˆ๋‹ค๊ณ  ํ•ด์„œ, ๊ฐœ์ธ ๋ ˆํฌ(origin)๊ฐ€ ์ž๋™์œผ๋กœ ์ตœ์‹  ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์›๋ณธ ๋ ˆํฌ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ˆ˜๋™์œผ๋กœ ๊ฐ€์ ธ์™€ ๋™๊ธฐํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

 

๊ทธ๋ž˜์„œ ์›๋ณธ ๋ ˆํฌ๋ฅผ upstream์œผ๋กœ ์ง€์ •ํ•˜๊ณ , git fetch upstream, git pull upstram, git merge ๋“ฑ์˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ์›๋ณธ ๋ ˆํฌ์™€ ๊ฐœ์ธ ๋ ˆํฌ์˜ ๋™๊ธฐํ™”๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  •  

 

๐Ÿซ› Upstream ๋ช…๋ น์–ด

* upstream์ด ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ, ์›๋ณธ ๋ ˆํฌ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐœ์ธ ๋ ˆํฌ์™€ ๋กœ์ปฌ ๊ฐœ๋ฐœํ™˜๊ฒฝ์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

1. ์›๋ณธ ๋ ˆํฌ๋ฅผ upstream์œผ๋กœ ๋“ฑ๋ก

git remote add upstream https://github.com/ํŒ€๋ ˆํฌ.git

 

์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

git remote -v

 

 

2. ์›๋ณธ ๋ ˆํฌ์˜ ์ตœ์‹  ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๊ฐ€์ ธ์˜ค๊ธฐ

git fetch upstream

 

์›๋ณธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. 

์›๋ณธ ๋ ˆํฌ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์™€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋กœ์ปฌ ๋ธŒ๋žœ์น˜๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. 

 

์ฆ‰, fetch๋Š” ์›๋ณธ ๋ ˆํฌ์˜ ์ตœ์‹  ์ƒํƒœ๋ฅผ ๋กœ์ปฌ Git ์ €์žฅ์†Œ์— ๋‹ค์šด๋กœ๋“œ๋งŒ ํ•  ๋ฟ, ๋กœ์ปฌ ๋ธŒ๋žœ์น˜์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

์›๋ณธ ๋ ˆํฌ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋กœ์ปฌ ๋ธŒ๋žœ์น˜์— ๋ฐ˜์˜ํ•˜๋ ค๋ฉด, ์ถ”๊ฐ€๋กœ merge ๋˜๋Š” pull์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

 

3. ์›๋ณธ ๋ ˆํฌ์˜ ํŠน์ • ๋ธŒ๋žœ์น˜๋ฅผ ๋กœ์ปฌ์—์„œ ์—…๋ฐ์ดํŠธ

git pull upstream <๋ณ‘ํ•ฉํ•  ๋ธŒ๋žœ์น˜๋ช…>

 

git fetch upstream์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋‹ค์šด๋กœ๋“œ๋งŒ ํ–ˆ๋‹ค๋ฉด,

git pull upstream์€ ์›๋ณธ ๋ ˆํฌ(upstream/<๋ธŒ๋žœ์น˜๋ช…>)์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์™€์„œ ๋‚ด ๋กœ์ปฌ ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค. 

 

์ฆ‰, fetch + merge๊ฐ€ ์ž๋™์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.