Post

[Git] BFG로 Commit log 삭제

[Git] BFG로 Commit log 삭제

보안을 위한 Commit log 삭제

GitHub는 소스코드 수정 내역이 아래의 사진과 같이 모두 Commit log에 저장 됩니다.

1

Commit log에는 어떤 소스코드를 생성, 삭제, 수정했는지 기록되어 있는데, 간혹 실수로 민감한 데이터를 노출시키는 경우가 발생할 수 있습니다.

즉, 노출하고 싶지 않은 정보를 Commit log에 노출했을 때, BFG를 사용해서 Commit log를 삭제하도록 하겠습니다.

BFG란?

아래의 내용은 BFG 홈페이지를 참고했습니다.

BFGGit 저장소 히스토리에서 불필요한 데이터를 정리할 때 사용하는 git-filter-branch의 더 간단하고 빠른 대안입니다.
(BFG Repo-Cleaner 설명글)

BFG를 사용하면 특정 파일과 관련된 Commit log를 전부 삭제할 수 있습니다.

BFG로 Commit log 삭제 방법

  1. BFG를 사용하기 위해서는 Java가 설치되어 있어야 합니다. 아래의 명령어를 실행하여 설치합니다.
    1
    
     sudo apt install default-jre
    
  2. BFG를 설치해줍니다. 이때, 원하시는 버전이 있으시다면 자체적으로 수정해주세요.
    1
    
     wget https://repo1.maven.org/maven2/com/madgag/bfg/1.15.0/bfg-1.15.0.jar -O bfg.jar
    
  3. 저는 기존에 작업하던 Local의 소스코드에서 Commit log를 수정하고 싶습니다. 그래서 LocalRepository에 접근한 후, Commit log가 저장되어 있는 .git에 접근합니다. (/Path/to/MyRepository) 대신에 LocalRepository 경로를 입력해주세요.
    1
    
     cd (/Path/to/MyRepository)/.git
    
  4. BFG로 지정한 파일 관련 Commit log를 전부 삭제시켜줍니다. 아래의 명령어에서 (/Path/to/bfg.jar)에는 2번에서 설치한 BFG의 위치를 입력하면 되고 (Filename)에는 Commit log를 삭제하고 싶은 파일 명을 입력하면 됩니다.
    1
    
     java -jar (/Path/to/bfg.jar) --delete-files '(Filename)'
    
  5. 불필요한 히스토리를 제거시켜줍니다.
    1
    
     git reflog expire --expire=now --all && git gc --prune=now --aggressive
    
  6. 마지막으로 강제로 push를 해주어 Commit log가 제대로 삭제 되었는지 GitHub에서 확인합니다.
    1
    
     git push --force
    

마치며

이번에는 BFG를 사용해서 Commit log를 삭제하는 방법을 포스트했습니다. GitHub을 사용하는 유저들에게 정보 보안 측면에서 유용하다고 생각이 듭니다.

This post is licensed under CC BY 4.0 by the author.