Git은 복잡한 도구이다.

나는 PHP의 CodeIgniter 3를 주로 써왔었다. CodeIgniter 3에서는 데이터베이스 정보를 database.php 파일에 직접 작성하는데, 이 파일을 원격 저장소에 public로 올리는 과정에서 보안 이슈가 있었다. Git에 대해 잘 모를 때는 .gitignore 파일에 해당 파일을 추가하기만 하면 된다고 생각했다. 하지만 .gitignore에 추가하는 것만으로는 충분하지 않았다. 이미 커밋된 히스토리에서도 해당 파일을 삭제해야 했다.

그리고 얼마 후, git reflog를 사용하면 hard reset된 커밋도 복구할 수 있다는 사실을 알게 되었다. 그래서 “원격 저장소에서도 reflog를 사용해서 데이터베이스 정보를 복구할 수 있지 않을까?”라는 의문이 들었다. 결론적으로, 복구할 수 없다. 그 이유는 아래의 2가지이다.

  1. git reflog로컬 저장소에서만 사용되며, 원격 저장소에는 기록되지 않는다.
  2. git filter-branch 명령어로 삭제된 히스토리는 reflog로도 복구할 수 없다.

알면 알수록 무서운 도구라는 생각이 들었었고, 그 후 모두 private로 변경하였었다.

public으로 바꾸기 위한 방법 몇 가지가 있다.
우선 모두 선행 과제는 .env파일로 민감한 정보를 관리할 수있게 변경하는 것이다.

  1. 데이터베이스 비밀번호를 바꾸고, 원격 저장소를 public으로 변경한다.
  2. git 히스토리에서 비밀번호를 검색해서 해당하는 파일을 모두 지운다.
  3. 모든 히스토리를 지우고 새로 올린다.

나는 3번째 방법으로 진행하고 있다. 나는 github를 백업용 저장소로 사용하고 있었기 때문에 .env파일을 함께 올릴 필요도 있었고, public 레포지토리와 private 레포지토리를 분리해야했다.
변경내용을 볼 수 있도록, 프레임워크 기본파일을 커밋 후에 추가 커밋하고 있다.

#참고

.gitignore 나중에 추가 및 수정

위로 스크롤