신짱구의 개발일지

[Git] Git Commit 기록에서 민감한 정보 지우기 본문

DevTools/Git

[Git] Git Commit 기록에서 민감한 정보 지우기

신짱구개발자 2024. 11. 14. 20:05

프로젝트를 진행하면서 IP 주소나 포트 번호 그리고 디비 계정 등을 임의의 값으로 수정하는 것을 잊고 커밋해버렸다.. 바로 이전 커밋을 취소하여도 되지만, 예전에 올린 커밋 이력에도 존재할 경우 모두 찾아서 커밋을 취소하기에는 너무너무 귀찮다. 이참에 이미 올라간 커밋 기록들에서 여러 민감 정보들을 한번에 가리거나 지울 수 있는 툴을 찾아보기로 했다. 

BFG Repo-Cleaner

BFG Repo-Cleaner는 Git 저장소에서 대용량 파일이나 민감한 정보를 빠르게 제거하기 위한 오픈 소스 도구이다. Git은 기본적으로 모든 커밋과 변경 이력을 추적하고 유지하기 때문에, 실수로 저장소에 민감한 정보나 큰 파일이 포함될 경우 영구적으로 남아 있을 수 있다. BFG Repo-Cleaner는 이러한 이력에서 민감한 정보나 불필요한 대용량 파일을 제거하고 저장소 크기를 줄이는 데 유용한 도구이다.

 

1. BFG는 JAVA 기반 도구이므로, 먼저 JAVA 가 설치되어 있어야 한다.

  • 자바가 설치되어 있는지 확인한다.
java -version
  • 자바 버전이 나오지 않고, 오류가 발생하면 JAVA를 설치한다. 

라즈베리파이와 호환되지 않은 자바 버전으로 설치하려고 시도할 경우, 아래와 같은 오류가 발생할 수 있다.

minjoo@raspberrypi:~/Baby-Crying-Monitoring $ sudo apt install openjdk-11-jdk
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Package openjdk-11-jdk is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'openjdk-11-jdk' has no installation candidate

 

라즈베리파이에서 사용할 수 있는 자바 버전을 찾는다.

sudo apt update
sudo apt search openjdk

 

사용 가능한 버전으로 JAVA를 설치한다. 라즈베리파이에서는 일반적으로 OpenJDK를 사용한다.

sudo apt update
sudo apt install openjdk-17-jdk

 

제대로 설치되었는지 확인한다.

java -version

 

2. BFG Repo-Cleaner 설치

wget <https://repo1.maven.org/maven2/com/madgag/bfg/1.14.0/bfg-1.14.0.jar> -O bfg.jar

 

3. 이미 원격 레포지토리가 로컬에 클론되어 있다고 가정

 

  • 클론된 레포지토리 디렉토리로 이동한다.
cd your-repo  # 기존에 클론된 리포지토리 폴더로 이동
git fetch --all

 

  • 제거할 정보를 저장할 텍스트 파일 생성한다.
# replacements.txt 파일 생성
nano replacements.txt

 

4. BFG로 민감한 정보 제거

 

  • 설치된 bfg.jar 를 사용하여 replacements.txt 에 지정한 IP 주소를 리포지토리에서 제거한다.
java -jar bfg.jar --replace-text replacements.txt

 

5. 레포지토리 정리

 

  • 커밋 기록을 수정한 후, Git의 로그와 가비지 데이터를 제거한다.
git reflog expire --expire=now --all && git gc --prune=now --aggressive

 

6. 변경된 기록을 원격 저장소에 푸시

git push --force

 

+ 에러 처리

"Invalid username or password” 오류 발생할 경우, GitHub 인증 실패로 인한 오류이다. 아래의 방법으로 오류를 수정하고 다시 push 한다. 

minjoo@raspberrypi:~/Baby-Crying-Monitoring $ git push --force
Missing or invalid credentials.
Error: connect ECONNREFUSED /run/user/1000/vscode-git-242d6a49e1.sock
    at PipeConnectWrap.afterConnect [as oncomplete] (node:net:1606:16) {
  errno: -111,
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '/run/user/1000/vscode-git-242d6a49e1.sock'
}
remote: Invalid username or password.
fatal: Authentication failed for '<https://github.com/<organization>/<repository>.git/>'

 

Git에서 HTTPS URL 업데이트한다.

  • 원격 저장소 URL이 HTTPS 형식인지 확인하고, 아래 명령어를 입력하여 GitHub 토큰(PAT or SSH 키)을 사용할 수 있도록 설정한다.
git remote set-url origin <https://<token>@github.com/><organization>/<repository>.git
  • 다시 push 한다.
git push --force

'DevTools > Git' 카테고리의 다른 글

[Git] Commit 취소  (1) 2024.09.13