$ cd /blog
오류 해결

iCloud 폴더에 둔 Git 저장소가 자꾸 깨질 때 (맥 2대 동기화 해결기)

iCloud Drive에 둔 깃 저장소가 index.lock 충돌로 깨지는 이유와, 맥 두 대에서 안전하게 쓰는 법(git-dir 분리 + 공통 경로)을 직접 겪은 경험으로 정리했습니다.


안녕하세요. Jay입니다!

노트나 코드 폴더를 iCloud Drive에 올려두고 맥 두 대에서 같이 쓰시는 분들, 한 번쯤 git이 갑자기 먹통이 된 경험 있으시죠? 저는 개인 맥과 회사 맥 두 대에서 옵시디언(Obsidian) 위키를 iCloud로 동기화하며 쓰는데, 어느 날부터 한쪽 맥에서 git status만 쳐도 에러가 나기 시작하더라고요. (며칠을 헤맸습니다 😂)

오늘은 같은 문제로 고생하시는 분들을 위해, 왜 이런 일이 생기고 어떻게 깔끔하게 해결했는지 정리해 보겠습니다.

증상: git이 갑자기 안 됩니다

iCloud 폴더 안에 .git이 통째로 들어있으면 이런 증상이 나타납니다.

  • Unable to create '.git/index.lock': File exists 같은 잠금(lock) 충돌
  • ref나 object 파일이 손상됐다는 에러
  • .git 안에 .icloud로 끝나는 정체불명의 빈 파일(placeholder)이 생김
  • 한마디로 "분명 어제까진 됐는데 갑자기 git이 안 돼요" 상태

원인: iCloud와 git은 상극입니다

git은 커밋할 때 .git/index, refs, objects, *.lock 같은 내부 파일을 한 기기에서 원자적으로(atomic) 휙휙 바꿉니다. 그런데 iCloud는 이 파일들을 실시간으로 양쪽 맥에 비동기로 옮기려 들죠. 두 동작이 부딪히면서 잠금 파일이 꼬이고 내부 구조가 깨지는 겁니다.

핵심은 이거예요. 내 콘텐츠 파일(.md, 코드 등)은 iCloud가 알아서 동기화해 주니까, git 내부 폴더까지 iCloud가 건드릴 이유가 없다는 것.

1차 시도(실패): git-dir만 밖으로 빼면 될 줄 알았는데

그래서 git 본체(.git 디렉토리)를 iCloud 밖으로 분리했습니다. git에는 이걸 위한 기능이 있어요.

# 저장소 본체를 iCloud 밖 경로로 분리
git init --separate-git-dir=~/git-repos/my-repo

이러면 폴더 안의 .git은 디렉토리가 아니라 "본체가 저기 있어요"라고 가리키는 포인터 파일 한 줄(gitdir: ~/git-repos/my-repo)로 바뀝니다. 깔끔하죠? 그런데 한쪽 맥이 또 깨지더라고요.

이유는 어이없게도 사용자 계정 이름이었습니다. 제 개인 맥과 회사 맥은 로그인 사용자 이름이 서로 달랐거든요. 그런데 이 포인터 파일(.git)은 폴더 안에 있어서 iCloud로 같이 동기화됩니다. 경로에 ~(=/Users/사용자이름/...)가 들어가니까 두 맥의 포인터 내용이 서로 달라지고, iCloud가 이걸 계속 양쪽으로 덮어쓰면서 또 깨진 거죠.

해결: username이 안 들어가는 공통 경로로

답은 두 맥에서 똑같은 경로를 쓰는 것이었습니다. macOS에는 사용자 이름과 무관하게 모든 맥에 존재하는 /Users/Shared 폴더가 있어요. 여기에 git 본체를 두면 포인터 내용이 양쪽 맥에서 한 글자도 안 틀립니다.

# git 본체를 username 무관 공통 경로로 분리
git init --separate-git-dir=/Users/Shared/git-repos/my-repo

# 폴더 안 .git 포인터를 공통 경로로 (양쪽 맥에서 동일한 내용)
printf 'gitdir: /Users/Shared/git-repos/my-repo\n' > .git

# 검증 — 이 경로가 그대로 찍히면 정상
git rev-parse --absolute-git-dir

/Users/Shared는 iCloud 동기화 대상이 아니라서, 각 맥이 자기 로컬에 본체를 따로 두게 됩니다. 포인터 파일은 양쪽이 byte 단위로 똑같으니 iCloud가 충돌시킬 게 없어요. 이 구조로 바꾸고 나서는 한 번도 안 깨졌습니다.

보너스: 커밋은 한 대에서만 하세요

본체가 맥마다 따로 있으니, 두 맥은 GitHub를 통해서만 히스토리를 주고받습니다. 양쪽에서 다 커밋하면 히스토리가 갈라져서 push가 충돌(non-fast-forward)해요. 그래서 저는 커밋·푸시는 개인 맥 한 대에서만 합니다.

걱정 안 하셔도 되는 게, 콘텐츠 파일 자체는 iCloud가 항상 양쪽 최신으로 맞춰주거든요. git/GitHub는 어디까지나 버전 히스토리 + 오프사이트 백업용이라, 전담 맥을 며칠 안 켜도 파일은 안전하고 백업만 잠깐 미뤄질 뿐입니다.

결론

기억할 기준은 한 줄인 것 같습니다.

iCloud엔 콘텐츠만 맡기고, git 본체는 /Users/Shared 공통 경로로 빼서 커밋은 한 대에서만.

iCloud의 편한 동기화와 git의 안전한 버전 관리, 둘 다 포기 안 하고 가져가는 방법입니다. 같은 문제로 머리 싸매고 계셨다면 꼭 한번 적용해 보세요! 다음에도 유익한 포스팅으로 찾아오겠습니다. 감사합니다!

#git#iCloud#Obsidian##트러블슈팅

$ ls related/

더 많은 IT·AI 활용법이 궁금하다면?

매주 새로운 실전 가이드가 업데이트됩니다.

전체 글 보기