๐Ÿ“˜ Programming/Git

[Git] ์„œ๋ธŒ๋ชจ๋“ˆ(submodule) ์‚ฌ์šฉ๋ฒ• - ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ ๋ฏผ๊ฐํ•œ ์ •๋ณด ์ˆจ๊ธฐ๊ธฐ

ํ•œ์ฝ”๋”ฉ 2023. 8. 23. 15:54
728x90
728x90

Git Submodule

์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ๋œ Git Submodule (์„œ๋ธŒ๋ชจ๋“ˆ)์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

 

application.yml

์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ๊ฐ™์€ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž์™€๋งŒ ๊ณต์œ ํ•  ์ˆ˜ ์—†์„๊นŒ ?

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์ฒ˜๋Ÿผ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์ง€๋งŒ ์ž์ฃผ ์ˆ˜์ •๋  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ๋“ค๋„ ๋งŒ๋“ค์–ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

 

yaml ํŒŒ์ผ์„ ์„œ๋ฒ„๋ณ„๋กœ ๋ถ„๋ฆฌํ•ด์„œ ๊ด€๋ฆฌ

 

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/{{์„œ๋ธŒ๋ชจ๋“ˆ๋ช…}}

 

728x90
๋ฐ˜์‘ํ˜•