개인 프로젝트여서 별생각 없이 DB 정보나 키 값이 다 포함된 application.properties 파일을 GitHub에 그대로 올렸었다. 프로젝트 고도화 과정에서 보안상 해당 파일은 제외하고 올리는 것이 좋다는 것을 알게 되었다. 그래서 이미 GitHub에 올라간 파일을 삭제하고 gitignore에 추가 후 커밋 히스토리도 삭제해보고자 한다.

 

상황

  • GitHub에 이미 application.properties 파일이 올라간 상태
  • 로컬에서는 파일을 유지시키면서 원격에서만 삭제
  • .gitignore에 해당 파일 추가해야 함
  • application.properties 관련 커밋 히스토리 삭제

 

1. GitHub에서 application.properties 파일 수동 삭제

GitHub 파일 삭제 순서

GitHub 내에 있는 application.properties 파일 선택 → 오른쪽 상단 · · · → Delete file → Commit changes 커밋 메시지 작성 후 Commit changes → 제대로 삭제되었는지 확인

 

2. 로컬 파일 정리

.gitignore에 application.properties 파일 경로 추가

 

3. 로컬과 원격 동기화

git 상태 확인

git status

 

원격 최신 정보 가져오기

git fetch origin

 

원격 변경사항을 로컬에 pull

git pull origin master

 

*트러블 슈팅 과정

더보기

여기서 오류난 부분

error: Pulling is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.

 

이전 merge가 충돌이 일어나서 해결이 안 된 상태

원래는 pull한 후에 commit, push를 해야 하는데 로컬 변경사항을 먼저 commit 한 후 pull 하려고 해서 충돌이 발생함

나 같은 경우 로컬에서 변경된 사항은 중요하지 않았기 때문에 (나중에 다시. gitignore에 추가하면 됨) 이전 merge를 강제 삭제 후 다시 pull → push 하면 된다.

 

<해결방법>

진행중인 merge 삭제  원격 최신 정보 가져오기 → 로컬 현재 브랜치를 원격 master와 100% 동일하게 맞춤

git merge --abort
git fetch origin
git reset --hard origin/master

 

 다시 pull

git pull origin master

 

아래와 같은 문구가 뜨면 로컬과 원격의 커밋 위치가 동일하다는 의미

Already up to date.

 

로컬 변경사항 commit

git add .gitignore
git commit -m "커밋 메시지 작성"

 

push

git push origin master

 

 

4. 커밋 히스토리 제거

커밋 히스토리에서 application.properties 파일과 관련된 로그는 전부 삭제해야 중요한 정보가 남아있지 않게 된다.

이건 GPT에 물어보니 'git filter-repo'라는 도구를 사용하는 것이 안전하다고 한다.

단, 이걸 사용하면 원격 연결이 해제되기 때문에 이후 다시 연결해줘야 하는 번거로움이 있다. (연결 해제 없이 하는 방법은 아직 없음)

 

도구 설치

pip install git-filter-repo

 

 

로컬에서 모든 커밋을 순회하면서 application.properties 관련 커밋 강제로 제거

 

git filter-repo --force --path src/main/resources/application.properties --invert-paths

 

원격 저장소 다시 연결

git remote add origin 깃허브 주소

 

원격에 강제 반영

git push origin --force --all
git push origin --force --tags

 

커밋 히스토리가 남아있는지 확인

git log -- src/main/resources/application.properties

 

여기서 아무것도 안뜨면 application.properties 파일 커밋 히스토리는 없다고 보면 된다.

+ Recent posts