Git Submodule
์ฌ์ด๋ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์๋กญ๊ฒ ์๊ฒ๋ Git Submodule (์๋ธ๋ชจ๋)์ ์๊ฐํฉ๋๋ค.
์ค์ํ ์ ๋ณด๋ฅผ ๊ฐ์ ๋ฐฑ์๋ ๊ฐ๋ฐ์์๋ง ๊ณต์ ํ ์ ์์๊น ?
Spring ํ๋ก์ ํธ์์ application.properties ๋๋ application.yml ํ์ผ์ DB์ ๋ณด๋, API Key๋ฅผ ์ ์ฅํฉ๋๋ค. ์ด๋ฌํ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ๋ด๊ธด ํ์ผ์ด public repository์ ์ฌ๋ผ๊ฐ์ง ์๊ธฐ ์ํด ์ง๊ธ๊ป ํด๋น ํ์ผ์ ๋ก์ปฌ PC์ ๋๊ณ .gitignore ํ์ผ์ ๋ฑ๋กํ์ฌ ์ฌ์ฉํ์ต๋๋ค.
ํ์ง๋ง ํด๋น ์ ๋ณด๋ค์ด ๋ณ๊ฒฝ์ด ๋๋ฉด ๋ค๋ฅธ ๋ฐฑ์๋ ๊ฐ๋ฐ์์ ์ํตํ์ฌ ๋ง์ถ์ง ์์ผ๋ฉด ๋ค๋ฅธ ํ๊ฒฝ์์ ๊ฐ๋ฐํ๊ฒ ๋๋ ๋๊ฐํ ์ํฉ์ด ์๊น๋๋ค. ๊ฐ๋ น ์์ ๋ก๊ทธ์ธ์ Kakao๋ง ๊ตฌํํ๋๋ฐ, ๋ก๊ทธ์ธ MVP๊ฐ ์ถ๊ฐ๋๋ฉด์ Google์ ์ถ๊ฐํ๊ธฐ ์ํด ์ ๋ก์ปฌ์๋ง application.yml์ ์ค์ ์ ์ถ๊ฐํ๊ฒ ๋๋ค๋ฉด ๋ค๋ฅธ ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ ์ง์ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์ง์ ๋ณ๊ฒฝํ์ง ์๊ณ git ์๋ฒ์ ์ ๋ก๋ํ์ฌ ๊ณต์ ํ๊ฒ ๋๋ค๋ฉด ๋ณด์์ด ์ทจ์ฝํด์ง๋๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ค์ ์ด ๋ด๊ธด application.yml ํ์ผ๋ง ๊ฐ์ง๋ private repository๋ฅผ ์์ฑํ์ต๋๋ค. ์ด๋ฅผ ํตํด ํด๋น ๋ธ๋์น์ ํ์ผ์ ์๋ก ๊ณต์ ํ ์ ์์์ต๋๋ค.
๋ณ๊ฒฝ๋ ์ค์ ๋ค์ด ์๋์ผ๋ก ํ๋ก์ ํธ์ ๋ฐ์๋๋ค๋ฉด ?
ํ์ง๋ง application.yml์ด ๋ณ๊ฒฝ์ด ๋์๋์ง๋ ์ง์ ํ์ธํ๋ ๋ถํธํจ์ด ์์์ต๋๋ค. ๊ทธ๋์ ์๊ฒ๋ ๊ฒ์ด ๋ฐ๋ก Git Submodule์ ๋๋ค!
์ ์ฅ์ ์์ ๋ค๋ฅธ Git ์ ์ฅ์๋ฅผ ๋๋ ํ ๋ฆฌ๋ก ๋ถ๋ฆฌํด ๋ฃ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋๋๋ฐ, public์ธ ํ ํ๋ก์ ํธ์ repository ํ์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ private ํ๋ก์ ํธ์ repository๋ฅผ ์์์ผ๋ก ๋๊ณ ๊ด๋ฆฌํ ์ ์์ด ๊ต์ฅํ ํธ๋ฆฌํ๊ฒ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ ๊ทธ๋ฆผ์ฒ๋ผ ๋ค์์ ํ๋ก์ ํธ๊ฐ ๊ฐ์ submodule๋ก ๋ฑ๋กํ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์ ๊ทผํ ์ ์์ด ํด๋ผ์ด์ธํธ, ์๋ฒ ๊ฐ๋ฐ์๊ฐ ๋์์ ์ฌ์ฉํ ํ์ผ์ ๋ณ๋๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
์๋๋ git ๊ณต์ Documentation์ ๊ธฐ์ฌ๋ git submodule์ ๋ํ ์ค๋ช ์ ๋๋ค.
ํ๋ก์ ํธ๋ฅผ ์ํํ๋ค ๋ณด๋ฉด ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ํจ๊ป ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์๋ค. ํจ๊ป ์ฌ์ฉํ ๋ค๋ฅธ ํ๋ก์ ํธ๋ ์ธ๋ถ์์ ๊ฐ๋ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๋๊ฐ ๋ด๋ถ ์ฌ๋ฌ ํ๋ก์ ํธ์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ผ ์ ์๋ค. ์ด๋ฐ ์ํฉ์์ ์์ฃผ ์๊ธฐ๋ ์ด์๋ ๋ ํ๋ก์ ํธ๋ฅผ ์๋ก ๋ณ๊ฐ๋ก ๋ค๋ฃจ๋ฉด์๋ ๊ทธ ์ค ํ๋๋ฅผ ๋ค๋ฅธ ํ๋ ์์์ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
git submodule ์ฌ์ฉํด๋ณด๊ธฐ
1. ํ๋ก์ ํธ ์์ฑ
์ ํฌ ํ๋ก์ ํธ์ submodule๋ก ์ฌ์ฉ๋ ํ๋ก์ ํธ๋ ์์ ๊ฐ์ด ์์ฑํ์ต๋๋ค. ๊ฐ๋ฐ, ํ ์คํธ, ์ด์ ์๋ฒ์์ ๊ฐ๊ฐ ์ฌ์ฉ๋ yamlํ์ผ์ submodule ํ๋ก์ ํธ์ ๋ณ๋๋ก ์์ฑํด๋์์ต๋๋ค. ๋ํ, gitignore์ฒ๋ผ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋์ง๋ง ์์ฃผ ์์ ๋ ์ ์๋ ํ์ผ๋ค๋ ๋ง๋ค์ด์ฃผ์์ต๋๋ค.
2. ํ๋ก์ ํธ์ Submodule ์ฐ๊ฒฐ
์๋ ๋ช ๋ น์ด๋ฅผ ์๋ธ๋ชจ๋์ ์ฌ์ฉํ ํ๋ก์ ํธ์ ํฐ๋ฏธ๋์์ ์ ๋ ฅํด์ ์๋ธ๋ชจ๋์ ์ฐ๊ฒฐํฉ๋๋ค.
git submodule add {{์๋ธ๋ชจ๋๋ก ์ฌ์ฉํ ๋ ํฌ์งํ ๋ฆฌ URL}}
๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ํ๋ก์ ํธ ๋ฃจํธ ํด๋์ ์์ฑ๋๋ .gitmodules ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅํด์ค๋๋ค. ํด๋น ํ์ผ์ด ์ถ๊ฐ/์์ ๋์์ผ๋ฏ๋ก commit/push๋ฅผ ํด์ฃผ์ด์ผ ์ธ๋ถ์์ ์ฌ์ฉํ๋ ค๊ณ ํ ๋ ์์ ๋ ์์ค๊ฐ ์กด์ฌํ์ง ์์ ๋ฐ์ํ๋ ๋ฌธ์ ๊ฐ ์๊ธฐ์ง ์์ต๋๋ค!
[submodule {{์๋ธ๋ชจ๋๋ช
}}]
path = {{ํ๋ก์ ํธ ํด๋ ๋ด ๊ฒฝ๋ก}}
url = {{ํ๋ก์ ํธ url}}
์ ๋ ์๋์ฒ๋ผ ์ค์ ํด์ config ํด๋๊ฐ ์์ฑ๋์์ต๋๋ค.
์ ์์ ์ผ๋ก ์๋ธ๋ชจ๋์ด ์ฐ๊ฒฐ๋๋ฉด git ์๋ฒ์ push๋ฅผ ํ๋ค๋ฉด Github์์ ํ๋ก์ ํธ๋ฅผ ์ดํด๋ณด๋ฉด ์๋์ฒ๋ผ ์ฒ์๋ณด๋ ํด๋๊ฐ ์๊น๋๋ค! ์ ํด๋๋ฅผ ๋๋ฅด๋ฉด ์ฐ๊ฒฐํ๋ ํ๋ก์ ํธ๋ก ์ด๋ํฉ๋๋ค.
3. Submodule ์ ๋ฐ์ดํธ
Intelij๋ฅผ ์ฌ์ฉํ์ ๋ค๋ฉด Gradle์์ copyGitSubmodule์ ์คํํ์ฌ ๋ณ๊ฒฝ๋ ๋ฒ์ ์ ์๋ธ๋ชจ๋์ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.
ํฐ๋ฏธ๋์ ์ฌ์ฉํ๋ค๋ฉด ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด ์ํํ ์ ์์ต๋๋ค.
git submodule update
๋ง์ฝ ์ฌ๋ฌ ์๋ธ๋ชจ๋์ ์ฌ์ฉํ๋ค๋ฉด ๋์์ ์ ๋ฐ์ดํธ๋ ๊ฐ๋ฅํฉ๋๋ค.
git submodule foreach 'git pull'
4. Submodule ์ ๊ฑฐ
๋ ์ด์ ์๋ธ๋ชจ๋์ ์ฌ์ฉํ์ง ์์ ๋, ์๋ ๋ช ๋ น์ด๋ก ์ฐ๊ฒฐ์ ๋์ ์ ์์ต๋๋ค.
git submodule deinit {{์๋ธ๋ชจ๋๋ช
}}
git rm {{์๋ธ๋ชจ๋๋ช
}}
git commit-m "chore: ์๋ธ๋ชจ๋ ์ ๊ฑฐ"
rm -rf .git/modules/{{์๋ธ๋ชจ๋๋ช
}}
'๐ Programming > Git' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Git] Github Action์ผ๋ก ์๋์ผ๋ก ์๋ ๋ง๋ค์ด์ฃผ๊ธฐ (Grass Generator Workflow) (2) | 2023.09.12 |
---|