비공개로 작업하던 레포 공개로 전환하기 위해 스크릿 파일 삭제하기

상황

  • 리액트 스터디가 끝났다..!
  • 스터디하면서 github에 비공개 레포로 진행했었는데
  • 스터디를 끝내면서 공개로 전환하기로 했다
  • 하지만 공개로 전환하기 전에 aws를 사용하면서 저장해둔 rds 접속 정보 등 시크릿 파일을 제거해야 한다
  • 히스토리에서도 완전히 삭제하는 것을 목표로 한다

시도1 ; git filter-branch

1
git filter-branch --index-filter 'git rm --cached --ignore-unmatch utils\rdsSecret.ts' HEAD
  • 명령을 실행하니까 filter-repo를 사용하라고 했다

시도2 ; git filter-repo

  • 나는 윈도우를 쓰고 있는데, 윈도우에서 인스톨할 때 주의사항이 있었다
  • scoop을 통해 설치하면 문제없다 하여 scoop을 설치한다

scoop 설치 및 filter-repo 설치

  • https://scoop.sh/
  • scoop은 윈도우용 커맨드 라인 인스톨러라고 한다
  • 설치를 위해 파워쉘을 관리자 권한으로 실행하고 다음을 실행한다
1
2
3
4
5
6
# scoop 설치
Set-ExecutionPolicy RemoteSigned -scope CurrentUser
Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')

# filter-repo 설치
scoop install git-filter-repo

filter-repo로 git history 속 민감한 정보 삭제하기

1
2
3
4
5
git filter-repo --invert-paths --path utils/rdsSecret.ts
//...
git filter-repo --invert-paths --path secret1
git filter-repo --invert-paths --path secret2
git filter-repo --invert-paths --path secret3
  • README.md에 민감한 정보가 있는 경우, 기존 내용을 복사했다가
  • 명령어로 히스토리에서 제거하고,
  • 다시 파일을 생성하고 민감한 정보를 없애고 새로 커밋을 해주었다
  • 이 작업을 진행하면 리모트 주소가 삭제되는데,
  • git remote add {레포 주소} 한다

주의사항

  • 작업을 진행하기 전에 백업 레포를 하나 생성하자
  • --path 경로 작성할 때, \로 작성하면 안 되고 /로 작성해야 한다
  • 제거하고자 하는 파일을 이름을 변경한 적이 있던가,
  • 폴더를 이동했었으면 이전의 내역까지 완전히 사라지지 않는다
  • 그래서 수동으로 하나씩 찾아서 해줘야 한다
  • sourcetree에서 히스토리 검색을 통해서 꼼꼼히 체크하여 삭제를 진행한다

참고