Github의 이전 commit에 업로드한 보안 코드 삭제 및 수정하기

레일리·2022년 12월 22일
0

프로젝트를 진행하다 보면 개인 API Key나 DB 연결 URL, Secret Key 등을 사용하게 된다. 이것들은 결코 외부에 유출 되면 안 되는 것들이다. 하지만 이런 보안 사항에 대해 잘 모르거나 Private Repository로 진행하다 Public으로 변경할 때 문제가 생긴다.

지금 까지의 커밋을 지우기에는 아깝고 커밋 하나하나를 수정하는 것은 어렵다. 이럴때에는 git-filter-repo를 사용하면 간편하게 해결할 수 있다.

아래 링크의 공식 문서와 레파지토리에서 자세한 내용을 살펴 볼 수 있다.
레파지토리 : https://github.com/newren/git-filter-repo#simple-example-with-comparisons
문서 : https://htmlpreview.github.io/?https://github.com/newren/git-filter-repo/blob/docs/html/git-filter-repo.html#DISCUSSION

여기서는 전체 커밋에서 파일 삭제, 파일 편집 2가지 경우를 살펴 볼것이다.

작업전 백업 필수

먼저 설치 git-filter-repo를 설치한다. (macOS 기준)

brew install git-filter-repo

윈도우 같은 경우에는 Scoop를 이용하여 설치 가능할 것이다. 자세한 사항은 아래 링크에서 확인 가능하다.
https://github.com/newren/git-filter-repo/blob/main/INSTALL.md#installation-via-package-manager

그다음 새로운 폴더를 만들어 레파지토리를 클론한다. (기존 작업 폴더에 해도 상관 없지만 파일 안전을 위해 새로 만들었다)

git clone [리포지토리 URL]

프로젝트 폴더로 이동

cd [프로젝트 이름]

전체 레파지토리 기록 다운

git pull --all --tags

여기서 부터 2가지 방법으로 나뉜다.

1. 전체 커밋에서 파일 삭제

아래 명령어 [FILENAME]에 삭제하고자 하는 파일명을 적으면 된다.

git filter-repo --use-base-name --path [FILENAME] --invert-paths

2. 전체 커밋에서 파일 편집

먼저 프로젝트 폴더에 replacements.txt 빈 파일은 만든다. 그리고 아래 형식과 같이 ('변경할 현재 코드'==>'변경할 코드') txt 파일을 작성한다. 예를들어 아래 형식은 abc를 ###으로 변경하는 것이다.

abc==>###
def==>***

작성후 아래 명령어를 실행하면 적용 된다.

git filter-repo --replace-text replacements.txt

잘 안 되면 더 강하게도 가능.(하지만 주의)

git filter-repo --replace-text replacements.txt --force

마무리 push

다 수정 했으면 깃허브에 푸쉬하면 된다. 푸쉬 하기전 이전 커밋으로 이동해 잘 변경 됐는지 확인하자.

git push --all --force

참고 : https://blog.gitguardian.com/rewriting-git-history-cheatsheet/#the-secret-is-beyond-the-last-commit?utm_source=product&utm_medium=product&utm_campaign=onboarding

profile
나야, 개발자

0개의 댓글