feat(BT5·Dev·C안): Unity 자동 sync 체계 + PD 수동 집행 안내
- scripts/unity_auto_sync.sh 신설 · 인자: init|pull|push|status · paths.local.json UNITY_PROJECT_ROOT·UNITY_GIT_REMOTE 기반 · 로그: $HOME/.claude/burningtimes-audit/unity_sync/YYYY-MM-DD.log · 충돌·push 실패 시 로컬 commit 유지 (C6-2 데이터 보호) - paths.local.json.template: UNITY_GIT_REMOTE 필드 추가 - PD 지시 로그 BT5-Dev 진행 상태 갱신 (1단계 완료 · 2·3단계 PD 수동 대기) - 조직공지 2026-04-23_BT5_Unity_자동sync_PD_수동집행_안내 발행 PM 1단계 완료: - Unity 프로젝트 git init + 초기 commit `9f689c1` - Assets/Editor/GitAutoSync/GitAutoSync.cs (Unity Editor C# trigger) - .gitignore Unity 표준 배치 PD 수동 단계 (조직공지 참조): 1. Gitea NerdNavis_AiDev/EerieVillage 레포 생성 2. paths.local.json에 UNITY_GIT_REMOTE 추가 3. git remote add + 최초 push 매니페스트: 2026-04-23_BT5_Dev_Unity자동sync + 2026-04-23_BT5_Dev_PD수동안내 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
7ae6373ec9
commit
712746f904
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
"BURNINGTIMES_ROOT": "E:/BurningTimes",
|
||||
"UNITY_PROJECT_ROOT": "__SET_PER_PC__",
|
||||
"UNITY_GIT_REMOTE": "__SET_PER_PC_OR_SHARED__",
|
||||
"FRAMEWORK_PKG_ROOT": "__SET_PER_PC__",
|
||||
"TABLE_EXPORT_ROOT": "${UNITY_PROJECT_ROOT}/Assets/ResWork/Table/Export",
|
||||
|
||||
|
|
@ -14,7 +15,8 @@
|
|||
"DISCORD_WEBHOOK": "__SET_PER_PC_OR_SHARED__",
|
||||
|
||||
"_per_pc_hint": {
|
||||
"UNITY_PROJECT_ROOT": "PC별 Unity 프로젝트 클론 경로. 예) E:/NerdNavis/EerieVillage",
|
||||
"UNITY_PROJECT_ROOT": "PC별 Unity 프로젝트 클론 경로. 예) E:/NerdNavis/EerieVillage/EerieVillage",
|
||||
"UNITY_GIT_REMOTE": "Unity 프로젝트 Gitea 레포 URL. 2026-04-23 BT5-Dev C안으로 도입. 예) https://burning.i234.me/NerdNavis_AiDev/EerieVillage.git — scripts/unity_auto_sync.sh 가 사용",
|
||||
"FRAMEWORK_PKG_ROOT": "BT.Framework 패키지 로컬 경로 (분리 레포)",
|
||||
"DISCORD_WEBHOOK": "BT 조직 Discord 알림 웹훅 URL — 공유 시크릿. 외부 공개 금지 (.gitignore 필수)"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,159 @@
|
|||
#!/bin/bash
|
||||
# unity_auto_sync.sh — Unity 프로젝트 git 자동 sync (BT5-Dev C안, 2026-04-23 PD 승인)
|
||||
# Unity Editor GitAutoSync.cs(Process.Start) → 본 스크립트 호출 → 실제 git 작업
|
||||
#
|
||||
# 용법: unity_auto_sync.sh {init|pull|push|status}
|
||||
#
|
||||
# 경로 규약 (C34-11):
|
||||
# UNITY_PROJECT_ROOT = paths.local.json 에서 읽음 (PC별 실값)
|
||||
# UNITY_GIT_REMOTE = paths.local.json 에서 읽음 (Gitea 레포)
|
||||
# BT 본 레포 루트는 git rev-parse 또는 BURNINGTIMES_ROOT 환경변수
|
||||
|
||||
set -u
|
||||
|
||||
ACTION="${1:-status}"
|
||||
|
||||
# BT 본 레포 루트 결정
|
||||
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
|
||||
if [ -z "$REPO_ROOT" ]; then
|
||||
REPO_ROOT="${BURNINGTIMES_ROOT:-E:/BurningTimes}"
|
||||
fi
|
||||
if [ ! -d "$REPO_ROOT" ]; then
|
||||
echo "❌ BT 본 레포 찾지 못함 (시도: $REPO_ROOT)" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# paths.local.json 로드
|
||||
PATHS_FILE="$REPO_ROOT/paths.local.json"
|
||||
if [ ! -f "$PATHS_FILE" ]; then
|
||||
echo "❌ paths.local.json 부재 — template 복사 후 값 입력 필요" >&2
|
||||
exit 3
|
||||
fi
|
||||
|
||||
# JSON 파싱 (jq 있으면 활용, 없으면 grep)
|
||||
read_json() {
|
||||
local key="$1"
|
||||
if command -v jq >/dev/null 2>&1; then
|
||||
jq -r ".${key} // empty" "$PATHS_FILE" 2>/dev/null
|
||||
else
|
||||
grep -o "\"${key}\"[[:space:]]*:[[:space:]]*\"[^\"]*\"" "$PATHS_FILE" 2>/dev/null \
|
||||
| sed 's/.*"\([^"]*\)"$/\1/'
|
||||
fi
|
||||
}
|
||||
|
||||
UNITY_ROOT=$(read_json "UNITY_PROJECT_ROOT")
|
||||
UNITY_REMOTE=$(read_json "UNITY_GIT_REMOTE")
|
||||
|
||||
if [ -z "$UNITY_ROOT" ] || [ "$UNITY_ROOT" = "__SET_PER_PC__" ]; then
|
||||
echo "❌ UNITY_PROJECT_ROOT 미설정 — paths.local.json 편집 필요" >&2
|
||||
exit 4
|
||||
fi
|
||||
|
||||
if [ ! -d "$UNITY_ROOT" ]; then
|
||||
echo "❌ Unity 프로젝트 경로 부재: $UNITY_ROOT" >&2
|
||||
exit 5
|
||||
fi
|
||||
|
||||
# 로그 디렉토리 (BT C34-17 audit 중앙 저장소 연계)
|
||||
LOG_DIR="$HOME/.claude/burningtimes-audit/unity_sync"
|
||||
mkdir -p "$LOG_DIR"
|
||||
LOG_FILE="$LOG_DIR/$(date +%Y-%m-%d).log"
|
||||
|
||||
log() {
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
cd "$UNITY_ROOT" || { echo "❌ cd 실패: $UNITY_ROOT" >&2; exit 6; }
|
||||
|
||||
# git 레포 미초기화 판정
|
||||
if [ ! -d ".git" ]; then
|
||||
if [ "$ACTION" = "init" ]; then
|
||||
log "▶️ git init — Unity 프로젝트 레포 초기화"
|
||||
git init -b main 2>&1 | tee -a "$LOG_FILE"
|
||||
# Unity 표준 .gitignore·.gitattributes는 스크립트 외부에서 사전 배치 (Claude Code 직접 작성)
|
||||
if [ -n "$UNITY_REMOTE" ] && [ "$UNITY_REMOTE" != "__SET_PER_PC__" ]; then
|
||||
git remote add origin "$UNITY_REMOTE" 2>&1 | tee -a "$LOG_FILE"
|
||||
log "✅ init + remote 설정 완료 (origin: $UNITY_REMOTE)"
|
||||
else
|
||||
log "⚠️ UNITY_GIT_REMOTE 미설정 — Gitea 레포 생성 후 수동 add 필요"
|
||||
fi
|
||||
log "📌 다음 단계: git add -A && git commit && push"
|
||||
exit 0
|
||||
else
|
||||
echo "❌ Unity 프로젝트 git 레포 아님. 'init' 먼저 수행" >&2
|
||||
exit 7
|
||||
fi
|
||||
fi
|
||||
|
||||
case "$ACTION" in
|
||||
pull)
|
||||
log "▶️ pull"
|
||||
if git fetch origin 2>&1 | tee -a "$LOG_FILE" \
|
||||
&& git merge --ff-only origin/main 2>&1 | tee -a "$LOG_FILE"; then
|
||||
log "✅ pull 완료"
|
||||
exit 0
|
||||
else
|
||||
log "❌ pull 실패 (충돌/네트워크/레포 미생성 가능) — 수동 개입 필요"
|
||||
exit 8
|
||||
fi
|
||||
;;
|
||||
push)
|
||||
log "▶️ push — add + commit + push"
|
||||
git add -A 2>&1 | tee -a "$LOG_FILE"
|
||||
|
||||
if git diff --cached --quiet; then
|
||||
log "ℹ️ 스테이징 변경 없음"
|
||||
# 선행 commit 있으면 push
|
||||
if git log origin/main..HEAD --oneline 2>/dev/null | grep -q .; then
|
||||
log "▶️ 로컬 선행 commit push 시도"
|
||||
if git push origin main 2>&1 | tee -a "$LOG_FILE"; then
|
||||
log "✅ 선행 commit push 완료"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
log "ℹ️ push 대상 없음 — 정상 종료"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 현재 scene 추정 (Unity EditorBuildSettings 기반)
|
||||
SCENE="unknown"
|
||||
if [ -f "ProjectSettings/EditorBuildSettings.asset" ]; then
|
||||
SCENE=$(grep -m1 "path:" "ProjectSettings/EditorBuildSettings.asset" 2>/dev/null \
|
||||
| sed 's|.*path: ||;s|\.unity.*||;s|.*/||' || echo "unknown")
|
||||
fi
|
||||
N_FILES=$(git diff --cached --name-only | wc -l | tr -d ' ')
|
||||
MSG="auto: $(date +'%Y-%m-%d %H:%M') · scene: ${SCENE:-unknown} · ${N_FILES} files"
|
||||
|
||||
git commit -m "$MSG" 2>&1 | tee -a "$LOG_FILE"
|
||||
|
||||
if git push origin main 2>&1 | tee -a "$LOG_FILE"; then
|
||||
log "✅ push 완료: $MSG"
|
||||
exit 0
|
||||
else
|
||||
log "❌ push 실패 — 로컬 commit 유지, 네트워크/원격 확인 필요"
|
||||
exit 9
|
||||
fi
|
||||
;;
|
||||
status)
|
||||
log "▶️ status"
|
||||
git status --short 2>&1 | tee -a "$LOG_FILE"
|
||||
echo "--- 최근 3개 commit ---" | tee -a "$LOG_FILE"
|
||||
git log -3 --oneline 2>&1 | tee -a "$LOG_FILE"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
cat <<EOF >&2
|
||||
Usage: unity_auto_sync.sh {init|pull|push|status}
|
||||
|
||||
Actions:
|
||||
init — git 레포 초기화 + remote 설정 (.gitignore/.gitattributes는 사전 배치)
|
||||
pull — fetch + ff-only merge (충돌 시 중단)
|
||||
push — add + commit(자동 메시지) + push
|
||||
status — 작업 트리 상태 + 최근 3개 commit
|
||||
|
||||
Prerequisite:
|
||||
paths.local.json 의 UNITY_PROJECT_ROOT · UNITY_GIT_REMOTE 설정 필수
|
||||
EOF
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
|
@ -33,7 +33,8 @@ C3·C13 위반에 해당. **즉시 자진 보고 후 소급 등록**.
|
|||
|
||||
| # | 일시 | 지시 요지 | 처리 상태 | 산출물 경로 | 중단 사유 | 사후 조치 |
|
||||
|---|------|----------|----------|-----------|----------|----------|
|
||||
(활성 지시 없음 — BT4 완료 아카이브 이동. Phase 3 EerieVillage 착수 시 PD님 지시 수령 후 신규 항목 등록)
|
||||
| BT5-Dev | 2026-04-23 | **EerieVillage Phase 3 파일럿 (개발)** — ①Unity 프로젝트 git 초기화 + C안 자동 sync(Unity Editor GitAutoSync + BT 본 레포 unity_auto_sync.sh) **PD 승인 채택** ②Unity 2D 플랫포머 템플릿 캐릭터 → Player 시리즈 5종 스프라이트 세트 교체, 이동·공격(마우스 좌클릭) — Claude Desktop Unity MCP ③템플릿 구조·소스코드 선행 분석 → 게임 제작 준비 | **진행중** | [1단계 완료] `E:/NerdNavis/EerieVillage/EerieVillage/.git` 초기화·초기 commit 완료(모든 Assets + GitAutoSync.cs + .gitignore) · `scripts/unity_auto_sync.sh` 신규 · `paths.local.json.template` `UNITY_GIT_REMOTE` 추가 / [2·3단계 대기] Claude Desktop Unity MCP + 개발팀 Agent 분석 Task | — | PD 수동: Gitea `NerdNavis_AiDev/EerieVillage` 레포 생성 + `paths.local.json`에 UNITY_GIT_REMOTE 추가 → `Tools/Git/Push Now` 최초 push → Claude Desktop Unity MCP 캐릭터 교체 → 개발팀장 Agent 템플릿 분석 Task (Claude Code 가능) |
|
||||
| BT5-Plan | 2026-04-23 | **EerieVillage Phase 3 파일럿 (기획)** — PD 9개 코어 룰 기반 초기 기획: 캐주얼 로그라이크 2D 횡스크롤 플랫포머 · 마을/전투 구분 · 보스 스테이지 · 레벨업 스킬 카드 3픽 · 기본 라이프 1 (사망 시 레벨·스킬 초기화) · 아이템 파츠별 1개 (교체식) · 특성 영구 시스템. 스킬 카드·아이템 상세는 "추후 기획" 표기. narrative·system·content·level·balance·ux 서브에이전트 동원은 기획팀장 재량 | **진행중** | 예상: `프로젝트/EerieVillage/기획/01_게임_컨셉.md`·`02_코어_루프.md`·`03_진행_시스템_초안.md`·`04_전투_기본_스펙.md`·`05_스테이지_구조_초안.md` + 팀원 동원분 | — | 기획팀장 Agent background 호출 → 산출물 수령 시 종합 보고 |
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,128 @@
|
|||
# [PD 수동 집행 안내] BT5-Dev Unity 자동 sync C안 — 최초 1회 셋업
|
||||
|
||||
> **발행일**: 2026-04-23
|
||||
> **대상**: PD님 본 PC (DESKTOP-RD7PUKN) 및 향후 다른 PC
|
||||
> **선행**: PM 집행 완료분 (Unity git init·GitAutoSync.cs·unity_auto_sync.sh·template 갱신)
|
||||
> **소요**: 약 10~15분 (Gitea UI + 로컬 설정)
|
||||
|
||||
---
|
||||
|
||||
## 1. 개요
|
||||
|
||||
BT5-Dev C안 승인에 따라 Unity 프로젝트 자동 sync 체계가 구축되었습니다.
|
||||
- **Unity Editor 측**: `Assets/Editor/GitAutoSync/GitAutoSync.cs` — 시작 시 자동 pull, 종료 시 자동 push, Menu "Tools/Git/*"
|
||||
- **BT 본 레포 측**: `scripts/unity_auto_sync.sh` — 실제 git 작업 수행 (검증된 BT 스크립트 체계 재사용)
|
||||
|
||||
**PM 집행 완료 (현 시점)**:
|
||||
- Unity 프로젝트 git init + 초기 commit `9f689c1` (`E:/NerdNavis/EerieVillage/EerieVillage/.git`)
|
||||
- `.gitignore` Unity 표준 배치
|
||||
- `GitAutoSync.cs` Editor 스크립트 배치
|
||||
- `scripts/unity_auto_sync.sh` BT 본 레포 신설 (bash syntax 검증 완료)
|
||||
- `paths.local.json.template` `UNITY_GIT_REMOTE` 필드 추가
|
||||
|
||||
**PD 수동 집행 필요 (아래 3단계)**
|
||||
|
||||
---
|
||||
|
||||
## 2. PD 수동 단계 — 3단계
|
||||
|
||||
### 2-1. Gitea에 EerieVillage 레포 생성
|
||||
|
||||
1. 브라우저로 `https://burning.i234.me/repo/create` 접속
|
||||
2. 조직(Owner): **`NerdNavis_AiDev`** 선택
|
||||
3. 레포 이름: **`EerieVillage`** 입력
|
||||
4. Description (선택): `기묘한 고을 : 조선퇴마뎐 / EerieVillage: Joseon Exorcist — Unity 프로젝트 (BurningTimes 조직)`
|
||||
5. 공개 설정: **Private** 권장 (조직 내부)
|
||||
6. **"Initialize Repository"는 체크 해제** (로컬에 이미 초기 commit `9f689c1` 있음)
|
||||
7. "Create Repository" 클릭
|
||||
|
||||
결과 URL (가정): `https://burning.i234.me/NerdNavis_AiDev/EerieVillage.git`
|
||||
|
||||
### 2-2. `paths.local.json` 갱신
|
||||
|
||||
PD님 PC의 `E:/BurningTimes/paths.local.json` 파일 열어 아래 필드 추가·갱신:
|
||||
|
||||
```json
|
||||
{
|
||||
"UNITY_PROJECT_ROOT": "E:/NerdNavis/EerieVillage/EerieVillage",
|
||||
"UNITY_GIT_REMOTE": "https://burning.i234.me/NerdNavis_AiDev/EerieVillage.git"
|
||||
}
|
||||
```
|
||||
|
||||
- `UNITY_PROJECT_ROOT` 값 확인 필수 (PD 환경 기준 `E:/NerdNavis/EerieVillage/EerieVillage`)
|
||||
- `UNITY_GIT_REMOTE` 새로 추가 (2-1에서 생성한 URL)
|
||||
|
||||
### 2-3. 최초 push + 자동 sync 검증
|
||||
|
||||
**옵션 A — 터미널에서 직접** (권장):
|
||||
```bash
|
||||
cd "E:/NerdNavis/EerieVillage/EerieVillage"
|
||||
git remote add origin "https://burning.i234.me/NerdNavis_AiDev/EerieVillage.git"
|
||||
git push -u origin main
|
||||
```
|
||||
|
||||
**옵션 B — Unity Editor Menu에서** (자동화 테스트 겸):
|
||||
1. Unity Editor로 EerieVillage 프로젝트 열기
|
||||
2. 상단 메뉴 **"Tools > Git > Push Now"** 클릭 (단축키 `Ctrl+Shift+P`)
|
||||
3. Unity Console에 `✅ push 완료` 로그 확인
|
||||
|
||||
**연동 검증**:
|
||||
- Gitea UI에서 EerieVillage 레포에 commit 히스토리 확인
|
||||
- Unity Editor Menu **"Tools > Git > Status"** 로 상태 확인
|
||||
- Unity Editor 재시작 후 Console에 `[GitAutoSync] Unity Editor 시작 — auto pull` 로그 확인
|
||||
|
||||
---
|
||||
|
||||
## 3. 일상 운용 — PD님 개발 시 동작
|
||||
|
||||
### 자동 동작
|
||||
| 시점 | 동작 | 근거 |
|
||||
|------|------|------|
|
||||
| Unity Editor 시작 | 자동 `git pull` (ff-only) | `GitAutoSync.OnEditorStart` → `unity_auto_sync.sh pull` |
|
||||
| Unity Editor 종료 | 자동 `git add -A && commit && push` | `GitAutoSync.OnEditorQuit` → `unity_auto_sync.sh push` |
|
||||
|
||||
### 수동 발동 메뉴 (Unity Editor 상단)
|
||||
- **Tools/Git/Pull Now** (`Ctrl+Shift+G`) — 즉시 pull
|
||||
- **Tools/Git/Push Now** (`Ctrl+Shift+P`) — 즉시 add+commit+push
|
||||
- **Tools/Git/Status** — 현재 작업 트리 상태 + 최근 3 commit
|
||||
- **Tools/Git/Init Repo (최초 1회)** — 레포 재초기화 (이미 완료)
|
||||
- **Tools/Git/Toggle Auto Pull On Load** — 자동 pull 토글
|
||||
- **Tools/Git/Toggle Auto Push On Quit** — 자동 push 토글
|
||||
|
||||
### 커밋 메시지 자동 생성
|
||||
```
|
||||
auto: 2026-04-23 15:30 · scene: MainGameScene · 7 files
|
||||
```
|
||||
|
||||
### 로그 위치
|
||||
모든 sync 이력: `$HOME/.claude/burningtimes-audit/unity_sync/YYYY-MM-DD.log`
|
||||
|
||||
### 실패 처리
|
||||
- **pull 실패 (충돌)**: Unity Console Error + Dialog 알림 → PD 수동 해결. 자동 rebase·force 금지 (C6-2 데이터 보호)
|
||||
- **push 실패 (네트워크)**: 로컬 commit은 유지 → 다음 push 시 재시도
|
||||
- **스크립트 부재**: Unity Console Warning "BT 본 레포 확인 필요"
|
||||
|
||||
---
|
||||
|
||||
## 4. 다른 PC 이관 시 (향후)
|
||||
|
||||
1. BT 본 레포 `git clone` + setup 스크립트 실행
|
||||
2. Unity 프로젝트 `git clone https://burning.i234.me/NerdNavis_AiDev/EerieVillage.git` + Unity Hub로 열기
|
||||
3. `paths.local.json` 2-2와 동일하게 설정 (PC별 `UNITY_PROJECT_ROOT` 경로 조정)
|
||||
4. Unity Editor 시작 시 자동 pull 동작 확인
|
||||
|
||||
---
|
||||
|
||||
## 5. 연관 자산
|
||||
|
||||
- **Unity Editor 스크립트**: `E:/NerdNavis/EerieVillage/EerieVillage/Assets/Editor/GitAutoSync/GitAutoSync.cs`
|
||||
- **BT 본 레포 스크립트**: `scripts/unity_auto_sync.sh`
|
||||
- **Template**: `paths.local.json.template` (`UNITY_GIT_REMOTE` 필드)
|
||||
- **PD 지시 로그**: `공유/PD_지시_트래킹/개발팀_PD_지시_로그.md` BT5-Dev
|
||||
|
||||
## 6. 주의
|
||||
|
||||
- Unity Editor **비정상 종료 시**(크래시·강제 종료) `quitting` 이벤트 미발동 → 자동 push 생략. 다음 정상 종료 or 수동 "Push Now"로 보완
|
||||
- 대용량 바이너리 에셋(.png·.fbx 등) 축적 시 git LFS 도입 권고 (별도 안건화 필요)
|
||||
- Library/·Temp/·Logs/는 `.gitignore` 대상 — PC별 별도 생성됨
|
||||
- `paths.local.json` 은 **`.gitignore` 대상** (PC별 실값, 공유 금지)
|
||||
Loading…
Reference in New Issue