50 lines
2.0 KiB
Bash
Executable File
50 lines
2.0 KiB
Bash
Executable File
#!/bin/sh
|
|
# 2026-05-06: Claude Code auto-memory 시스템이 사용하는 외부 디렉터리(~/.claude/projects/<encoded-path>/memory)를
|
|
# 이 저장소의 .claude/memory 로 향하는 symlink로 만들어 주는 스크립트.
|
|
#
|
|
# 배경:
|
|
# - Claude Code는 working directory 경로를 인코딩(슬래시→하이픈)해서 ~/.claude/projects/<encoded>/memory 에
|
|
# 메모리 파일을 읽고 쓴다. 이 경로는 머신/체크아웃 위치마다 달라진다.
|
|
# - 메모리 .md 파일들은 git에 커밋되어 있고, 다른 PC에서는 symlink만 새로 걸어 주면
|
|
# 기존 메모리를 그대로 활용할 수 있다.
|
|
#
|
|
# 사용:
|
|
# sh .claude/setup-memory-symlink.sh
|
|
#
|
|
# 멱등성: 이미 올바른 symlink가 존재하면 아무 동작도 하지 않는다.
|
|
|
|
set -eu
|
|
|
|
REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
MEMORY_SRC="$REPO_ROOT/.claude/memory"
|
|
|
|
# Claude Code 인코딩 규칙: 절대경로 슬래시(/)를 하이픈(-)으로 치환한 디렉터리 이름
|
|
ENCODED="$(printf '%s' "$REPO_ROOT" | sed 's|/|-|g')"
|
|
TARGET_DIR="$HOME/.claude/projects/$ENCODED"
|
|
TARGET_LINK="$TARGET_DIR/memory"
|
|
|
|
if [ ! -d "$MEMORY_SRC" ]; then
|
|
echo "[setup-memory-symlink] ERROR: $MEMORY_SRC 가 없습니다. 먼저 git pull 하세요."
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$TARGET_DIR"
|
|
|
|
# 이미 같은 곳을 가리키는 symlink면 종료
|
|
if [ -L "$TARGET_LINK" ]; then
|
|
CURRENT="$(readlink "$TARGET_LINK")"
|
|
if [ "$CURRENT" = "$MEMORY_SRC" ]; then
|
|
echo "[setup-memory-symlink] OK: 이미 연결됨 ($TARGET_LINK -> $MEMORY_SRC)"
|
|
exit 0
|
|
fi
|
|
echo "[setup-memory-symlink] 기존 symlink 갱신: $CURRENT -> $MEMORY_SRC"
|
|
rm "$TARGET_LINK"
|
|
elif [ -e "$TARGET_LINK" ]; then
|
|
echo "[setup-memory-symlink] ERROR: $TARGET_LINK 가 일반 파일/디렉터리로 존재합니다."
|
|
echo " 내용 백업 후 직접 정리하세요. (이 스크립트는 안전을 위해 강제 삭제하지 않습니다.)"
|
|
exit 1
|
|
fi
|
|
|
|
ln -s "$MEMORY_SRC" "$TARGET_LINK"
|
|
echo "[setup-memory-symlink] 연결 완료: $TARGET_LINK -> $MEMORY_SRC"
|