github에 올라가면 안되는 파일을 올려버렸다면..?

lamPolar·2024년 3월 13일
0

github

목록 보기
2/4
post-thumbnail

트센 깃허브에 올리면 안되는 .env를 올려버렸다.
그때는 private으로 둘거니까 상관없다고 생각했었는데, public으로 돌려야하는 상황이 되면서 문제가 발생했다.

아니나 다를까, public으로 돌리자마자 이메일이 도착했다.

내용은 시크릿키 누출이 의심된다는 경고메일이었다.

맞다. GitGuardian은 똑똑했다.
나는 웹에서 인증용 메일을 전송하기 위해 gmail 을 이용해 smtp 메일 발송을 하는 코드를 만들었는데, 이 과정에서 gmail의 client secret이 .env에 포함되었고, 그게 누출이 된거다.

그래서 .env를 삭제해야했다.
만약 commit history에서는 삭제하지 않아도 되거나, 혹은 로컬에서 삭제하면 된다면 이 방법을 쓰자.
이건 그렇게 어렵지 않았다. 이과정은 알고 있었고, 익숙했다.
1. 혹시 원격 저장소에 저장되어있다면 git rm --cached [File Name] 명령어로 원격 저장소에 저장된 file을 삭제하고,
2. 로컬에 저장된 파일을 다른 곳으로 옮기거나, 삭제하고,
3. gitignore파일에 삭제해야하는 파일에 대해 추가해주고,
4. gitignore를 add, commit, push 해주면 되었다.

근데 문제는 이거였다.

Q. 이전에 커밋한 기록들에 포함된 .env는 어떻게 하지?

커밋 히스토리에서도 파일을 삭제할 수 있나??

찾아보니, git filter-branch 명령어가 있었다.
git에서 히스토리를 변경하는데 사용하는 명령어인데, 특정 디렉토리나 파일을 히스토리에서 제거하는데도 유용하게 사용할 수 있었다.

로컬 레파지토리 root level에서 git filter-branch -f --index-filter "git rm --cached --ignore-unmatch backend/.env" --prune-empty -- --all 를 입력했다.

명령어의 의미는 이렇다고한다. -f로 강제로 덮어쓰고, --index-filter로 각 커밋에서 특정 파일을 필터링해서 제거하고, --prune-empty 파일이 제거된 뒤에 커밋이 빈커밋이면 커밋을 제거하고, --all 모든 브랜치와 태그에 대해서 작업을 수행하는 것.

순식간에 엄청나게 많은 로그들이 지나가고~~
나는 불안해졌다. 혹시 모든 커밋들이 다 지워졌으면 어떻게하지?
그래서 git log로 확인했다. 다행히 지워지진 않았더라. 휴...

끝으로 git push --force --all명령어로 main브랜치에 강제로 푸시를 했다.

이렇게 올라가면 안되는 파일을 삭제하는 작업도 완료~~

profile
불안을 안고 구르는 작은 모난 돌

0개의 댓글