docs: CLAUDE.md 운영서버 푸시를 cherry-pick 방식으로 변경
This commit is contained in:
58
CLAUDE.md
58
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 <commit1> <commit2> ...` — 확인받은 커밋만 순서대로 적용
|
||||
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) 업데이트
|
||||
|
||||
Reference in New Issue
Block a user