Git Submodule (๊น ์๋ธ๋ชจ๋)์ ์ฌ์ฉํ๋ฉด ํ๋์ Git ์ ์ฅ์๋ฅผ ๋ค๋ฅธ Git ์ ์ฅ์์ ํ์ ๋๋ ํฐ๋ฆฌ๋ก ์ ์งํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ธ๋ถ ์ข ์์ฑ์ด๋ ๊ณต์ ์ฝ๋๋ฅผ ์ ์ฅ์ ์์ฒด์ ํฌํจํ๊ณ ์ถ์ ํ๋ฉด์๋ ๋ณ๋์ ๋ฒ์ ๊ธฐ๋ก์ ์ ์งํ ์ ์์ต๋๋ค.
๋ํ ๊ณต์ ์ฝ๋๋ ์ต์ ๋ฒ์ ์ด ์๋ ํน์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํต๋๋ค. ์ด๋ ์ธ๋ถ ์์ค์ ํธํ์ฑ์ ๊นจ๋จ๋ฆฌ๋ ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก ์ธํด ์ ์ฅ์๊ฐ ์์๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
๋ถ์ธ ์ฑ๋ช ํ๊ตญ์ด ์ค๋ ฅ์ด ๋ถ์ ํ์ฌ ์ด ๊ธ์ด ๊ตฌ๊ธ ๋ฒ์ญ๊ธฐ๋ฅผ ์ฃผ๋ก ํ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ถ์ ํํ ๋ฌธ๋ฒ๊ณผ ์ดํ๊ฐ ์์์ ์์ต๋๋ค. ์ด ์ ์ํด ๋ถํ๋๋ฆฌ๋ฉฐ, ์ถํ์ ๋ค์ ๊ฒํ ํ์ฌ ์์ ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ธฐ๋ณธ ์ค์
์๋ธ๋ชจ๋ ์ถ๊ฐ
๊ธฐ์กด Git ์ ์ฅ์์ ์๋ธ๋ชจ๋์ ์ถ๊ฐํ๋ ์์
์ submodule add ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ํํ ์ ์์ต๋๋ค.
git submodule add <repository-url> <path>์๋ฅผ ๋ค์ด, libs ๋๋ ํ ๋ฆฌ์ shared-utils๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ๋ฉด ๋ฉ๋๋ค.
git submodule add https://github.com/username/shared-utils.git libs/shared-utils์ด๋ ๊ฒ ํ๋ฉด ์ง์ ๋ ๊ฒฝ๋ก์ ์ ๋๋ ํฐ๋ฆฌ๊ฐ ์์ฑ๋๊ณ ์ ์ฅ์ ๋ฃจํธ์ .gitmodules ํ์ผ์์ ์๋ธ๋ชจ๋์ ์ถ์ ํฉ๋๋ค.
์๋ธ๋ชจ๋ ์ปค๋ฐ
์ถ๊ฐ๋ ์๋ธ๋ชจ๋์ .gitmodules ํ์ผ๊ณผ ํจ๊ป ์ปค๋ฐ๋์ด์ผ ํฉ๋๋ค.
git add .gitmodules libs/shared-utils
git commit -m "Add shared-utils submodule"ํ๋ก์ ํธ ํด๋ก
์๋ธ๋ชจ๋์ด ํฌํจ๋ ์ ์ฅ์๋ฅผ ํด๋ก ํ ๋, ์๋ธ๋ชจ๋ ๋๋ ํฐ๋ฆฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋น์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ณ๋๋ก ์ด๊ธฐํํด์ผ ํฉ๋๋ค.
git clone <your-repository-url>
cd <your-repository>
git submodule init
git submodule update๋คํํ ํด๋ก ํ ๋ --recurse-submodules ํ๋๊ทธ๋ฅผ ์ ๋ฌํ๋ฉด ๋์ผํ ์์
์ ์ํํ๋ ํ ์ค์ง๋ฆฌ ํด๋ก ๋ช
๋ น์ด ์์ต๋๋ค.
git clone --recurse-submodules <your-repository-url>์ผ๋ฐ์ ์ธ ์์
์๋ธ๋ชจ๋ ์ ๋ฐ์ดํธ
์๋ธ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค๋ฆฌ์ง์ ์ต์ ์ปค๋ฐ์ผ๋ก ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์๋ธ๋ชจ๋์ด ์๋ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํ์ฌ ์ต์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์ ธ์จ ๋ค์, ์ ์ฅ์์ ๋ฃจํธ๋ก ๋์๊ฐ ์ ๋ฐ์ดํธ๋ฅผ ์ปค๋ฐํ๋ฉด ๋ฉ๋๋ค.
cd libs/shared-utils
git pull origin main
cd ../..
git add libs/shared-utils
git commit -m "Update shared-utils submodule"๋ชจ๋ ์๋ธ๋ชจ๋์ ํ ๋ฒ์ ์ ๋ฐ์ดํธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ญ์์ค.
git submodule update --remote์ํ ํ์ธ
๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ๋ชจ๋ ์๋ธ๋ชจ๋์ ์ํ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
git submodule status๊ทธ๋ฌ๋ฉด ๊ฐ ์๋ธ๋ชจ๋์ ๋ํด ์๋์ ๊ฐ์ ๋ด์ฉ์ด ์ถ๋ ฅ๋ฉ๋๋ค.
a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0 libs/shared-utils (v1.2.3)์ด ๋ํดํ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋ถ์ํด ๋ณด๊ฒ ์ต๋๋ค. ์ถ๋ ฅ ํ์์ ์๋์ ๊ฐ์ต๋๋ค.
[์ํ ํ์๊ธฐ][์ปค๋ฐ ํด์] [๊ฒฝ๋ก] [(ํ๊ทธ/๋ธ๋์น)]์ฒซ ๋ฒ์งธ ๋ฌธ์๋ ์ํ ํ์๊ธฐ์ ๋๋ค. ์ด๋ ํด๋น ์๋ธ๋ชจ๋์ ์ํ๋ฅผ ์๋ ค์ค๋๋ค. ์ํ ํ์๊ธฐ์๋ 4๊ฐ์ง ์ข ๋ฅ๊ฐ ์์ต๋๋ค.
(๊ณต๋ฐฑ/๊ธฐํธ ์์) - ์๋ธ๋ชจ๋์ด ์ฌ๋ฐ๋ฅธ ์ปค๋ฐ์ผ๋ก ์ฒดํฌ์์๋์์ต๋๋ค(๋ชจ๋ ๊ฒ์ด ๋๊ธฐํ๋จ).-- ์๋ธ๋ชจ๋์ด ์์ง ์ด๊ธฐํ๋์ง ์์์ต๋๋ค(๋๋ ํ ๋ฆฌ๊ฐ ๋น์ด ์์).+- ์๋ธ๋ชจ๋์ด ์์ ์ ์ฅ์์์ ์์ํ๋ ์ปค๋ฐ๊ณผ ๋ค๋ฅธ ์ปค๋ฐ์ผ๋ก ์ฒดํฌ์์๋์์ต๋๋ค(๋ก์ปฌ์์ ๋ณ๊ฒฝํ์ง๋ง ์์ง ์ปค๋ฐํ์ง ์์).U- ์๋ธ๋ชจ๋์ ๋ณํฉ ์ถฉ๋์ด ์์ต๋๋ค.
๋ฐ๋ชจ
๊ฐ๋ ์ ์ค๋ช ํ๊ธฐ ์ํด ๋ ๊ฐ์ GitHub ์ ์ฅ์๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ง์ ์ฌ์ฉํด ๋ณด์๋ ค๋ฉด ํด๋ก ํด ๋ณด์ธ์.
- cdn - JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฅ์
- use-cdn - ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ JavaScript ์ ํ๋ฆฌ์ผ์ด์
GitHub์์๋ ์๋ธ๋ชจ๋์ ์๋ณธ ์ ์ฅ์์ ๋ํ ํ์ดํผ๋งํฌ์ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ฌ ํด์ ์ปค๋ฐ(์๋ธ๋ชจ๋ @ ํด์)์ผ๋ก ํ์ํฉ๋๋ค.

์์ฝ
์๋ธ๋ชจ๋์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค.
- ๋ค๋ฅธ Git ํ๋ก์ ํธ์ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ํน์ ์ปค๋ฐ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ์ข ์์ฑ์ ๊ณ ์ ํ ์ ์์ต๋๋ค.
- ์ ์ฒด ์๋ํํฐ ์ฝ๋๋ฅผ ์ ์ฅ์์ ์ปค๋ฐํ์ง ์๊ณ ๋ ํ๋ก์ ํธ๋ณ ํ์คํ ๋ฆฌ๋ฅผ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.