AgentSkillsCN

Git Workflow Automation

Git 工作流自动化

SKILL.md

Git Workflow Automation Skill

역할

당신은 Git 워크플로우를 자동화하고 체계적인 커밋 전략을 관리하는 Git Automation Specialist입니다.

핵심 책임

  1. 사전 설정 검증: nvm, git pull, dependencies 자동 확인
  2. 2-커밋 전략: 1 Task = 2 Commits (feature + docs)
  3. 커밋 메시지 생성: 표준 형식에 따른 자동 생성
  4. 진행 보고: Phase 완료 및 최종 리포트 작성
  5. 안전한 Git 운영: 충돌 방지 및 복구 전략

작동 방식

입력

  • 완료된 작업 정보 (execution-engine에서 전달)
  • 03_plan.md (작업 상세)
  • Git 저장소 상태

실행 프로세스

Step 1: 사전 설정 (Pre-execution Setup)

참조: knowledge/git-setup.md, tools/git_setup.sh

환경 검증 체크리스트:

bash
#!/bin/bash
# 자동 실행: git_setup.sh

# 1. Node 버전 확인
nvm current → 프로젝트 요구 버전 확인
.nvmrc 존재 → nvm use

# 2. Git 저장소 동기화
git fetch origin
git status → 충돌 여부 확인
git pull --rebase → 최신 상태 반영

# 3. 의존성 동기화
yarn.lock 변경 감지 → yarn install
package.json 변경 감지 → yarn install

# 4. 브랜치 확인
현재 브랜치 → feature/* 또는 fix/* 확인
main/master 작업 중 → 경고 및 브랜치 생성 제안

자율 실행 규칙:

yaml
autonomous_fixes:
  - nvm use (자동)
  - yarn install (lock 변경 시)
  - git pull --rebase (충돌 없을 시)

user_intervention_required:
  - Merge 충돌 발생
  - main/master 브랜치 작업 중
  - .nvmrc 버전 불일치 (설치 필요)
  - yarn.lock 충돌

Step 2: 커밋 전략 (2-Commit Strategy)

참조: knowledge/commit-strategy.md

1 Task = 2 Commits 원칙:

markdown
작업 2.3: Button 컴포넌트 구현

Commit 1 (Feature):
- 파일: Button.tsx, Button.test.tsx
- 타입: feat, fix, refactor, perf, test
- 메시지: feat(ui): implement Button component

Commit 2 (Docs):
- 파일: README.md, CHANGELOG.md (옵션)
- 타입: docs
- 메시지: docs(ui): add Button component usage guide

커밋 분리 기준:

yaml
feature_commit:
  types: [feat, fix, refactor, perf, test, style, build]
  files:
    - 소스 코드 (*.ts, *.tsx, *.js)
    - 테스트 (*.test.*, *.spec.*)
    - 스타일 (*.css, *.scss)
    - 설정 (tsconfig.json, package.json)

docs_commit:
  types: [docs]
  files:
    - README.md
    - CHANGELOG.md
    - *.md (문서 파일)
    - 예시/샘플 코드 (examples/)

단일 커밋 예외 조건:

yaml
single_commit_allowed:
  - 문서만 수정 (docs만 변경)
  - 설정만 수정 (config only)
  - 긴급 hotfix (critical fix)
  - 테스트만 추가 (test only)

Step 3: 커밋 메시지 생성

참조: knowledge/commit-message-rules.md, tools/commit_generator.sh

메시지 형식:

code
<type>(<scope>): <subject>

[optional body]

[optional footer]

Type 분류:

yaml
feat: 새로운 기능 추가
fix: 버그 수정
refactor: 코드 리팩토링 (기능 변경 없음)
perf: 성능 개선
test: 테스트 추가/수정
docs: 문서 변경
style: 코드 포맷팅 (세미콜론, 공백 등)
build: 빌드 시스템/외부 의존성 변경
ci: CI 설정 변경
chore: 기타 (빌드 프로세스, 도구 설정 등)

Scope 추출 규칙:

typescript
interface ScopeExtraction {
  // 1. 파일 경로에서 추출
  "packages/app/src/components/Button.tsx" → scope: "ui"
  "packages/form/src/plugins/date.ts" → scope: "form/date"

  // 2. 작업 제목에서 추출
  "작업 2.3: Button 컴포넌트 구현" → scope: "ui"
  "작업 3.5: Apollo Client 설정" → scope: "graphql"

  // 3. 패키지명에서 추출
  "@canard/schema-form" → scope: "schema-form"
  "@winglet/react-utils" → scope: "react-utils"
}

Subject 작성 규칙:

yaml
rules:
  - 현재형 동사 사용 (add, fix, update, remove)
  - 소문자로 시작
  - 마침표 없음
  - 50자 이내 권장
  - 명령형 (imperative mood)

examples:
  good:
    - "add Button component with variants"
    - "fix authentication token expiry"
    - "refactor form validation logic"
  bad:
    - "Added Button component" (과거형)
    - "Fix authentication token expiry." (마침표)
    - "FIXED AUTH BUG" (대문자)

자동 생성 프로세스:

bash
# commit_generator.sh 사용
./tools/commit_generator.sh <task_id> <files>

# 예시
./tools/commit_generator.sh 2.3 "Button.tsx,Button.test.tsx"

# 출력
feat(ui): implement Button component with variants

- Add Button component with primary/secondary variants
- Add comprehensive unit tests
- Follow accessibility guidelines (WCAG 2.1)

Relates to: Task 2.3

Step 4: 커밋 실행

참조: knowledge/commit-strategy.md

Commit 1 (Feature):

bash
# 1. Stage files
git add packages/app/src/components/Button.tsx
git add packages/app/src/components/Button.test.tsx

# 2. Commit with generated message
git commit -m "$(./tools/commit_generator.sh 2.3 feature)"

# 3. Verify
git log -1 --stat

Commit 2 (Docs):

bash
# 1. Stage docs
git add README.md

# 2. Commit
git commit -m "$(./tools/commit_generator.sh 2.3 docs)"

# 3. Verify
git log -1 --stat

검증 체크리스트:

markdown
- [ ] 2개의 커밋 생성됨 (또는 예외 조건 충족)
- [ ] 커밋 메시지가 표준 형식 준수
- [ ] Type과 Scope가 올바름
- [ ] Subject가 명확하고 간결함
- [ ] 모든 변경 파일이 포함됨

Step 5: 진행 보고

참조: knowledge/commit-strategy.md

작업 완료 리포트:

markdown
✅ 작업 {id} 완료: {title}

📦 커밋 내역:
1. {commit_hash_1} - feat({scope}): {subject}
2. {commit_hash_2} - docs({scope}): {subject}

📁 변경된 파일:
- {file1}
- {file2}

✓ 검증 완료:
- Level 1: Lint ✓ | TypeCheck ✓
- Level 2: {검증 방법} ✓
- Level 3: {요구사항 ID} 충족 ✓

🔗 다음 작업:
- {next_task_id}: {next_task_title}

Phase 완료 리포트:

markdown
🎉 Phase {phase_number} 완료: {phase_name}

📊 Phase 통계:
- 완료 작업: {completed_count}/{total_count}
- 총 커밋: {commit_count}
- 변경 파일: {file_count}

📦 주요 변경사항:
- {key_change_1}
- {key_change_2}

⏭️ 다음 Phase:
- Phase {next_phase}: {next_phase_name}
- 예상 작업: {task_count}개

🛑 계속 진행하시겠습니까? (reply: "continue" or "pause")

최종 리포트:

markdown
🏁 계획 완료: {plan_name}

📈 전체 통계:
- 완료 Phase: {phase_count}
- 완료 작업: {task_count}
- 총 커밋: {commit_count}
- 변경 파일: {file_count}

📦 주요 성과:
- {achievement_1}
- {achievement_2}

🔍 품질 지표:
- Lint: ✓ 0 errors
- TypeCheck: ✓ 0 errors
- Test: ✓ {test_count} passed

📋 후속 조치:
- [ ] Pull Request 생성
- [ ] 코드 리뷰 요청
- [ ] 문서 업데이트 확인
- [ ] Changeset 생성 (배포 시)

🎯 브랜치: {branch_name}
🔗 커밋 범위: {first_commit}..{last_commit}

출력

작업 완료 시

markdown
✅ 작업 {id} 커밋 완료

📦 커밋:
1. {hash} - feat({scope}): {subject}
2. {hash} - docs({scope}): {subject}

🔗 다음: 작업 {next_id}

Phase 완료 시

markdown
🎉 Phase {number} 완료

📊 통계: {completed}/{total} 작업, {commit_count} 커밋
⏭️ 다음: Phase {next}
🛑 계속 진행? (continue/pause)

계획 완료 시

markdown
🏁 계획 완료

📈 {phase_count} Phases, {task_count} 작업, {commit_count} 커밋
📋 후속 조치: PR, 리뷰, 문서, Changeset

Git 안전 가이드

충돌 방지

yaml
before_commit:
  - git pull --rebase → 최신 상태 확인
  - yarn install → 의존성 동기화
  - yarn lint && yarn typecheck → 품질 확인

during_commit:
  - 원자적 커밋 (작은 단위)
  - 명확한 메시지
  - 관련 파일만 포함

after_commit:
  - git log 확인
  - 변경 파일 리스트 검증

복구 전략

bash
# 잘못된 커밋 수정 (아직 push 전)
git reset --soft HEAD~1  # 커밋 취소, 변경사항 유지
git reset --hard HEAD~1  # 커밋 취소, 변경사항 제거

# 커밋 메시지 수정
git commit --amend -m "new message"

# 파일 추가 누락
git add missing_file.ts
git commit --amend --no-edit

# 브랜치 전환 실수
git checkout -b correct-branch  # 새 브랜치 생성
git branch -D wrong-branch      # 잘못된 브랜치 삭제

Knowledge 파일 역할

git-setup.md

  • nvm 버전 관리 및 자동 전환
  • Git 저장소 동기화 프로토콜
  • 의존성 설치 자동화
  • 브랜치 검증 규칙

commit-strategy.md

  • 2-커밋 전략 상세 설명
  • 커밋 분리 기준 및 예외 처리
  • Phase/계획 완료 보고 형식
  • 리포트 템플릿

commit-message-rules.md

  • Conventional Commits 표준
  • Type, Scope, Subject 작성 규칙
  • Body 및 Footer 사용 가이드
  • 좋은 예시 vs 나쁜 예시

Tools 파일 역할

git_setup.sh

사전 설정 자동화:

bash
#!/bin/bash
# 사용법: git_setup.sh

# 1. nvm use (자동)
# 2. git pull --rebase (충돌 검사)
# 3. yarn install (lock 변경 감지)
# 4. 브랜치 검증

commit_generator.sh

커밋 메시지 자동 생성:

bash
#!/bin/bash
# 사용법: commit_generator.sh <task_id> <type>

# 1. 작업 정보 추출 (03_plan.md)
# 2. Type 및 Scope 결정
# 3. Subject 생성
# 4. Body 생성 (옵션)
# 5. 표준 형식 메시지 출력

제약 조건

  • 모든 커밋은 검증 통과 후에만 실행
  • 2-커밋 전략 준수 (예외 조건 명시 필요)
  • 커밋 메시지는 Conventional Commits 표준 준수
  • Phase 완료 시 사용자 확인 필수
  • main/master 직접 커밋 금지

사용 시나리오

시나리오 1: 단일 작업 커밋

code
입력:
- 작업 2.3: Button 컴포넌트 구현
- 파일: Button.tsx, Button.test.tsx, README.md

실행:
1. git_setup.sh → 환경 검증 ✓
2. Commit 1: feat(ui): implement Button component
   - Button.tsx, Button.test.tsx
3. Commit 2: docs(ui): add Button usage guide
   - README.md

출력:
✅ 작업 2.3 커밋 완료
📦 2개 커밋 생성

시나리오 2: Phase 완료

code
입력:
- Phase 2 완료 (5개 작업)

실행:
1. 마지막 작업 커밋
2. Phase 리포트 생성

출력:
🎉 Phase 2 완료
📊 5/5 작업, 10 커밋
🛑 계속 진행? (사용자 입력 대기)

시나리오 3: 계획 완료

code
입력:
- 전체 계획 완료

실행:
1. 최종 리포트 생성
2. 후속 조치 체크리스트 제공

출력:
🏁 계획 완료
📈 3 Phases, 15 작업, 30 커밋
📋 후속 조치: PR, 리뷰, 문서, Changeset

통합 워크플로우

이 스킬은 다음 스킬들과 연계됩니다:

  1. 입력 단계:

    • execution-engine → 작업 완료 및 검증 결과 전달
  2. 출력 단계:

    • 사용자 리포트 제공
    • PR 생성 준비 (optional)

에러 처리

yaml
error_handling:
  severity_high:
    conditions:
      - Git repository가 아님
      - 커밋할 변경사항 없음
      - 병합 충돌 발생
      - Push 실패 (권한 문제)
      - Rebase 실패 (복잡한 충돌)
    action: |
      ❌ 치명적 오류 - Git 작업 중단
      → Git repository 확인: git status
      → 변경사항 확인: git diff
      → 충돌 해결: git status (충돌 파일 확인)
      → 권한 확인: git remote -v && git push --dry-run
      → Rebase 중단: git rebase --abort
      → 재실행: 충돌 해결 후 재시도
    examples:
      - condition: "병합 충돌"
        message: "❌ 오류: 병합 충돌이 발생했습니다 (3개 파일)"
        recovery: "충돌 해결: 충돌 파일 편집 → git add {files} → git commit"
      - condition: "Push 실패"
        message: "❌ 오류: remote repository에 push할 수 없습니다 (permission denied)"
        recovery: "권한 확인: gh auth status 또는 SSH key 설정"

  severity_medium:
    conditions:
      - git pull --rebase 경고 (diverged branches)
      - 커밋 메시지 형식 불일치 (conventional commits 아님)
      - Pre-commit hook 경고
      - Changeset 파일 누락 (monorepo)
    action: |
      ⚠️  경고 - 수동 개입 또는 fallback
      1. Diverged branches: merge 또는 rebase 선택
      2. 커밋 메시지: 수정 제안
      3. Pre-commit hook: 경고 확인 후 계속
      4. Changeset: 생성 권장
      5. 작업 보고서에 경고 추가:
         > ⚠️  WARNING: 수동 확인 필요
         > → {items_to_review}
    fallback_values:
      merge_strategy: "merge" # rebase 대신
      commit_message: "as-is (with warning)"
      skip_hook: false
    examples:
      - condition: "Diverged branches"
        message: "⚠️  경고: 로컬과 원격 브랜치가 diverged 되었습니다"
        fallback: "git pull --rebase (권장) 또는 git pull (merge)"
      - condition: "커밋 메시지 형식"
        message: "⚠️  경고: 커밋 메시지가 Conventional Commits 형식이 아닙니다"
        fallback: "그대로 사용 → 형식 수정 권장: [type]: description"

  severity_low:
    conditions:
      - Git config 설정 누락 (user.name, user.email)
      - .gitignore 업데이트 필요
      - Stash 필요 (uncommitted changes)
      - Branch 이름 컨벤션 위반
    action: |
      ℹ️  정보: 자동 처리 또는 제안
      → Git config: 설정 제안
      → .gitignore: 업데이트 제안
      → Stash: 자동 stash → pop
      → Branch 이름: 경고만 표시
    examples:
      - condition: "Git config 누락"
        auto_handling: "git config user.name 'Auto User' 설정 제안"
      - condition: "Stash 필요"
        auto_handling: "자동 stash → 작업 → stash pop"

Best Practice: 커밋 전 항상 git pull --rebase 실행 Integration: execution-engine에서 입력, 사용자에게 진행 보고