๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Programming/etc.

[Github] ๊นƒํ—™ ์„œ๋ธŒ๋ชจ๋“ˆ: ๊ณตํ†ต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ด€๋ฆฌ์˜ ํ•„์š”์„ฑ๊ณผ ๋ฐฉ๋ฒ•

by ๋ญ…์ฆค 2024. 7. 24.
๋ฐ˜์‘ํ˜•

์„œ๋ธŒ๋ชจ๋“ˆ์ด๋ž€?

Submodule ์˜ˆ์‹œ

 

์„œ๋ธŒ๋ชจ๋“ˆ์€ ํ•˜๋‚˜์˜ Git ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋‚ด์— ๋‹ค๋ฅธ Git ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํฐ ํ”„๋กœ์ ํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๋…๋ฆฝ์ ์ธ ๋ชจ๋“ˆ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜, ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์—์„œ ๊ณตํ†ต๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ฐœ์ธ์ ์œผ๋กœ๋Š” ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋“ˆ z๋ฅผ ๊ฐœ๋ฐœํ–ˆ๋Š”๋ฐ, ์ด ๋ชจ๋“ˆ์ด ํ”„๋กœ์ ํŠธ A์™€ B์— ๋ชจ๋‘ ์‚ฌ์šฉ๋˜์–ด ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜๋ฉด ์ข‹์„๊นŒ ๊ณ ๋ฏผํ•˜๋‹ค ์„œ๋ธŒ๋ชจ๋“ˆ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ–ˆ์–ด์š”. ์ฒ˜์Œ์—๋Š” ๊ทธ๋ƒฅ ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋“ˆ z๋ฅผ ํ”Œ์  A์™€ B์— ๋ณต์‚ฌํ•ด๋‘”์ฑ„๋กœ ๊นƒํ—™์— ๊ด€๋ฆฌํ–ˆ๋Š”๋ฐ... ์ด๋ ‡๊ฒŒ ๊ด€๋ฆฌํ•˜๋‹ค๋ณด๋ฉด A์—์„œ z๋ฅผ ์ˆ˜์ •ํ•˜๊ณ , B์—์„œ๋„ z๋ฅผ ์ˆ˜์ •ํ•˜๊ณ ... ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๊ด€๋ฆฌ ์ž์ฒด๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ด ์ง€๋”๋ผ๊ตฌ์š” ใ…Žใ…Ž. ๋ฌผ๋ก  ์ฒ˜์Œ์—” ๋งˆ์ด๋„ˆํ•œ ์ˆ˜์ •์ด๋ผ ๋‚˜์ค‘์— ๋‹ค ์ •๋ฆฌํ•ด์•ผ์ง€~ ํ•˜์ง€๋งŒ ๋Š˜ ์‰ฝ์ง€ ์•Š์ฃ  ใ… ใ… . ๊ทธ๋ž˜์„œ! ์„œ๋ธŒ๋ชจ๋“ˆ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค ~!

 

์„œ๋ธŒ๋ชจ๋“ˆ ์‚ฌ์šฉ ์ด์œ 

 

1. ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ ํ–ฅ์ƒ

  • ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์—์„œ ๋™์ผํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ๋•Œ, ํ•ด๋‹น ๋ชจ๋“ˆ์„ ์„œ๋ธŒ๋ชจ๋“ˆ๋กœ ํฌํ•จ์‹œ์ผœ ์ฝ”๋“œ์˜ ์ค‘๋ณต ๊ฐ์†Œ
  • ์ด๋ฅผ ํ†ตํ•ด ์œ ์ง€๋ณด์ˆ˜์™€ ์—…๋ฐ์ดํŠธ๊ฐ€ ํŽธ๋ฆฌํ•ด์ง

 

2. ๋…๋ฆฝ์ ์ธ ๋ฒ„์ „ ๊ด€๋ฆฌ

  • ์„œ๋ธŒ๋ชจ๋“ˆ์€ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜์—ฌ, ํŠน์ • ํ”„๋กœ์ ํŠธ์— ๋งž๋Š” ๋ฒ„์ „์„ ์ง€์ •ํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค
  • ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐ ํ”„๋กœ์ ํŠธ๊ฐ€ ์š”๊ตฌํ•˜๋Š” ํŠน์ • ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3. ๋ชจ๋“ˆํ™”๋œ ๊ฐœ๋ฐœ

  • ํ”„๋กœ์ ํŠธ๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ๊ฐ ๋ชจ๋“ˆ์„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋Š” ๊ฐœ๋ฐœ์˜ ํšจ์œจ์„ฑ์„ ๋†’์ด๊ณ , ๋ฌธ์ œ๋ฅผ ๊ฒฉ๋ฆฌํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค.

1. ์„œ๋ธŒ๋ชจ๋“ˆ์„ GitHub์— ์˜ฌ๋ฆฌ๊ธฐ

์„œ๋ธŒ๋ชจ๋“ˆ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋จผ์ € ํ•ด๋‹น ๋ชจ๋“ˆ์„ ๋…๋ฆฝ์ ์ธ GitHub ์ €์žฅ์†Œ๋กœ ์ƒ์„ฑํ•ด์•ผ ํ•ด์š”. ์ด ์˜ˆ์ œ์—์„œ๋Š” Goom์ด๋ผ๋Š” ์„œ๋ธŒ๋ชจ๋“ˆ์„ ์„ค์ •ํ• ๊ฒŒ์š”.

 

1.1 ์„œ๋ธŒ๋ชจ๋“ˆ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

git clone https://github.com/yourusername/Goom.git
cd Goom
  • GitHub์—์„œ ์ƒˆ๋กœ์šด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑ (Goom์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑ)
  • ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ํด๋ก ํ•˜์—ฌ ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์„ค์ •

 

1.2 ์„œ๋ธŒ๋ชจ๋“ˆ์— ํŒŒ์ผ ์ถ”๊ฐ€

git add .
git commit -m "submodule commit"
git branch -M main
git push -u origin main
  • ์„œ๋ธŒ๋ชจ๋“ˆ์— ํ•„์š”ํ•œ ํŒŒ์ผ์„ ์ถ”๊ฐ€
  • ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ปค๋ฐ‹ํ•˜๊ณ  GitHub์— ํ‘ธ์‹œ

 

2. ํ”„๋กœ์ ํŠธ์— ์„œ๋ธŒ๋ชจ๋“ˆ ์ถ”๊ฐ€ํ•˜๊ธฐ

์„œ๋ธŒ๋ชจ๋“ˆ์„ ์„ค์ •ํ•œ ํ›„, ์ด๋ฅผ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์— ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, Project_A์™€ Project_B๋ผ๋Š” ๋‘ ๊ฐœ์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณผ๊ฒŒ์š”.

 

2.1 Project_A์™€ Project_B ๊ตฌ์กฐ

Project_A/
โ”œโ”€โ”€ Goom/ (์„œ๋ธŒ๋ชจ๋“ˆ)
โ”‚   โ””โ”€โ”€ utils.py
โ””โ”€โ”€ main.py

Project_B/
โ”œโ”€โ”€ Goom/ (์„œ๋ธŒ๋ชจ๋“ˆ)
โ”‚   โ””โ”€โ”€ utils.py
โ””โ”€โ”€ main.py
  • Project_A์™€ Project_B๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ๋‘ ๊ฐœ์˜ ํ”„๋กœ์ ํŠธ๋กœ
  • ๋‘ ํ”„๋กœ์ ํŠธ ๋ชจ๋‘ ๊ณตํ†ต์ ์œผ๋กœ Goom ์„œ๋ธŒ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•ด์š”

 

2.2 ์„œ๋ธŒ๋ชจ๋“ˆ ์ถ”๊ฐ€ ๋ฐ ์„ค์ •

Project_A์— ์„œ๋ธŒ๋ชจ๋“ˆ ์ถ”๊ฐ€

mkdir Project_A
cd Project_A
git init
git submodule add https://github.com/yourusername/Goom.git Goom

 

  • Goom ํด๋”๊ฐ€ ์„œ๋ธŒ๋ชจ๋“ˆ๋กœ ์ถ”๊ฐ€

 

Project_B์— ์„œ๋ธŒ๋ชจ๋“ˆ ์ถ”๊ฐ€

 

mkdir Project_B
cd Project_B
git init
git submodule add https://github.com/yourusername/Goom.git Goom
  • Goom ํด๋”๊ฐ€ ์„œ๋ธŒ๋ชจ๋“ˆ๋กœ ์ถ”๊ฐ€

 

3. ์„œ๋ธŒ๋ชจ๋“ˆ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

์„œ๋ธŒ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•œ ํ›„, ํ”„๋กœ์ ํŠธ์—์„œ ์„œ๋ธŒ๋ชจ๋“ˆ์„ ํ™œ์šฉํ•˜์—ฌ ๊ณตํ†ต๋œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

3.1 ์„œ๋ธŒ๋ชจ๋“ˆ ์ดˆ๊ธฐํ™” ๋ฐ ์—…๋ฐ์ดํŠธ

์„œ๋ธŒ๋ชจ๋“ˆ์„ ํด๋ก ํ•œ ํ›„์—๋Š” ์„œ๋ธŒ๋ชจ๋“ˆ์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค:

# Project_A ๋˜๋Š” Project_B์—์„œ ์‹คํ–‰
git submodule update --init --recursive

 

3.2 ์„œ๋ธŒ๋ชจ๋“ˆ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ฐ˜์˜

์„œ๋ธŒ๋ชจ๋“ˆ์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์„ ๊ฒฝ์šฐ, ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ํ”„๋กœ์ ํŠธ์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์–ด์š”

 

์„œ๋ธŒ๋ชจ๋“ˆ์—์„œ ์ˆ˜์ • ํ›„ ํ‘ธ์‹œ

cd Goom
# ~~ ์„œ๋ธŒ๋ชจ๋“ˆ์˜ ํŒŒ์ผ ์ˆ˜์ •
git .
git commit -m "Add new operation"
git push -u origin main

 

์„œ๋ธŒ๋ชจ๋“ˆ ์—…๋ฐ์ดํŠธ

cd ..
git submodule update --remote Goom
git add Goom
git commit -m "Update Goom submodule to latest commit"
git push -u origin main

 


 

์ด์ฒ˜๋Ÿผ GitHub ์„œ๋ธŒ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์—์„œ ๊ณตํ†ต๋œ ์ฝ”๋“œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”. ์„œ๋ธŒ๋ชจ๋“ˆ์„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉด์„œ๋„, ํ•„์š”ํ•œ ํ”„๋กœ์ ํŠธ์— ํ†ตํ•ฉํ•˜์—ฌ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์ง€์š”.

๋ฐ˜์‘ํ˜•