Git:RemoveSensitiveData
중요한 데이터를 저장소에서 영구적으로 삭제하는 방법에 대하여 설명한다.
모든 커밋에서 파일을 제거하기
WARNING |
문제가 있는 방법이다. BFG 도구를 사용하자. |
갑자기 누군가 생각 없이 git add . 같은 명령어를 실행해 버려서 공룡 똥 덩어리가 커밋됐거나 실수로 암호가 포함된 파일을 커밋해서 이런 파일들을 다시 삭제해야 하는 상황을 살펴보자. 이런 상황은 생각보다 자주 발생한다. filter-branch는 히스토리 전체에서 필요한 것만 골라내는 데 사용하는 도구다. filter-branch의 --tree-filter라는 옵션을 사용하면 히스토리에서 passwords.txt라는 파일을 아예 제거할 수 있다:
$ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD
Rewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd (21/21)
Ref 'refs/heads/master' was rewritten
중요한 점은 반드시 ROOT Working directory에서 작업해야 한다.
WARNING Message
사용하면 다음과 같은 경고가 출력된다:
git-filter-branch has a glut of gotchas generating mangled history rewrites. Hit Ctrl-C before proceeding to abort, then use an alternative filtering tool such as 'git filter-repo' (https://github.com/newren/git-filter-repo/) instead. See the filter-branch manual page for more details; to squelch this warning, set FILTER_BRANCH_SQUELCH_WARNING=1.
번역은:
git-filter-branch에는 망가진 기록 재작성을 생성하는 문제가 너무 많습니다. 중단을 진행하기 전에 Ctrl-C를 누른 다음 'git filter-repo'(https://github.com/newren/git-filter-repo/)와 같은 대체 필터링 도구를 대신 사용하세요. 자세한 내용은 filter-branch 매뉴얼 페이지를 참조하십시오. 이 경고를 억제하려면 FILTER_BRANCH_SQUELCH_WARNING=1을 설정하십시오.
그래서 결국 BFG를 사용하면 된다.
원격저장소에 적용하기
수정된 로컬(Local)저장소의 정보를 원격(Remote)저장소에 적용해야 한다. 이 때, 변경된 모든 Revision항목에 적용되야 하기 때문에 강제옵션(--force
)을 줘야 한다.