Git Upstream ์ด๋? Upstream๊ณผ Origin ์ฐจ์ด์ ๊ณผ ํ์ํ ์ด์
๐ฟ Git Upstream ์ด๋?
ํ์ ์ ์ํด ํ ๋ ํฌ๋ฅผ forkํ๊ณ ๊ฐ์ธ ๋ ํฌ์ ๋ก์ปฌ ๊ฐ๋ฐํ๊ฒฝ์ ์ฐ๊ฒฐํด ๊ฐ๋ฐํ๋ ์ค,
ํ ๋ ํฌ์ ์๋ก์ด ๋ธ๋์น๊ฐ ์์ฑ๋์์ง๋ง ๊ฐ์ธ ๋ ํฌ์๋ ์๋์ผ๋ก ๋ฐ์๋์ง ์๋ ๊ฒ์ ํ์ธํ์ต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ ๋ ํฌ์ ๋ธ๋์น๋ฅผ ๊ฐ์ธ ๋ ํฌ๋ก ๊ฐ์ ธ์ค๊ณ , ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ์ฐ๊ฒฐํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ฉด์ Upstream๊ณผ Origin์ ๊ฐ๋ ์ ์ดํดํ๊ฒ ๋์์ต๋๋ค.
์ด์ ๋ํ ๋ด์ฉ์ ์ ๋ฆฌํ์ฌ ํฌ์คํ ์ผ๋ก ๊ณต์ ํ๊ณ ์ ํฉ๋๋ค.
๐ซ Git Upstream๊ณผ Git Origin ๊ฐ๋
๋ก์ปฌ ๊ฐ๋ฐํ๊ฒฝ์์ ์๊ฒฉ ์ ์ฅ์์ ์ฐ๊ฒฐํด ๊ฐ๋ฐ์ ํ ๋, Origin๊ณผ Upstream ์ด๋ผ๋ ๊ฐ๋ ์ด ๋ฑ์ฅํฉ๋๋ค.
๋ ๋ค ์๊ฒฉ ์ ์ฅ์(remote repository)๋ฅผ ๊ฐ๋ฆฌํค๋ ์ด๋ฆ์ ๋๋ค.
์ด๋ค ์๊ฒฉ ์ ์ฅ์๋ฅผ ๊ฐ๋ฆฌํค๋์ ๋ฐ๋ผ ์ญํ ์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
- origin: ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ์ง์ ์ฐ๊ฒฐ๋ ์๊ฒฉ ์ ์ฅ์.
- ๋ด๊ฐ clone ํ ์๊ฒฉ ์ ์ฅ์.
- ๋ด ๋ก์ปฌ์์ ์ฝ๋๋ฅผ pushํ๊ฑฐ๋ pullํ๋ ๊ธฐ๋ณธ์ ์ธ ๋์์ ๋๋ค.
- upstream: Forkํ ๊ฐ์ธ ๋ ํฌ๊ฐ ์๋ณธ ๋ ํฌ์ ๋๊ธฐํํ ๋ ํ์ํ ์๊ฒฉ ์ ์ฅ์.
- forkํ ๊ฒฝ์ฐ์๋ง ํ์ํ ๊ฐ๋ .
- ์๋ณธ ๋ ํฌ๊ฐ ์กด์ฌํ๊ณ , ๊ฐ์ธ ๋ ํฌ๊ฐ ๊ทธ ์๋ณธ์์ fork ๋์์ ๋ ์ฌ์ฉํฉ๋๋ค.
์ดํดํ๊ธฐ ์ฝ๋๋ก ๊ทธ๋ฆผ์ ๋ง๋ค์ด๋ณด์์ต๋๋ค.
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๊ฐ ์๋์ผ๋ก ์คํ๋ฉ๋๋ค.