인계 문서를 받아 작업을 시작했는데 한 저장소를 다른 저장소에 합치라는 내용이었다. 현재 상태는 워킹 트리가 깨끗하다고 문서에 적혀 있었다.
Table of contents
Open Table of contents
24개와 4,749개
그 저장소를 열어 추적 파일을 세어 보니 24개뿐이었고 전부 설정 파일이었다. 작업 공간이라서 코드가 없는 것이겠거니 하고 그대로 넘어갈 뻔했다.
확인차 다른 머신에 있는 같은 저장소의 클론을 조회하니 4,749개였다. 머신 셋의 현재 커밋을 나란히 대조해 보니 세 값이 전부 달랐다.
한 번도 안 받아 온 클론
문제의 머신에 있는 커밋의 날짜가 몇 달 전으로 찍혀 있었다. 그리고 결정적인 것을 확인했는데 원격에서 받아 온 이력을 담는 파일이 아예 없었다.
클론하고 그대로 방치한 것이라 작업 공간이 아니라 저장소의 낡은 사본이었다. 24개 파일은 그 시점의 저장소 내용이고 그 뒤에 코드가 들어온 것이다.
구조상 성립하지 않던 전제
한 가지를 더 확인해 보니 이 저장소는 설정을 자기 안에 내장하는 구조였다. 별도 작업 공간 디렉터리를 둘 구조가 아니라는 뜻이다.
결국 작업 공간이라는 전제 자체가 성립하지 않는 것이었다. 인계 문서에 적힌 조치는 그 전제 위에 세워져 있었다.
깨끗함의 정체
인계 문서에 적힌 워킹 트리가 깨끗하다는 관측 자체는 사실이었다. 실제로 상태를 확인해도 커밋할 것이 없다고 그대로 나온다.
문제는 그 깨끗함이 최신이라는 뜻은 아니라는 점이었다. 로컬이 아는 원격 참조가 같은 낡은 커밋을 가리키므로 차이가 없어서 깨끗해 보이는 것이고 로컬이 모르는 변경은 차이로도 안 나타난다.
전제가 무너진 승인
그래서 판별 방법을 새로 정했는데 상태가 깨끗한 것을 최신성의 근거로 삼지 않는다. 원격을 받아 온 이력이 있는지와 원격의 실제 최신 커밋이 무엇인지와 내 현재 커밋이 무엇인지 셋을 비교한다.
이 발견으로 작업이 일단 멈췄는데 전제는 유효하지만 조치가 무너졌기 때문이다. 승인은 그 조치의 전제 위에서 받은 것이므로 그대로 진행하지 않고 현황을 보고해 조치를 다시 정하기로 했다. 인계 문서는 쓴 시점의 관측이고 그 관측 자체는 틀리지 않았으므로 관측과 해석을 나눠서 해석만 검증하면 된다.
정리
- 상태가 깨끗한 것이 최신성의 근거가 아니다
- 로컬의 원격 참조가 낡았으면 차이가 없어 보인다
- 판별은 원격 참조 갱신 이력과 원격 실제 최신 커밋으로 한다
- 추적 파일이 적다고 작업 공간인 것이 아니다
- 저장소가 설정을 내장하면 별도 공간을 둘 구조가 아니다
- 전제가 무너지면 승인된 조치를 그대로 진행하지 않는다
- 인계 문서의 관측과 해석을 나눠 본다
- 관측은 맞아도 해석이 틀릴 수 있다