#!/bin/bash # post-commit hook — 중앙 $HOME/.claude/nerdnavis-memory/ → 레포 memory/org/ 단방향 sync # Claude user memory에 Write된 내용을 commit 포함시키기 위해 commit 직후 레포로 반영. # 2026-04-19 신설 — C34-3 동기화 4계층 (commit 최신본 보장) REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null) [ -z "$REPO_ROOT" ] && exit 0 REPO_MEM="$REPO_ROOT/memory/org" CENTRAL_MEM="$HOME/.claude/nerdnavis-memory" MARKER_NAME=".memory-junction-marker" LOCK_FILE="$HOME/.claude/.nerdnavis_memory_sync.lock" [ ! -d "$CENTRAL_MEM" ] && exit 0 [ ! -d "$REPO_MEM" ] && exit 0 # Lock (5초 타임아웃) ATTEMPT=0 while [ -f "$LOCK_FILE" ] && [ "$ATTEMPT" -lt 5 ]; do sleep 1 ATTEMPT=$((ATTEMPT + 1)) done echo "$$" > "$LOCK_FILE" 2>/dev/null trap 'rm -f "$LOCK_FILE"' EXIT # 중앙 → 레포 복사 (mtime·hash 다를 때만, marker 제외) # 삭제 동기화 안 함 (파일 소실 리스크 회피, 안전망) CHANGED=0 for f in "$CENTRAL_MEM"/*.md "$CENTRAL_MEM"/*.json; do [ -f "$f" ] || continue basename=$(basename "$f") [ "$basename" = "$MARKER_NAME" ] && continue dst="$REPO_MEM/$basename" if [ ! -f "$dst" ] || ! diff -q "$f" "$dst" >/dev/null 2>&1; then cp "$f" "$dst" 2>/dev/null CHANGED=$((CHANGED + 1)) fi done if [ "$CHANGED" -gt 0 ]; then echo "🧠 [Memory Sync] 중앙 → 레포 $CHANGED 건 반영 (다음 commit에 포함 예정이면 재commit 필요)" fi exit 0