Skip to content

Latest commit

Β 

History

History
146 lines (102 loc) Β· 5.62 KB

File metadata and controls

146 lines (102 loc) Β· 5.62 KB

πŸš€ Node.js Git Workflow Automation Scripts

자주 μ‚¬μš©ν•˜λŠ” Git λͺ…λ Ήμ–΄(λΆ„κΈ° 생성, μ‚­μ œ, 리베이슀, ν‘Έμ‹œ λ“±)λ₯Ό μžλ™ν™”ν•˜μ—¬ 개발 생산성을 높이기 μœ„ν•œ Node.js 기반의 μ»€μŠ€ν…€ Git 슀크립트 λͺ¨μŒμž…λ‹ˆλ‹€.

λ³΅μž‘ν•œ 브랜치 μ „λž΅ μ†μ—μ„œλ„ branches.json을 톡해 브랜치 κ°„μ˜ λΆ€λͺ¨-μžμ‹ 관계λ₯Ό μΆ”μ ν•˜κ³ , μ•ˆμ „ν•œ Rebase와 λͺ¨λ“ˆ 일괄 μ΄ˆκΈ°ν™” λ“±μ˜ κ³ κΈ‰ κΈ°λŠ₯을 κ°„νŽΈν•˜κ²Œ μ œκ³΅ν•©λ‹ˆλ‹€.


🏁 Quick Start

운영체제 ν™˜κ²½μ— λ§žλŠ” 탭을 ν™•μΈν•˜μ—¬ μ„€μΉ˜λ₯Ό μ§„ν–‰ν•˜μ„Έμš”.

🍎 macOS / Linux ν™˜κ²½

macOS와 LinuxλŠ” 슀크립트 νŒŒμΌμ— 직접 μ‹€ν–‰ κΆŒν•œμ„ λΆ€μ—¬ν•˜μ—¬ μ‰˜ ν™˜κ²½κ³Ό λ§€λ„λŸ½κ²Œ 연동할 수 μžˆμŠ΅λ‹ˆλ‹€.

1. μ €μž₯μ†Œ 클둠 및 κΆŒν•œ λΆ€μ—¬

cd ~
git clone [https://github.com/Jwhyee/git-scripts.git](https://github.com/Jwhyee/git-scripts.git)
chmod +x ~/git-scripts/*.js

2. .gitconfig alias 등둝

git config --global --edit

μ•„λž˜ λ‚΄μš©μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

[alias]
    r = "!~/git-scripts/rebase.js"
    s = "!~/git-scripts/switch.js"
    p = "!~/git-scripts/push.js"
    rp = "!~/git-scripts/rp.js"
    b = "!~/git-scripts/branch.js"
    clear = "!~/git-scripts/clear.js"

πŸͺŸ Windows ν™˜κ²½

Windows의 CMDλ‚˜ PowerShell은 파일 μ΅œμƒλ‹¨μ˜ Shebang(#!/usr/bin/env node)을 λ„€μ΄ν‹°λΈŒλ‘œ μΈμ‹ν•˜μ§€ λͺ»ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ Git Alias μ„€μ • μ‹œ node λͺ…λ Ήμ–΄λ₯Ό λͺ…μ‹œμ μœΌλ‘œ ν˜ΈμΆœν•˜λŠ” 것이 κ°€μž₯ μ•ˆμ „ν•©λ‹ˆλ‹€.

1. μ €μž₯μ†Œ 클둠 (Git Bash λ˜λŠ” PowerShell μ‚¬μš©)

cd ~
git clone [https://github.com/Jwhyee/git-scripts.git](https://github.com/Jwhyee/git-scripts.git)

2. .gitconfig μ—μΌλ¦¬μ–΄μŠ€ 등둝

git config --global --edit

μ•„λž˜ λ‚΄μš©μ„ μΆ”κ°€ν•©λ‹ˆλ‹€. (경둜 확인 ν•„μˆ˜)

[alias]
    r = "!node ~/git-scripts/rebase.js"
    s = "!node ~/git-scripts/switch.js"
    p = "!node ~/git-scripts/push.js"
    rp = "!node ~/git-scripts/rp.js"
    b = "!node ~/git-scripts/branch.js"
    clear = "!node ~/git-scripts/clear.js"

πŸ“š λͺ…λ Ήμ–΄ μš”μ•½ (Command Reference)

λͺ…λ Ήμ–΄ μ˜΅μ…˜/인자 μ„€λͺ…
git b --list 둜컬 브랜치 λͺ©λ‘μ„ μ‘°νšŒν•©λ‹ˆλ‹€.
-d <keyword> ν‚€μ›Œλ“œκ°€ ν¬ν•¨λœ 둜컬 λΈŒλžœμΉ˜μ™€ 기둝을 일괄 μ‚­μ œν•©λ‹ˆλ‹€.
git s <branch> ν•΄λ‹Ή 둜컬 브랜치둜 μ „ν™˜(Checkout)ν•©λ‹ˆλ‹€.
-c <branch> ν˜„μž¬ 브랜치λ₯Ό λΆ€λͺ¨λ‘œ μ‚Όμ•„ μƒˆ 브랜치λ₯Ό μƒμ„±ν•˜κ³  μ „ν™˜ν•©λ‹ˆλ‹€.
git r this ν˜„μž¬ 브랜치λ₯Ό κΈ°μ€€μœΌλ‘œ Fetch & Rebaseλ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.
parent git s -c둜 기둝된 λΆ€λͺ¨ 브랜치 κΈ°μ€€μœΌλ‘œ Rebaseλ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.
all ν˜„μž¬ 및 ν•˜μœ„ Git μ €μž₯μ†Œ 전체λ₯Ό μˆœνšŒν•˜λ©° Rebaseλ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.
git p this ν˜„μž¬ 브랜치λ₯Ό 원격 μ €μž₯μ†Œ(Origin)에 Push ν•©λ‹ˆλ‹€.
this -f 원격 μ €μž₯μ†Œμ— Force Pushλ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.
git rp this [-f] ν˜„μž¬ 브랜치 κΈ°μ€€μœΌλ‘œ Rebase μ™„λ£Œ ν›„ μ¦‰μ‹œ Pushλ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.
git clear (μ—†μŒ) ν”„λ‘œμ νŠΈ λ‚΄ λͺ¨λ“  Git μ €μž₯μ†Œμ˜ 변경사항을 Hard Reset 및 Clean ν•©λ‹ˆλ‹€.

πŸ“– 상세 μ‚¬μš©λ²• (Detailed Usage)

1️⃣ git b : 브랜치 일괄 정리

μ •κ·œμ‹μ΄λ‚˜ λ³΅μž‘ν•œ μ‰˜ λͺ…λ Ήμ–΄ 없이, νŠΉμ • ν‚€μ›Œλ“œκ°€ ν¬ν•¨λœ 브랜치λ₯Ό μ•ˆμ „ν•˜κ²Œ μ°Ύμ•„ μ§€μ›λ‹ˆλ‹€.

  • μ‚¬μš© μ˜ˆμ‹œ: git b -d feat
  • λ™μž‘: 이름에 featκ°€ ν¬ν•¨λœ λͺ¨λ“  브랜치λ₯Ό μ°Ύμ•„ μ‚­μ œν•˜κ³ , λ‚΄λΆ€ 좔적 파일(branches.json)μ—μ„œλ„ ν•΄λ‹Ή 내역을 κΉ”λ”ν•˜κ²Œ μ œκ±°ν•©λ‹ˆλ‹€.

2️⃣ git s : 브랜치 생성과 관계 좔적

λ‹¨μˆœν•œ 브랜치 μ „ν™˜μ„ λ„˜μ–΄, μƒˆ 브랜치 생성 μ‹œ νŒŒμƒλœ 좜처(Parent)λ₯Ό μžλ™μœΌλ‘œ κΈ°λ‘ν•©λ‹ˆλ‹€.

  • μ‚¬μš© μ˜ˆμ‹œ: git s -c feature-login
  • λ™μž‘: ν˜„μž¬ μœ„μΉ˜ν•œ 브랜치λ₯Ό 기반으둜 feature-login을 λ§Œλ“€κ³ , 이 λ‘˜μ˜ 관계λ₯Ό branches.json에 μ €μž₯ν•©λ‹ˆλ‹€. 이후 git r parent λͺ…λ Ήμ–΄μ˜ 핡심 μ»¨ν…μŠ€νŠΈλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

3️⃣ git r : μ§€λŠ₯ν˜• 리베이슀

λ‹¨μˆœν•œ pullμ΄λ‚˜ rebase λͺ…λ Ήμ–΄μ˜ ν•œκ³„λ₯Ό κ·Ήλ³΅ν•©λ‹ˆλ‹€.

  • git r parent: λΈŒλžœμΉ˜κ°€ μ—¬λŸ¬ λ‹¨κ³„λ‘œ λ»—μ–΄ λ‚˜κ°„ 상황(예: main -> dev -> feature-A -> feature-B)μ—μ„œλ„, μƒμœ„ λΈŒλžœμΉ˜κ°€ μ•„λ‹Œ μžμ‹ μ΄ νŒŒμƒλœ μ •ν™•ν•œ 직계 λΆ€λͺ¨ 브랜치λ₯Ό μ°Ύμ•„ μ΅œμ‹ ν™”ν•©λ‹ˆλ‹€.
  • git r all: λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€(MSA) ν˜•νƒœλ‚˜ μ„œλΈŒλͺ¨λ“ˆ λ“± μ—¬λŸ¬ .git 폴더가 μ‘΄μž¬ν•˜λŠ” κ΅¬μ‘°μ—μ„œ λͺ¨λ“  μ €μž₯μ†Œλ₯Ό ν•œ λ²ˆμ— μ΅œμ‹  μƒνƒœλ‘œ λ™κΈ°ν™”ν•©λ‹ˆλ‹€.

4️⃣ git rp : Rebase & Push μ›Œν¬ν”Œλ‘œμš°

μž‘μ—…ν•œ 내역을 μ΅œμ‹ ν™”ν•˜κ³  리λͺ¨νŠΈμ— λ°˜μ˜ν•˜λŠ” κ°€μž₯ λΉˆλ²ˆν•œ 과정을 λ‹¨μΆ•ν•©λ‹ˆλ‹€.

  • μ•ˆμ „μž₯치: Rebase κ³Όμ •μ—μ„œ 좩돌(Conflict)이 λ°œμƒν•˜λ©΄ μ¦‰μ‹œ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ€‘λ‹¨ν•˜μ—¬ 잘λͺ»λœ μ½”λ“œκ°€ Pushλ˜λŠ” 것을 λ°©μ§€ν•©λ‹ˆλ‹€.

πŸ’‘ ꢌμž₯ μ›Œν¬ν”Œλ‘œμš° (Best Practice)

이 슀크립트 λͺ¨μŒμ„ ν™œμš©ν•˜μ—¬ λ‹€μŒκ³Ό 같은 λΉ λ₯΄κ³  μ•ˆμ „ν•œ 개발 사이클을 ꡬ좕할 수 μžˆμŠ΅λ‹ˆλ‹€.

  1. μž‘μ—… μ‹œμž‘: λΆ€λͺ¨ λΈŒλžœμΉ˜μ—μ„œ μƒˆλ‘œμš΄ μž‘μ—… 브랜치 생성
git s -c feature-new-ui
  1. μ½”λ“œ μž‘μ„± 및 컀밋: (μ½”λ“œ μˆ˜μ • ν›„ git commit)
  2. μ΅œμ‹ ν™” 및 반영: λΆ€λͺ¨ 브랜치의 μ΅œμ‹  변경사항을 받아와 λ¦¬λ² μ΄μŠ€ν•œ λ’€ ν‘Έμ‹œ
git r parent
git p this

(λ˜λŠ” ν•œ λ²ˆμ— 처리)

git rp this
  1. μž‘μ—… μ™„λ£Œ ν›„ 정리: 병합 μ™„λ£Œλœ 브랜치 일괄 μ‚­μ œ
git b -d feature-new-ui