git 커밋 히스토리에서 민감한 데이터 삭제하기

Hschoi han Lucius.choi님이 일 년 이상전에 작성함. 0 1389 
<div class='video-container'><iframe width="100%" height="auto" src="https://www.youtube.com/embed/wFfqKzrpWeY" frameborder="0" allowfullscreen></iframe></div> --- `git`를 사용하여 소스코드를 관리할 때, 간혹, 원격 저장소로 푸시된 데이터 중에 민감한 데이터(예를 들어, 유저명, 비밀번호, secret 키 등)가 포함되어 타인들에게 공개되는 우를 범하게 된다. 또한 불필요한 파일들을 저장소의 모든 히스토리에서 삭제하고자 할 경우가 있다. 사실 이러한 경우는 주변에서 쉽게 찾아 볼 수 있고, 자신도 그런 일을 자주 접하게 될 것이다. > 주의: 원격 저장소의 모든 커밋 히스토리에서 해당 민감 파일 또는 디렉토리를 삭제해야만 보안 상 문제가 없게 된다. ## 1. git-filter-branch 이러한 문제를 해결하기 위한 첫번째 방법으로, git 명령 중에 `filter-branch --tree-filter`라는 옵션을 사용한 후 `git push origin master --force` 명령을 실행하면 민감한 데이터 파일을 커밋 히스토리상에서 삭제할 수 있게 된다. ``` $ git filter-branch --tree-filter 'rm *.production.yml' HEAD $ git push origin master --force ``` ## 2. BFG Repo-Cleaner 또 다른 방법으로는, `git-filter-branch` 처럼 동작하지만 훨씬 빠르고 더 간단하게 사용할 수 있는 `BFG`를 사용할 수 있다. #### BFG 설치하기 [`bfg.jar`](http://repo1.maven.org/maven2/com/madgag/bfg/1.12.8/bfg-1.12.8.jar)을 다운로드한 후 `~/bin`로 이동한 후, 아래와 같은 명령을 실행하면 커맨드라인에서 `bfg` 명령을 사용할 수 있게 된다. (`PATH` 경로 상에 `~/bin` 디렉토리가 포함되어 있는지 확인해야 함.) ``` $ echo "alias bfg=java -jar bfg.jar" >> ~/.bashrc $ . ~/.bashrc ``` #### 사용법 이미 `git init` 후 `git push`한 프로젝트 디렉토리로 이동한 상태에서 아래와 같이 삭제하고자 하는 파일을 지정한다. 와일드카드 문자와 함께 `glob` 패턴을 사용하여 복수개의 파일을 지정할 수 있다. ``` $ bfg --delete-files id_{dsa,rsa} # or `bfg -D id_{dsa, rsa}` $ git reflog expire --expire=now --all && git gc --prune=now --aggressive $ git push origin master --force ``` 지금까지의 작업이 제대로 이루어졌다면, 삭제한 특정 파일이 각 커밋에서 찾아 볼 수 없어야 한다. 여기서 삭제한 파일들은 `.gitignore` 파일에 등록해 주어 소스관리에 포함되지 않도록 마지막 작업을 해 준다. 결과적으로 이 파일들은 로컬 머신에만 존재하고 소스 저장소에는 포함되지 않게 된다. > 주의 : `BFG`는 `git-filter-branch`와는 달리 최종 커밋에 대해서 파일 삭제를 하지 않는다는 것이 차이점임을 기억해 두어야 한다. https://youtu.be/wFfqKzrpWeY (한국어) https://youtu.be/tRh20KrM5Os(영어) --- 참고문서 : * [Remove sensitive data](https://help.github.com/articles/remove-sensitive-data/) * [BFG Repo-Cleaner : an alternative to git-filter-branch](https://rtyley.github.io/bfg-repo-cleaner/) * [Permanently remove files and folders from Git repo](http://dalibornasevic.com/posts/2-permanently-remove-files-and-folders-from-git-repo)

Comments (0)