파일과 디렉터리 추적하기

홈 디렉터리 아래의 대상을 등록하고, 저장소 경로를 덮어쓰고, 하위 경로를 조정하고, 추적을 중단하는 방법을 정리해요.

추적은 경로를 manifest.jsonc에 기록해서 pushpull이 그 경로를 알게 하는 일이에요. 아래 절은 순서가 아니라 서로 독립적인 선택지라서, 필요한 절만 읽으면 돼요.

파일이나 디렉터리 추적하기

홈 디렉터리 아래의 경로를 dotweave track에 넘기세요. 인자는 가변 개수라서 한 번에 여러 대상을 넘겨도 돼요.

dotweave track ~/.gitconfig ~/.config/nvim
✔ Started tracking .gitconfig
  kind  file
  path  /home/you/.gitconfig
  repo  .gitconfig
  mode  normal

trackmanifest.jsonc만 써요. dotweave push를 실행할 때까지 sync 디렉터리로 복사되는 파일은 없어요.

이미 추적 중인 경로를 다시 추적하면 넘긴 필드만 갱신하고 나머지는 그대로 유지해요. 그래서 나중에 한 항목의 mode만 바꿀 때 --repo--profile 값을 다시 적지 않아도 돼요.

--profile에 빈 값 하나만 넘기면 그 대상의 프로필 지정이 지워지고, 항목은 다시 모든 프로필에서 적용돼요.

dotweave track ~/.config/my-tool --profile ""

대상은 홈 디렉터리 안으로 해석돼야 하고, 홈 디렉터리 자체는 쓸 수 없어요. sync 디렉터리와 겹치는 경로나 keys.txt를 포함하는 경로도 쓸 수 없어요. dotweave는 자기 상태와 age 키 자료를 미러링하지 않아요.

아직 없는 경로 추적하기

파일이 생기기 전에 항목을 먼저 만들어 두면, 나중에 dotweave pull이 그 파일을 제자리에 놓아 줘요. 확인할 대상이 없으니 이때는 --kind file 또는 --kind directory가 필요해요.

dotweave track ~/.config/my-tool/settings.json --kind file

--kind는 이미 존재하는 경로에도 검사돼요. 값이 디스크 상태와 어긋나면 명령이 실패하기 때문에, 디렉터리를 파일로 잘못 기록하는 일은 생기지 않아요.

저장소 경로 덮어쓰기

기본적으로 항목의 저장소 경로는 홈 디렉터리 기준 상대 경로를 그대로 따라가요. --repo로 그 경로를 직접 정할 수 있어서, 로컬 위치가 길거나 기기마다 다를 때 유용해요.

dotweave track ~/Projects/scripts/deploy.sh --repo scripts/deploy.sh

--repo는 대상이 정확히 하나일 때만 쓸 수 있어요. 대상이 둘 이상이면 저장소 경로 하나로 둘을 설명할 수 없으니 명령이 실패해요. --repo win=path 같은 플랫폼별 형태는 dotweave track, 해석 규칙은 플랫폼별 경로에서 설명해요.

추적 중인 디렉터리 안의 하위 경로 조정하기

track에는 두 번째 의미가 있어요. 대상이 기존 manifest 항목이 아니고 --repo도 넘기지 않았다면, 이미 추적 중인 디렉터리 안의 하위 경로에 대한 모드나 프로필을 설정해요. 그 경로만을 위한 자식 오버라이드 항목이 만들어져요.

dotweave track ~/.config/my-tool
dotweave track ~/.config/my-tool/credentials.json --mode secret
✔ Updated sync mode for .config/my-tool/credentials.json
  mode  secret

두 번째 명령은 Updated sync mode for ...를 출력해요. 그 경로가 이미 같은 모드로 해석되던 경우에는 Sync mode unchanged for ...가 나와요.

자식 항목은 부모보다 우선해요. 부모 디렉터리를 훑을 때 자식이 가진 경로는 건너뛰기 때문에, 그 파일은 자식의 모드로 한 번만 미러링돼요. 같은 방식으로 --mode ignore를 쓰면 추적 중인 디렉터리에서 파일 하나만 제외할 수 있어요.

추적 중단하기

dotweave untrack은 manifest 항목을 제거하고 함께 그 항목의 미러링된 artifact를 저장소에서 삭제해요. 홈 디렉터리에 있는 로컬 파일은 건드리지 않아요.

dotweave untrack ~/.gitconfig
✔ Stopped tracking .gitconfig
  plain: 1
  secret: 0

두 숫자는 제거된 plain artifact와 secret artifact의 개수예요. 그 뒤에는 push를 커밋할 때와 같은 방식으로 이 삭제도 git으로 커밋하세요.

부모 디렉터리는 그대로 추적하면서 하위 오버라이드만 제거하려면 저장소 기준 자식 경로를 넘기세요.

dotweave untrack .config/my-tool/credentials.json

구현과 참고

플래그와 타입, 기본값은 dotweave trackdotweave untrack에 정리돼 있어요. 두 명령이 쓰는 필드는 manifest.jsonc에서 설명해요.

항목의 mode 값을 고를 때는 동기화 모드를, 필요한 경로를 모두 추적한 뒤에는 매일 쓰는 push와 커밋 흐름을 확인하세요.