프로젝트 산학 기업의 Gitlab에서 개발을 진행하는 과정에서 public하게 코드를 올려도 된다는 허락을 받았다. Githab으로 미러링해서 코드를 올렸지만, 소셜 로그인이나 jwt 토큰을 위해 사용하는 값 등 외부에 노출되면 보안상 문제가 되는 값들을 저장해놓은 파일까지 같이 올라가버린다는 문제가 생겼다.
이 값들을 단순히 리포지토리에서 삭제한다면 git에서 추적한 기록이 남아 파일이 github상에서 계속 노출되어 있다.
git에서 제공하는 filter-branch를 사용한다. git의 브랜치를 다시 작성할 수 있는 기능으로 다양한 옵션을 통해 파일 뿐 만 아니라 커밋 작성자, 커밋 메시지 등 다양한 수정이 가능하다.
git filter-branch --tree-filter 'rm -f {filename}' HEAD
삭제하려는 파일만 수정한 커밋 이력이 있을 경우 빈 커밋 이력이 남아 있을 수 있으므로 한 가지 옵션을 더 줘 빈 커밋은 삭제한다.
git filter-branch --tree-filter 'rm -f {filename} --prune-empty HEAD
위 명령어를 입력하면 터미널에서 모든 커밋 이력을 훑으며 지정한 파일에 대한 이력을 모두 삭제하는 것을 확인할 수 있다.
[공식문서] https://git-scm.com/docs/git-filter-branch
[참고문헌] https://aluc.io/2018-05-23-git-filter-branch.html