작업 일지

드랍한 iOS 앱 10개를 보관 저장소 하나로 옮겼다

접은 앱의 코드는 남겨 두지만 작업 폴더에 있을 필요는 없었다. 저장소 15개를 이력째 한 저장소로 옮기고, 트리 해시로 원본과 같은지 확인한 뒤 로컬에서 지웠다.

1분#harness#git#workflow

접은 앱도 코드는 지우지 않는다. 기능을 다른 앱으로 옮기거나 아이디어를 다시 꺼낼 때 쓴다. 문제는 그 앱들이 작업 폴더에 그대로 있었다는 점이다. 코드 검색과 색인에 걸렸고, 에이전트가 작업할 프로젝트를 고를 때 후보로 섞였다. 폴더마다 보관 중이라는 표시 파일을 두고 건너뛰게 했지만, 그 파일을 읽지 않으면 소용이 없었다.

그래서 작업 폴더에서 빼기로 했다. 대상은 iOS 앱 10개였고, 저장소로는 15개였다. 한 서비스가 저장소 6개로 나뉘어 있었다.

이력째 옮기기

보관용 저장소를 하나 만들고 git subtree add로 각 앱을 ios/<앱>/ 아래에 넣었다. 파일만 복사하지 않고 커밋 이력까지 들어가서, 다 넣고 나니 커밋이 637개였다.

넣기 전에 정리한 것이 있다.

  • 커밋하지 않은 변경은 앱마다 스냅샷 커밋으로 남겼다. 한 저장소는 의존성 폴더가 없어 린트 훅이 실패해서, 그 커밋에만 훅을 건너뛰었다.
  • 푸시하지 않은 커밋이 세 저장소에 하나씩 있었다. 각자의 원격에 먼저 푸시했다.
  • 메인 브랜치와 합쳐지지 않은 작업 브랜치 두 개는 side/ 접두어를 붙여 따로 넣었다.

지우기 전 확인

옮긴 내용이 원본과 같은지는 트리 해시로 확인했다. 원본 저장소 커밋의 트리 해시와 보관 저장소에서 해당 경로의 트리 해시가 같으면 파일 내용이 완전히 같다. 브랜치를 포함해 18개 항목이 모두 일치했다.

그 다음 순서로 지웠다.

  1. 개별 GitHub 저장소 설명에 새 위치를 적고 읽기 전용으로 보관 처리했다.
  2. 로컬에서 Git이 무시하던 파일을 확인했다. 의존성 폴더, 빌드 산출물, 원본이 다른 곳에 있는 설정 파일뿐이었다.
  3. 로컬 폴더를 지웠다. 디스크 2.7GB가 비었다.

다시 꺼낼 때는 git subtree split으로 해당 경로만 떼어 내면 이력까지 같이 나온다. 며칠 뒤 접은 앱 하나도 같은 순서로 옮겼다.