STUDY 📒/git & github

API KEY (.env) 숨기기 (이미 올렸을 경우 history 지우기)

South Dev 2023. 12. 19. 01:06

이미 env 파일을 깃허브에 올렸다면 gitignore 파일에 .env 적용을 하지 않은 상태일 것이다.

 

root에 있는 .gitignore 에 .env를 추가해준다.

gitignore에 .env 추가

 

이미 API KEY를 commit 하여 저장소에 올린 경우

1. env 파일 삭제

 $ git rm .env --cached
 $ git add .
 $ git commit -m 'remove .env file from git'
 $ git push

github 저장소에 있는 env 파일을 삭제해 준다.

 

그러나 이렇게만 하면 이전에 남아있던 기록은 지워지지 않는다 그렇기에 history까지 지워줘야 한다.

2. git history 특정 파일 삭제 명령어

$ git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' --prune-empty --tag-name-filter cat -- --all

 

PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA

구간에 삭제할 파일이나 폴더를 작성한다.

  • 파일의 경우 ./파일명.js 등으로 작성 (env의 경우엔 .env)
  • 폴더의 경우 -r option을 추가로 작성

 

그 후 git에 push 해주면 관련된 commit이 사라진다.

 

  • 저장소를 혼자 작업 중인 경우
$ git push origin --force --all

주의!

해당 명령어는 원격 저장소의 내용이 로컬 저장소의 내용과 일치하도록 원격 저장소의 변경사항들을

강제로 덮어쓰게 된다.

 

아래와 같은 경우에만 force push를 수행하도록 한다.

- 덮어쓰기 (overwrite) 하려는 변경사항을 현재 사용자 외에 다른 사람들이 pull 하지 않은 경우

- force push를 수행한 이후, 모든 사용자들로 하여금 새로운 사본을 clone 하도록 하고 그들의 변경 사항을 새로운 사본 기반으로 재 적용하도록 한다.

 

  • 저장소를 타인과 공유 작업 중인 경우

로컬 저장소와 비교했을 때, 원격 저장소에 새로운 커밋이 추가되어 있는 경우 덮어쓰기 작업을 취소시키는

$ git push origin --force-with-lease

옵션을 사용하는 게 더 안전하다.

 

자세한 설명 아래 주소 클릭

https://blog.developer.atlassian.com/force-with-lease/

 

-force considered harmful; understanding git's -force-with-lease - Atlassian Developer Blog

Reading Time: 5 minutes Git’s push --force is destructive because it unconditionally overwrites the remote repository with whatever you have locally, possibly overwriting any changes that…

blog.developer.atlassian.com

 

 

 

 

반응형