tool/git

GitHub Repository ํ†ตํ•ฉ

dddzr 2025. 2. 23. 17:46

๐Ÿ“Œ GitHub Repository ํ†ตํ•ฉ ๊ด€๋ฆฌ

MSA์˜ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋“ค์ด ๋ณ„๋„๋กœ ์ƒ์„ฑ๋˜์–ด ๋ณด๊ธฐ์—๋„ ๋ณต์žกํ•˜๊ณ  ์„œ๋น„์Šค๊ฐ„ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜๊ฐ€ ์—†์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ•˜๋‚˜์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋กœ ๋ณด์ด๊ฒŒ ํ•˜๊ณ ์‹ถ์—ˆ๋‹ค.

 

์š”๊ตฌ์‚ฌํ•ญ์€ ์•„๋ž˜์™€ ๊ฐ™์Œ.

  • ๊ฐ ์„œ๋น„์Šค(์ฃผ๋ฌธ, ์ƒํ’ˆ, ์œ ์ €)๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์— ํฌํ•จ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ.
  • ์ปค๋ฐ‹์€ ๋”ฐ๋กœ ํ•˜๊ณ  ๋ ˆํฌ์ง€ํ† ๋ฆฌ ํ™”๋ฉด์—์„œ๋Š” 1๊ฐœ์˜ ๋ฉ”์ธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์ฒ˜๋Ÿผ ๋ณด์ด๊ธธ ์›ํ•จ. (๊ฐœ๋ณ„ ์„œ๋น„์Šค๋Š” privateํ•ด๋‘ .)

 

๐Ÿ”ฅ ์„œ๋ธŒ๋ชจ๋“ˆ vs ์„œ๋ธŒํŠธ๋ฆฌ ๋น„๊ต

๋ ˆํฌ์ง€ํ† ๋ฆฌ ํ†ตํ•ฉ ๋ฐฉ์‹์€ ์ฃผ๋กœ 2๊ฐ€์ง€๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋“ฏ.

  ์„œ๋ธŒ๋ชจ๋“ˆ (Submodule) ์„œ๋ธŒํŠธ๋ฆฌ (Subtree)
๊ตฌ์„ฑ ๋ฐฉ์‹ ์™ธ๋ถ€ ๋ ˆํฌ๋ฅผ ์ฐธ์กฐ (ํฌ์ธํ„ฐ๋งŒ ์ €์žฅ) ์™ธ๋ถ€ ๋ ˆํฌ๋ฅผ ์ง์ ‘ ํฌํ•จ (ํŒŒ์ผ์ด ํ†ต์งธ๋กœ ์ถ”๊ฐ€๋จ)
์ปค๋ฐ‹ ๊ด€๋ฆฌ ์„œ๋ธŒ๋ชจ๋“ˆ ๋‚ด๋ถ€์—์„œ ๊ฐœ๋ณ„ ์ปค๋ฐ‹ ํ•„์š” ๋ฉ”์ธ ๋ ˆํฌ์—์„œ ํ•จ๊ป˜ ์ปค๋ฐ‹ ๊ฐ€๋Šฅ
๋…๋ฆฝ์„ฑ ์„œ๋ธŒ๋ชจ๋“ˆ ๊ฐœ๋ณ„ ๊ด€๋ฆฌ, ๋…๋ฆฝ์„ฑ ์œ ์ง€ ๋ฉ”์ธ ๋ ˆํฌ์— ํฌํ•จ๋˜์–ด ๋…๋ฆฝ์„ฑ์ด ๋‚ฎ์Œ
์—…๋ฐ์ดํŠธ git submodule update๋กœ ๋™๊ธฐํ™” ํ•„์š” git subtree pull๋กœ ๋™๊ธฐํ™” ๊ฐ€๋Šฅ
์‚ฌ์šฉ ํŽธ์˜์„ฑ ๊ด€๋ฆฌ๊ฐ€ ๋ฒˆ๊ฑฐ๋กญ๊ณ  ์‹ค์ˆ˜ํ•˜๊ธฐ ์‰ฌ์›€ โš ๏ธ ๋น„๊ต์  ์‰ฌ์›€ โœ…
์ ํ•ฉํ•œ ์ƒํ™ฉ ๊ฐœ๋ณ„ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์šด์˜๋  ๋•Œ ํ•˜๋‚˜์˜ ๋ ˆํฌ์—์„œ ์ „์ฒด๋ฅผ ํ•จ๊ป˜ ๊ด€๋ฆฌํ•  ๋•Œ

โญ MSA์— ์ ํ•ฉํ•œ ๋ฐฉ์‹์€? -> ์„œ๋ธŒํŠธ๋ฆฌ(Subtree)

๋”๋ณด๊ธฐ

1๏ธโƒฃ ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ๋” ๊ฐ„ํŽธํ•จ

  • ์„œ๋ธŒ๋ชจ๋“ˆ์€ ๊ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ git submodule update --init์„ ํ•ด์•ผ ํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ์Œ.
  • ์„œ๋ธŒํŠธ๋ฆฌ๋Š” ๊ทธ๋ƒฅ ํด๋ก ํ•˜๋ฉด ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธ๋ฆฌํ•จ.

2๏ธโƒฃ ๋ฉ”์ธ ๋ ˆํฌ์—์„œ ์ „์ฒด ๊ด€๋ฆฌ ๊ฐ€๋Šฅ

  • ์„œ๋ธŒํŠธ๋ฆฌ๋Š” ์„œ๋ธŒ๋ชจ๋“ˆ์ฒ˜๋Ÿผ ์ฐธ์กฐ ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ, ์‹ค์ œ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜๋ฏ€๋กœ
    → ํ•œ ๋ฒˆ์˜ ์ปค๋ฐ‹์œผ๋กœ ๋ชจ๋“  ์„œ๋น„์Šค์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Œ!
  • MSA ์„œ๋น„์Šค ๊ฐ„ ๋ฒ„์ „ ๋™๊ธฐํ™”๊ฐ€ ์‰ฌ์›€ (์„œ๋ธŒ๋ชจ๋“ˆ์€ ๊ฐ ์„œ๋ธŒ ๋ ˆํฌ๋ฅผ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•จ).

3๏ธโƒฃ ์™ธ๋ถ€ ํ”„๋กœ์ ํŠธ์— ์‰ฝ๊ฒŒ ํฌํ•จ ๊ฐ€๋Šฅ → git subtree add๋กœ ์‰ฝ๊ฒŒ ํ†ตํ•ฉ ๋ฐ ์ œ๊ฑฐ, ์„œ๋ธŒ๋ชจ๋“ˆ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋ฒˆ๊ฑฐ๋กœ์›€

  • ์„œ๋ธŒ๋ชจ๋“ˆ์€ ๋…๋ฆฝ์„ฑ์ด ๋†’์ง€๋งŒ, ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์›€ (ํด๋ก  ํ›„ submodule update ํ•„์š”).
  • ์„œ๋ธŒํŠธ๋ฆฌ๋Š” ๋‹จ์ผ ๋ ˆํฌ์ฒ˜๋Ÿผ ๋ณด์ด๋ฉด์„œ๋„ ๋…๋ฆฝ์„ฑ ์œ ์ง€๊ฐ€ ๊ฐ€๋Šฅํ•ด์„œ ์šด์˜์ด ํŽธ๋ฆฌํ•จ.

 

๐Ÿ“Œ SubTree ์‚ฌ์šฉ๋ฒ•

โœ… 1. ๋ฉ”์ธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋กœ ๋งŒ๋“ค๊ธฐ

๊นƒํ—ˆ๋ธŒ์—์„œ ์ƒˆ ๋ ˆํฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋กœ์ปฌ๊ณผ ์—ฐ๊ฒฐํ•˜์ž.

Msa-ecommerce๋ผ๋Š” ๋ฉ”์ธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

cd msa-ecommerce
git init
git remote add origin https://github.com/{your-username}/msa-ecommerce.git

๋˜๋Š” github ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ƒ์„ฑํ•œ ๋‹ค์Œ cloneํ•ด์˜ค๊ธฐ!!

 

โœ… 2. ์„œ๋ธŒํŠธ๋ฆฌ ์ถ”๊ฐ€ํ•˜๊ธฐ (subtree add)

๊ฐ MSA ์„œ๋น„์Šค(order-service, product-service, user-service ๋“ฑ)๋ฅผ ์„œ๋ธŒํŠธ๋ฆฌ๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.

git subtree add --prefix={child repository name} {child git URL} {branch}

git subtree add --prefix=gateway https://github.com/dddz/gateway.git main --squash
  • --prefix=์„œ๋น„์Šค๋ช…: ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ์ €์žฅํ•  ํด๋”
  • --squash: ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ํ•˜๋‚˜๋กœ ํ•ฉ์ณ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€

 

โœ… 3. ๊ฐ ์„œ๋น„์Šค ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๊ฐ€์ ธ์˜ค๊ธฐ (subtree pull)

git subtree pull --prefix={child repository name} {child git URL} {branch} --squash

 

โญ Subtree pull ์ž๋™ํ™” ( GitHub Actions ์ด์šฉ )

๋”๋ณด๊ธฐ

์ž๋™์œผ๋กœ subtree ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ฐ€์ง€๊ณ  ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด GitHub Actions ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค!!

 

1๏ธโƒฃ GitHub์— PERSONAL_ACCESS_TOKEN ์ถ”๊ฐ€

  1. GitHub → Settings → Developer Settings → Personal access tokens
  2. ์ƒˆ๋กœ์šด ํ† ํฐ์„ ๋งŒ๋“ค๊ณ , repo ๊ถŒํ•œ ๋ถ€์—ฌ
  3. GitHub Secrets์— PERSONAL_ACCESS_TOKEN ์ด๋ฆ„์œผ๋กœ ์ €์žฅ

 

2๏ธโƒฃ ์„ค์ • ํŒŒ์ผ ์ƒ์„ฑ
๋ฉ”์ธ ๋ ˆํฌ์˜ .github/workflows/update-subtree.yml ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ , ์•„๋ž˜ ๋‚ด์šฉ์„ ์ถ”๊ฐ€!

name: Update Subtree
on:
  schedule:
    - cron: "0 0 * * *"  # ๋งค์ผ ์ž์ •(UTC)์— ์‹คํ–‰ (ํ•œ๊ตญ ์‹œ๊ฐ„ ์˜ค์ „ 9์‹œ)
  push:
    branches:
      - main  # main ๋ธŒ๋žœ์น˜์— ๋ณ€๊ฒฝ์ด ์žˆ์„ ๋•Œ๋„ ์‹คํ–‰
      
jobs:
  update-subtree:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3
        with:
          token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
      - name: Pull latest subtree changes
        run: |
          git config --global user.name "github-actions"
          git config --global user.email "actions@github.com"
          git checkout main
          git subtree pull --prefix=services/service-A https://github.com/your-org/service-A.git main --squash

          git add .
          git commit -m "Auto-update service-A subtree"
          git push origin main

 

๐Ÿ“Œ์ฝ”๋“œ ์„ค๋ช…

โœ… ์ž๋™ ์‹คํ–‰ ํŠธ๋ฆฌ๊ฑฐ ์„ค์ • (on:)

  • schedule: → ๋งค์ผ ์ž์ •(UTC, ํ•œ๊ตญ ์‹œ๊ฐ„ ์˜ค์ „ 9์‹œ) ์— ์ž๋™ ์‹คํ–‰
  • push:  main ๋ธŒ๋žœ์น˜์— ์ปค๋ฐ‹์ด ์ƒ๊ธธ ๋•Œ ์‹คํ–‰

 

โœ… GitHub Actions ์‹คํ–‰ ํ™˜๊ฒฝ (jobs:)

  • runs-on: ubuntu-latest → GitHub Actions๊ฐ€ Ubuntu ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋จ

 

โœ… Git ์„œ๋ธŒํŠธ๋ฆฌ ์ตœ์‹  ์—…๋ฐ์ดํŠธ (git subtree pull)


3๏ธโƒฃ ๋ฉ”์ธ ๋ ˆํฌ์— ํ‘ธ์‹œํ•˜๋ฉด ์ž๋™์œผ๋กœ ์‹คํ–‰๋จ!

 

โœ… 4. ๊ฐœ๋ณ„ ์„œ๋น„์Šค ์ปค๋ฐ‹์„ ์›๊ฒฉ์œผ๋กœ ํ‘ธ์‹œํ•˜๊ธฐ

git subtree push --prefix={child repository name} {child git URL} {branch}

 

โœ… 5. ์„œ๋ธŒํŠธ๋ฆฌ ์ œ๊ฑฐ ๋ฐฉ๋ฒ• (git rm)

git rm -r --cached order
rm -rf order
git commit -m "Removed order service from subtree"

 

โญ ์ผ๋ฐ˜์ ์ธ ์„œ๋ธŒํŠธ๋ฆฌ ๊ฐœ๋ฐœ ๋ฐฉ์‹

1๏ธโƒฃ ๊ฐ ์„œ๋น„์Šค(์„œ๋ธŒ ๋ ˆํฌ)๋Š” ๋”ฐ๋กœ ํด๋ก ํ•ด์„œ ๊ฐœ๋ฐœ & ์ปค๋ฐ‹

๐Ÿ”น ๊ฐ ์„œ๋น„์Šค๋Š” ๋…๋ฆฝ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ˆ๊นŒ, ์›๋ณธ ์„œ๋ธŒ ๋ ˆํฌ์—์„œ ์ง์ ‘ ๊ฐœ๋ฐœํ•˜๊ณ  ์ปค๋ฐ‹!
๐Ÿ”น ์›๋ณธ ์„œ๋ธŒ ๋ ˆํฌ์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ƒ๊ธฐ๋ฉด ๋ฉ”์ธ ๋ ˆํฌ์—๋„ ๋ฐ˜์˜ํ•ด์•ผ ํ•จ.

git clone https://github.com/your-org/service-A.git
cd service-A
# ๊ฐœ๋ฐœ ํ›„ ์ปค๋ฐ‹ & ํ‘ธ์‹œ
git add .
git commit -m "์„œ๋น„์Šค A ๊ธฐ๋Šฅ ์ถ”๊ฐ€"
git push origin main

2๏ธโƒฃ ๋ฉ”์ธ ๋ ˆํฌ์— ๋ฐ˜์˜ํ•˜๋ ค๋ฉด?

๐Ÿ”น ๋ฉ”์ธ ๋ ˆํฌ์—์„œ๋„ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ pull ํ•ด์„œ ์ตœ์‹ ํ™”ํ•ด์•ผ ํ•จ.

cd msa-ecommerce
git subtree pull --prefix=services/service-A https://github.com/your-org/service-A.git main --squash
git add .
git commit -m "์„œ๋น„์Šค A ์ตœ์‹ ํ™”"
git push origin main