[Git] BFG로 Commit log 삭제
[Git] BFG로 Commit log 삭제
보안을 위한 Commit log 삭제
GitHub는 소스코드 수정 내역이 아래의 사진과 같이 모두 Commit log에 저장 됩니다.
Commit log에는 어떤 소스코드를 생성, 삭제, 수정했는지 기록되어 있는데, 간혹 실수로 민감한 데이터를 노출시키는 경우가 발생할 수 있습니다.
즉, 노출하고 싶지 않은 정보를
Commit log에 노출했을 때,BFG를 사용해서Commit log를 삭제하도록 하겠습니다.
BFG란?
아래의 내용은
BFG홈페이지를 참고했습니다.
BFG는Git저장소 히스토리에서 불필요한 데이터를 정리할 때 사용하는git-filter-branch의 더 간단하고 빠른 대안입니다.
(BFG Repo-Cleaner 설명글)
BFG를 사용하면 특정 파일과 관련된 Commit log를 전부 삭제할 수 있습니다.
BFG로 Commit log 삭제 방법
BFG를 사용하기 위해서는Java가 설치되어 있어야 합니다. 아래의 명령어를 실행하여 설치합니다.1
sudo apt install default-jre
BFG를 설치해줍니다. 이때, 원하시는 버전이 있으시다면 자체적으로 수정해주세요.1
wget https://repo1.maven.org/maven2/com/madgag/bfg/1.15.0/bfg-1.15.0.jar -O bfg.jar- 저는 기존에 작업하던
Local의 소스코드에서Commit log를 수정하고 싶습니다. 그래서Local의Repository에 접근한 후,Commit log가 저장되어 있는.git에 접근합니다.(/Path/to/MyRepository)대신에Local의Repository경로를 입력해주세요.1
cd (/Path/to/MyRepository)/.git
BFG로 지정한 파일 관련Commit log를 전부 삭제시켜줍니다. 아래의 명령어에서(/Path/to/bfg.jar)에는 2번에서 설치한BFG의 위치를 입력하면 되고(Filename)에는Commit log를 삭제하고 싶은 파일 명을 입력하면 됩니다.1
java -jar (/Path/to/bfg.jar) --delete-files '(Filename)'
- 불필요한 히스토리를 제거시켜줍니다.
1
git reflog expire --expire=now --all && git gc --prune=now --aggressive
- 마지막으로 강제로
push를 해주어Commit log가 제대로 삭제 되었는지GitHub에서 확인합니다.1
git push --force
마치며
이번에는 BFG를 사용해서 Commit log를 삭제하는 방법을 포스트했습니다. GitHub을 사용하는 유저들에게 정보 보안 측면에서 유용하다고 생각이 듭니다.
This post is licensed under CC BY 4.0 by the author.
