
ํ ํ๋ก์ ํธ์์ ์ฌ๋ฌ ๊ฐ์ ์ ์ฅ์๋ฅผ ํจ๊ป ๊ด๋ฆฌํด์ผ ํ๋ ์๊ฐ, Git Submodule์ ๊ณ ๋ คํ๊ฒ ๋๋๋ฐ์.
ํ์ง๋ง ์ ๋ง Submodule์ด ์ต์ ์ผ๊น์? ๐ค
๋ ๋ฆฝ์ ์ธ ํ๋ก์ ํธ๋ฅผ ์ ์งํ๋ฉด์ ํน์ ๋ฒ์ ์ํ๋ฅผ ๊ณ ์ ํด์ผ ํ๋ค๋ฉด Submodule์ด ์ ์ ํ ์ ์์ต๋๋ค.
ํ์ง๋ง ์ฝ๋ ๋ณ๊ฒฝ์ด ์ฆ๊ณ , ์ต์ ๋ฒ์ ์ ์์ฃผ ๋ฐ์ํด์ผ ํ๋ค๋ฉด Subtree๋ ํจํค์ง ๋งค๋์ (npm, pip ๋ฑ)๊ฐ ๋ ๋์ ์๋ ์์ต๋๋ค.
์ด์ Git Submodule์ ๊ฐ๋ ๊ณผ ํ์ฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ์ค์ MSA(Microservices Architecture)์์ ์ด๋ป๊ฒ ํ์ฉํ ์ ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
โธป
MSA ํ๊ฒฝ์์๋ ์ฌ๋ฌ ๊ฐ์ ๋
๋ฆฝ์ ์ธ ์๋น์ค๊ฐ ํ๋ ฅํ์ฌ ํ๋์ ์์คํ
์ ๊ตฌ์ฑํ๋๋ฐ์.
๊ฐ ์๋น์ค๊ฐ ๊ณตํต๋ ์ฝ๋๋ฅผ ์ ์งํ๋ฉด์๋ ๋
๋ฆฝ์ ์ผ๋ก ์ด์๋๊ธธ ์ํ ๋, Git Submodule์ด ์ ์ฉํ ์ ์์ต๋๋ค.
์ํฉ
ํด๊ฒฐ ๋ฐฉ๋ฒ
๊ฐ ๋ง์ดํฌ๋ก์๋น์ค์์ ๊ณตํต ์ ํธ๋ฆฌํฐ๋ฅผ Git Submodule๋ก ์ถ๊ฐํ๋ฉด,
๊ฐ ์๋น์ค๋ ๋
๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐ๋๋ฉด์๋ ํน์ ๋ฒ์ ์ common-utils๋ฅผ ์ ์งํ ์ ์์ต๋๋ค.
cd user-service
git submodule add https://github.com/company/common-utils.git libs/common-utils
git commit -m "Add common-utils submodule"
cd ../order-service
git submodule add https://github.com/company/common-utils.git libs/common-utils
git commit -m "Add common-utils submodule"
์ด๋ ๊ฒ ํ๋ฉด common-utils๋ ๊ฐ ๋ง์ดํฌ๋ก์๋น์ค์ ๋
๋ฆฝ์ ์ธ ํด๋๋ก ์กด์ฌํ์ง๋ง,
๋ณ๊ฒฝ์ด ํ์ํ๋ฉด ํ ๋ฒ์ ์
๋ฐ์ดํธ๋ก ๋ชจ๋ ์๋น์ค์ ๋ฐ์ํ ์ ์์ต๋๋ค.
cd libs/common-utils
git pull origin main
cd ../..
git add .
git commit -m "Update common-utils to latest version"
โธป
MSA์์ Git Submodule์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋นํจ์จ์ ์ธ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
๐ ์์ : API ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ณตํต ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ ๊ฒฝ์ฐ
์ํฉ
ํด๊ฒฐ ๋ฐฉ๋ฒ
์ด ๊ฒฝ์ฐ api-client๋ฅผ Git Submodule๋ก ์ถ๊ฐํ๋ ๊ฒ๋ณด๋ค,
ํจํค์ง ๋งค๋์ (npm, pip, maven ๋ฑ)๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ๋ ์ ์ ํฉ๋๋ค.
npm install @company/api-client@latest
โธป
Git Submodule์ ๋์
ํ๊ธฐ ์ ์, ๋น์ทํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ค๊ณผ ๋น๊ตํด๋ณผ๊ฒ์.

์ฆ,
โธป
Submodule ์ถ๊ฐ
git submodule add <์๋ธ๋ชจ๋_๋ ํฌ_URL> <์๋ธ๋ชจ๋_๋๋ ํ ๋ฆฌ_๊ฒฝ๋ก>
git commit -m "Add submodule"
์๋ธ๋ชจ๋์ด ํฌํจ๋ ํ๋ก์ ํธ๋ฅผ ํด๋ก ํ ๋
git clone --recurse-submodules <๋ ํฌ_URL>
or
git submodule update --init --recursive
์๋ธ๋ชจ๋ ์ ๋ฐ์ดํธ
git submodule update --remote
์๋ธ๋ชจ๋ ์ญ์
git submodule deinit -f <์๋ธ๋ชจ๋_๋๋ ํ ๋ฆฌ>
rm -rf .git/modules/<์๋ธ๋ชจ๋_๋๋ ํ ๋ฆฌ>
git rm -f <์๋ธ๋ชจ๋_๋๋ ํ ๋ฆฌ>
git commit -m "Remove submodule"
โธป
Git Submodule์ ์ฐ๊ธฐ ์ข์ ๊ฒฝ์ฐ๐คญ
Git Submodule์ด ๋นํจ์จ์ ์ธ ๊ฒฝ์ฐ๐ต
โธป
Git Submodule, ์ฌ๋ฌ๋ถ์ ์ด๋ป๊ฒ ์๊ฐํ์๋์?
Git Submodule์ ์จ์ผ ํ ๊น์?
์๋๋ฉด Git Subtree๋ ํจํค์ง ๋งค๋์ ๊ฐ ๋ ๋์๊น์?
ํน์ Git ์ถฉ๋, ๋๋๋ฆฌ๊ธฐ, ํ์
๋ธ๋์น ์ ๋ต ๋ฑ
์ด๋ฐ ๋ฌธ์ ๋ค์ ์ค์ต ์ค์ฌ์ผ๋ก ์ฐจ๊ทผ์ฐจ๊ทผ ๋ฐฐ์ฐ๊ณ ์ถ๋ค๋ฉด,
์ ๊ฐ ์ค๋ฌด ๊ฒฝํ์ ๋ฐํ์ผ๋ก ๋ง๋ ๊ฐ์๋ ์ฐธ๊ณ ํด๋ณด์ธ์!
reflog, reset, revert, ์์ ํ push ๐ฌ ๊ฐ์ ์๊ฐ ์์: https://lnkd.in/gMWTUSf3
๐ ์๊ฐ ๋งํฌ: https://lnkd.in/gVVBhJ4g
๐ธ ์คํ ๊ธฐ๋
ํ ์ธ ์ค์
๋๋ค!
์์ด์ ํธ๊ฐ ์ฝ๋๋ ์ ์ง์ค๋,
๋ฒ์ ๊ด๋ฆฌ ์ต๊ด์ ์ฐ๋ฆฌ๊ฐ ๋ง๋ค์ด์ผ ์ฐ๋ฆฌ๊ฐ ํธํด์ง๋๋ค.
์ด๋ฒ ๊ธฐํ์ Git๊ณผ ์ข ๋ ์นํด์ ธ๋ณด์ธ์. ๐