easycode

[Git] git에 올렸던 파일 cache, history 삭제하기 (feat. properties 파일에서 민감 정보 분리하기) 본문

Git

[Git] git에 올렸던 파일 cache, history 삭제하기 (feat. properties 파일에서 민감 정보 분리하기)

ez() 2023. 9. 10. 00:05

최근 외부 api(구글 메일, 네이버 SMS API 등)를 사용하다 보니 properties 파일에 해당 api에 필요한 민감정보가 들어가 있어서 민감정보를 gitignore에 추가해야겠다고 생각은 하고 있었는데, 이번에 GCS를 사용해 image를 업로드하는 api를 사용하게 되어 이 기회를 통해 정리해보려 한다.

 

나는 propeties 파일에 있는 민감 정보를 감춰야 했기에 일단 properties 파일을 분리해 줬다.

 

▶︎ propeties 분리 후, 분리한 properites 파일을 기존 properites 파일에 추가해 주기 (더 보기)

더보기

1. application-원하는 파일명. properties를 생성한다.

나는 apikey로 설정했다

2. 중요한 정보가 든 코드를 방금 만든 properties 파일에 옮긴다.

naver sms api에 들어가는 key와 gcs 설정에 필요한 민감 정보를 이 파일에 넣어줬다.

 

3. 기존 propeties에 아래 코드를 추가해서 분리한 properties 파일에 있는 정보를 쓸 수 있도록 한다.

 

4. 위에서 중요 정보를 담은 application-원하는 파일명. properties를. gitignore에 추가한다.

 

 

 

1. 해당 파일이 다시 git에 올라가지 않도록 .gitignore에 추가하기 (위 과정을 따라 했다면 이미 되어 있는 상태겠죠?)

외부 api를 사용할 때 필요한 중요(민감) 정보를 담은 propeties 파일을 넣어줬다.

 

 

2. git에서 캐시 삭제하기

해당 파일이 이미 커밋 등으로 인해 등록되어 있는 상태이므로 먼저 캐시를 삭제해 준다.

git rm -r --cached .

위 명령어를 입력하면 cache가 쭉 삭제될 것이다.

 

그럼 다시

git add .

git commit -m "[FIX] remove git cache"

git push origin 본인 브랜치

로 푸시해 주면 해당 파일이 .gitignore에 추가된 상태라 해당 파일은 더 이상 git에 올라가지 않는다.

 

 

3. History에서 삭제하기

하지만 이미 이전에 커밋, 푸시로 해당 파일이 올려졌던 history가 깃에 남아 있으므로 해당 히스토리를 삭제해야 한다.

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch 경로/경로/파일명.확장자' --prune-empty --tag-name-filter cat -- --all

경로의 경우, 나는 "저장소 루트부터의 경로"로 해줬다.

      예 ) src/main/resources/application-apikey.properties

만약 여기서 ~ is unchanged 가 떴다면 아마 경로가 잘못되었을 가능성이 크다!! 경로를 다시 설정해 보자.

 

제대로 수행 됐다면 처음에 [warning]이 뜨고, 몇 초 후에  ~was rewritten  으로 실행된다!

 

그리고 다시

git add .

git commit -m "[FIX] remove git history"

git push origin --force --all

 

여기서 중요한 건 --force --all 이다!!! 모든 브랜치의 히스토리에서 해당 파일을 삭제해줘야 하기 때문!

만약 push에서 오류가 뜬다면 특정 브랜치가 강제 푸시가 안되도록 설정되어 있는지 확인해 보자!

우리는 develop 브랜치를 강제 푸시가 안되도록 설정해 뒀었다. 해당 설정은... (더 보기)

더보기

프로젝트 repository에서 setting - branches - 해당 브랜치 edit 클릭

 

맨 밑에 있는 Rules applied to everyone including administrators에서 Allow force pushes 체크

 

무려 강제 푸시에, 모든 브랜치 적용이다... 팀 프로젝트 중이었던 난 너무 떨렸고... 혹시나 문제가 생기진 않을까 매우 걱정했지만, 팀원의 격려로 진행했다.

결과는?? 정상적으로 적용 됐다!!!

커밋 히스토리에서 해당 파일의 기록이 모두 사라졌다. develop 브랜치에서도!

 

 

다음엔 git action에서 해당 파일을 불러올 수 있도록 sercret 폴더에 추가하는 방법을 포스팅하겠습니다.