전체 글
약 2분

저장소를 분리하자 작업 일지가 중복됐습니다

루트와 제품 저장소의 커밋을 한 일지에 모으면서 같은 작업을 두 번 기록했습니다. 날짜와 제목으로 중복을 묶고, 이력 재작성 뒤에도 기존 일지는 남기도록 바꿨습니다.

#git #자동화 #기록

들어가며

여러 저장소의 커밋을 날짜별 작업 일지에 모으는 도구를 만들었습니다. 루트 저장소와 각 제품 저장소를 읽고, 이미 수집한 커밋 해시가 나오면 건너뛰게 했습니다. 그런데 제품을 별도 저장소로 분리한 뒤 같은 작업이 두 번 적혔습니다.

해시가 달라도 같은 작업인 경우

제품 저장소로 옮긴 이력과 루트에 남은 이력을 함께 읽고 있었기 때문입니다. 커밋 제목은 같았지만 해시는 달랐습니다.

git subtree로 일부 디렉터리의 이력을 분리하면, 새 저장소에서 커밋이 담는 트리와 부모 관계가 원래 이력과 달라질 수 있습니다. 커밋 해시는 파일 내용뿐 아니라 부모 커밋과 작성자·커미터 정보 등에도 영향을 받습니다. 같은 변경을 옮긴 뒤에도 같은 해시가 남으리라고 기대할 수는 없었습니다.

날짜와 제목으로 중복 묶기

일지에서 같은 작업을 두 번 읽고 싶지는 않았습니다. 수집 도구 gather-journal.mjs에서는 날짜와 커밋 제목이 같으면 하나로 묶기로 했습니다.

날짜 + 제목

이 기준은 커밋 제목을 구체적으로 적는다는 전제에서만 썼습니다. 같은 날 서로 다른 작업을 둘 다 fix라고 적으면 하나가 빠집니다. 같은 작업이라도 옮길 때 날짜나 제목이 달라지면 중복으로 남습니다. 당시 분리한 이력을 정리하기 위한 기준이지, 어느 저장소에나 쓸 중복 판별법은 아닙니다.

이력을 다시 쓴 뒤에는 옛 일지가 지워졌습니다

나중에는 중복과 별개의 문제가 생겼습니다. 루트 이력을 두 커밋으로 다시 쓰자 일지에서 옛 기록 156줄이 사라졌습니다. 수집 도구가 현재 저장소에서 찾을 수 없는 커밋을 일지에서도 제거하고 있었습니다.

Git 이력이 달라져도 그날 했던 작업까지 없어지는 것은 아닙니다. 일지를 매번 현재 이력으로 덮어쓰는 대신, 자동 수집 표식 안의 기존 줄과 새로 찾은 줄을 합쳐서 기록하도록 바꿨습니다. 사람이 표식 밖에 적은 설명은 그대로 두었습니다.

마치며

옛 기록을 남겼으므로 일지에는 현재 이력에서 찾을 수 없는 해시도 있습니다. 이처럼 파일에 적어 둔 해시를 자동 검사에서 읽다가 생긴 문제는 스크린샷 검사 글에 따로 적었습니다.