diff --git a/CLAUDE.md b/CLAUDE.md index 919de48..4771e3c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -109,31 +109,42 @@ cd /home/aweso/sam/react && git push origin develop 사용자가 **"운영서버 푸시"**라고 말하면 다음을 자동 실행: > **전제**: develop의 변경사항이 개발 서버에서 테스트 완료된 상태 +> **방식**: **cherry-pick** — 이번 세션에서 작업한 커밋만 골라서 main에 반영 (develop 전체 머지 금지) 1. 각 프로젝트에서 develop에 미푸시 커밋 확인 → 있으면 먼저 `git push origin develop` -2. `git checkout main` (모든 프로젝트 운영 브랜치: `main`) -3. `git pull origin main` — **최신화 (충돌 방지 핵심 단계)** -4. `git merge develop` — develop 내용을 main에 머지 -5. 충돌 발생 시 → 사용자에게 알리고 해결 지원 -6. `git push origin main` — Jenkins가 운영 서버에 자동 배포 -7. `git checkout develop` — 작업 브랜치로 복귀 -8. `git merge main` — **develop에 main 동기화 (향후 충돌 방지)** -9. 결과 요약 출력 +2. **체리픽 대상 커밋 식별** — 이번 세션에서 작업한 커밋 해시 목록을 `git log --oneline`으로 확인하여 사용자에게 표시 +3. 사용자에게 체리픽 대상 커밋 목록을 보여주고 **확인** 받기 +4. `git checkout main` (모든 프로젝트 운영 브랜치: `main`) +5. `git pull origin main` — **최신화 (충돌 방지 핵심 단계)** +6. `git cherry-pick ...` — 확인받은 커밋만 순서대로 적용 +7. 충돌 발생 시 → 사용자에게 알리고 해결 지원 +8. `git push origin main` — Jenkins가 운영 서버에 자동 배포 +9. `git checkout develop` — 작업 브랜치로 복귀 +10. 결과 요약 출력 (체리픽한 커밋 목록 포함) ```bash -# 변경사항 있는 프로젝트만 실행 -cd /home/aweso/sam/api -git checkout main && git pull origin main && git merge develop -git push origin main -git checkout develop && git merge main - +# 예시: mng에서 이번 세션 커밋 2개만 체리픽 cd /home/aweso/sam/mng -git checkout main && git pull origin main && git merge develop + +# 1. develop 미푸시 확인 +git push origin develop + +# 2. 체리픽 대상 확인 (사용자 승인) +git log --oneline # → abc1234, def5678 + +# 3. main 전환 및 최신화 +git checkout main && git pull origin main + +# 4. 선택한 커밋만 체리픽 (시간순 — 오래된 것부터) +git cherry-pick abc1234 def5678 + +# 5. 푸시 및 복귀 git push origin main -git checkout develop && git merge main +git checkout develop ``` -> **중요**: 3번(main 최신화) 없이 머지하면 충돌 발생. 8번(develop 동기화) 없이 작업하면 다음 운영 푸시 시 충돌 누적. +> **merge와의 차이**: `git merge develop`은 develop의 모든 커밋을 main에 반영하지만, `git cherry-pick`은 지정한 커밋만 반영한다. 다른 개발자의 미검증 커밋이 운영에 올라가는 문제를 방지한다. +> **주의**: cherry-pick 후 develop에 main을 머지하지 않는다. 동일 변경이 이미 develop에 존재하므로 불필요하다. #### 푸시 대상 자동 판별 @@ -575,18 +586,19 @@ docker exec sam-mng-1 php artisan cache:clear ### 브랜치 동기화 규칙 (필수) -> **main → develop 방향 최신화를 주기적으로 수행해야 충돌을 방지한다.** +> **cherry-pick 방식에서는 develop→main 자동 동기화가 불필요하다.** +> main에 직접 변경이 발생한 경우에만 develop에 동기화한다. | 상황 | 조치 | |------|------| -| "운영서버 푸시" 완료 후 | 자동으로 develop에 main 머지 (절차에 포함됨) | -| main에 직접 변경 발생 시 | develop에서 `git merge main` 실행 | +| "운영서버 푸시" 완료 후 | 동기화 불필요 (cherry-pick은 develop에 이미 존재하는 커밋) | +| main에 **직접** 변경 발생 시 (hotfix 등) | develop에서 `git merge main` 실행 | | develop에서 새 작업 시작 전 | `git pull origin develop`으로 최신화 확인 | ``` -main ──변경──→ main - │ -develop ←── git merge main ──┘ (동기화 필수) +develop ──작업──→ develop push (개발서버) + │ + └── cherry-pick 선택 커밋 ──→ main push (운영서버) ``` ### 로컬 환경 (Docker) 업데이트