커밋이 그날 손대지도 않은 파일을 지웠다 — 코드 폴더를 동기화에 둔 대가

문제 해결··6분 읽기·

오늘 배울 것 저장 버튼을 누르기 전에, 무엇이 저장되는지 목록으로 따로 봅니다.

이 글은 이렇게 만들었습니다AI 활용 원칙

  • 나 제 PC 여러 대가 같은 작업 폴더를 실시간으로 주고받게 해 뒀고, 저장 이력 폴더도 빼 두지 않았어요. 그 대가를 8일 동안 네 번 치렀습니다. 근본 대책은 아직 미결이에요.

  • AI 네 번 중 두 번을 저장 전에 잡았어요. 10월 27일은 AI 교차검증이, 11월 3일은 AI 코드 검토가 막았습니다. 복구 명령도 AI가 돌렸어요.

결과부터 — 8일 동안 네 번, 커밋이 그날 손대지 않은 파일을 지웠어요

저는 AI와 함께 3D 설계 프로그램(Modello)을 만들어요. 작업한 내용은 날마다 "커밋"으로 저장합니다. 커밋은 그날 작업을 날짜·설명과 묶어 저장하는 일이에요.

10월 27일부터 11월 3일까지 8일 동안, 같은 사고가 네 번 났어요. 프로젝트 저장소 두 곳에서요.

10월 29일 저장분(270c9c4)이 가장 셉니다. 그날 새로 만든 파일 2개(51줄·158줄)를 "삭제"로 기록했어요. 다른 파일 4개는 옛 내용으로 되돌려 놨습니다. 다시 넣는 저장(4185ae8)이 파일 6개에 223줄을 보태 되살렸어요. 11월 1일 건도 다시 넣는 저장(6946100)이 59줄짜리 파일 하나를 되살렸습니다.

네 번 중 두 번은 저장 전에 막고, 두 번은 나간 뒤 되살렸어요. 잃은 파일은 없습니다.

노트북과 데스크톱 사이 상자의 쪽지만 어제 것으로 바뀐다
AI로 생성한 설명용 이미지입니다. 실제 화면이 아닙니다.

무엇이 문제였나 — 동기화가 "저장할 목록"을 옛 PC 것으로 바꿔 놨어요

노트북에서 고치면 데스크톱에도 곧 그 파일이 도착해요. 이게 파일 동기화입니다.

저장 이력 도구는 코드 파일만 보지 않아요. "다음 저장에 넣을 목록"을 적은 파일을 따로 들고 있습니다. 장바구니와 같아요. 담은 것만 계산대로 갑니다.

이 장바구니는 PC마다 내용이 달라야 정상이에요. 그런데 동기화는 모든 PC를 같은 내용으로 맞춥니다. 두 장치가 정면으로 부딪혀요.

그래서 옛 PC의 장바구니가 도착해 제 것을 덮었어요. 그 목록에 없는 새 파일은 "지운 것"으로 읽힙니다.

왜 몰랐나 — 시험이 보는 것과 저장이 보는 것이 달랐어요

시험은 지금 폴더의 파일을 읽습니다. 저장은 장바구니를 읽어요. 둘이 어긋나면 시험은 다 통과하고 저장만 거꾸로 나갑니다. 초록불만 보고 멈춘 사람은 없었어요.

11월 3일은 한 발 더 갔어요. 장바구니가 옛것인 줄 모르고 "목록대로 파일을 되돌려라"는 명령이 돌았어요. 작업 파일까지 과거로 끌려가 시험 코드 71줄이 사라졌어요. 이번엔 AI 코드 검토가 막아 줬습니다.

10월 29일 저장분을 커밋한 뒤 꺼내 본 목록이에요. 커밋 직전 화면이 아닙니다.

# 저장분에 무엇이 들어갔는지 나중에 다시 꺼내 본 목록
D  src/document/commands/datum-point-set.ts     # D = 삭제로 기록됨 (51줄)
D  src/shell/cards/useDatumPointSetCard.tsx     # D = 삭제로 기록됨 (158줄)
A  src/document/commands/nx-emboss.ts           # A = 새로 추가됨 (그날 만든 것)

맨 앞 글자가 그 파일에 한 일이에요. D는 삭제, A는 새로 추가입니다. 저는 저 두 파일을 지운 적이 없어요.

어떻게 풀었나 — 저장 직전 네 단계 점검, 그리고 아직 못 한 숙제

지금은 이렇게 해요. 제가 쓰는 도구는 git입니다.

  1. 장바구니를 글자로 뽑아 봅니다. git diff --cached --name-status 한 줄이에요. 목록이 나오면 성공입니다.

  2. 그날 손대지 않은 경로를 찾아요. 맨 앞에 D가 붙은 줄을 봅니다. 낯선 줄에서 멈추면 성공이에요.

  3. 장바구니만 비워 지금 저장본과 맞춥니다. 고치던 내용이 남아 있으면 성공이에요.

  4. 저장할 때 파일 경로를 직접 지정해요. 목록에 제가 만진 파일만 있으면 성공입니다.

10월 27일 건은 2번과 3번이 막았어요. 낯선 줄을 먼저 짚은 것은 AI 교차검증이었습니다. 되살릴 때 쓴 명령은 두 줄입니다.

# 1) 장바구니만 지금 저장본과 똑같이 되돌린다 (작업 파일은 안 건드린다)
git reset -q
# 2) 되돌림에 휩쓸린 작업 파일을 지금 저장본 내용으로 되살린다
git checkout HEAD -- <되살릴 파일>

11월 3일에는 이 두 줄로 시험 코드를 되살리고, 시험 45개 통과를 확인했어요.

저장 전 영수증을 펼쳐 읽는 모습. 빼기 줄에 낯선 물건 이름이 있다
AI로 생성한 설명용 이미지입니다. 실제 화면이 아닙니다.

이건 임시 방어선이에요. 근본 대책은 저장 이력 폴더를 동기화에서 빼는 것인데, 아직 못 했습니다. 점검도 아직 제 기억에 달려 있어서, 저장 스크립트에 박는 일이 숙제예요.

동기화를 쓰지 말라는 말은 아니에요. 사람이 쓴 문서는 동기화가 잘합니다. 가를 질문은 하나예요. "두 PC가 동시에 이 파일을 쓸 수 있는가?" 예라면 동기화에 두면 안 됩니다. 두 PC가 동시에 쓰는 "진행 상황 파일"은 git이 아니어도 비슷한 사고를 내요.

저장 버튼을 누르기 전에 무엇이 저장되는지 목록으로 따로 봅니다. 그리고 코드가 든 폴더는 여러 PC가 실시간으로 주고받는 곳에 두지 않는 게 맞아요. 저는 아직 그걸 못 치웠고, 그래서 같은 사고를 네 번 겪었습니다.

용어 풀이

  • 저장 이력(버전 관리) 작업 내용을 시점마다 남겨 두는 기록장이에요.

  • 커밋 작업을 한 묶음으로 저장하는 일이에요. 사진첩에 사진을 끼우는 것과 비슷합니다.

  • 저장할 목록(색인) 다음 저장에 넣을 파일을 적어 둔 쪽지예요. 담은 것만 저장되는 장바구니입니다. 파일 이름과 그때의 내용까지 들고 있어요.

  • 파일 동기화 여러 PC의 같은 폴더를 똑같이 맞춰 주는 서비스예요. 백업과 달라서, 실수로 지운 것도 전해져요.

  • 되돌리기 명령 파일이나 목록을 옛 상태로 돌려요. 하나는 장바구니만 비우고, 하나는 작업 파일을 덮어씁니다.

공유

댓글

0/2000

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요.