개인 프로젝트를 관리하거나 회사 저장소를 운영하다 보면, 과거 커밋에 남아 있는 이메일 주소를 수정해야 하는 경우를 종종 만납니다. 특히 회사 도메인이 변경되었거나 개인 깃헙 계정의 이메일이 바뀐 경우라면 더욱 그렇습니다.
하지만 이미 저장된 커밋 메시지나 작성자 정보를 직접 수정하는 것은 일반적인 git 명령어로는 쉽지 않습니다. 히스토리를 다시 쓰는 작업이기 때문입니다.
이번 글에서는 git-filter-repo
를 이용해 과거 커밋들의 이메일을 일괄적으로 수정하는 방법을 정리해보려 합니다. 복잡한 설명은 생략하고, 실제 적용하는 과정을 중심으로 적어보겠습니다.
git-filter-repo 설치
작업을 위해 git-filter-repo가 필요합니다. 아직 설치하지 않았다면 다음 명령어를 통해 설치할 수 있습니다.
|
|
또는 Python 환경이 준비되어 있다면 pip로 설치할 수도 있습니다.
|
|
스크립트 작성
과거 커밋의 이메일을 수정하는 작업은 다음 스크립트 하나로 진행할 수 있습니다.
|
|
REMOTE_URL
에는 수정하고자 하는 저장소 주소를 입력합니다. 메일 주소 변경은 mailmap.txt
파일을 통해 지정합니다. Example Name
, old@example.com
, new@example.com
부분을 수정할 값으로 바꿔야 합니다.
주의할 점
이 스크립트는 저장소의 히스토리를 수정하는 작업입니다. force push가 포함되어 있어 원격 저장소의 모든 커밋 기록이 변경됩니다. 만약 다른 사람이 같은 저장소를 사용 중이라면, 작업 전에 반드시 상의해야 합니다.
또한 스크립트를 실행하기 전에 저장소를 백업해두는 것이 좋습니다. git bundle을 이용하면 간단하게 백업할 수 있습니다.
|
|
backup.bundle
파일은 문제가 생겼을 때 복구하는 데 사용할 수 있습니다.
마무리
git 저장소의 과거 커밋을 수정하는 작업은 가볍게 할 수 있는 작업은 아닙니다. 하지만 필요한 경우라면 신중하게 준비해서 진행하면 큰 문제 없이 끝낼 수 있습니다.