.env파일을 실수로 git 에 올린 경우

울랄라신나·2025년 7월 1일

.env를 실수로 git 에 올린 경우

.env파일에 소셜 로그인 키값이나 중요한 데이터를 넣어두고 gitignore에 제외를 해야 하지만 실수로 안한상태로 깃에 업로드 됬을때 최대한 빨리 수정을 해야 한다.

난 다행스럽게 pr이 열려있고 내 브랜치를 나만 사용하고 팀원이 사용하기 전이라 수정이 비교적 쉬웠다.😱

우선 python과pip 설치를 확인한다.

참고자료 https://www.python.org/downloads/


설치가 확인되면

‘ pip install git-filter-repo ‘를 설치해 준다.

이미지

1. 해결 방법

  1. Python 공식 배포판 설치:

    • Python 공식 사이트에서 Python 3.9 이상을 다운로드한다. (예: Python 3.12).
    • 설치 시 "Add Python to PATH" 체크박스를 반드시 선택한다.
    • 설치 경로 예: C:\\Python312 또는 C:\\Users\\ 사용자 아이디\\AppData\\Local\\Programs\\Python\\Python312.
  2. 설치 확인:
    CMD에서:

    ```
    python --version
    pip --version
    
    ```
    
    Git Bash에서:
    
    ```bash
    python --version
    python3 --version
    pip --version
    
    ```

    정상적으로 설치되었다면, 예를 들어 Python 3.12.1pip 23.2.1 같은 출력이 나와야 한다.

Step 2: git filter-repo 설치

pip가 정상적으로 작동하면, git filter-repo를 설치한다.:

pip install git-filter-repo
  • 설치 확인:
    git filter-repo --version
    

Step 3: .env 파일 제거

git filter-repo.env 파일을 히스토리에서 제거:

cd ~/Desktop/BookJob/Frontend
git checkout 기록을 지울 브랜치
git filter-repo --path .env --invert-paths // 이게 오류가 발생하면 아래 오류 해결법 보기
  • 오류시 해결방법

    오류 원인 상세

    • "Freshly packed repo" 요구: git filter-repo는 히스토리를 안전하게 재작성하기 위해 새로 클론된 리포지토리에서 작업할 것을 요구한다. 이는 기존 리포지토리에서 작업 시 발생할 수 있는 데이터 손실이나 충돌을 방지하기 위함이다.

    • 현재 리포지토리 상태: 현재 작업 중인 리포지토리(~/Desktop/BookJob/Frontend)는 이미 여러 커밋이나 브랜치 작업이 진행된 상태일 가능성이 높다. 따라서 git filter-repo가 안전 장치로 인해 실행을 거부한 것이다.

    • 해결 방법 제시: 오류 메시지에서 제안하듯이, 신규 클론에서 작업하거나 -force 플래그를 사용해 강제로 진행할 수 있다.


      해결 방법

      권장: 신규 클론에서 작업

      가장 안전한 방법은 리포지토리를 새로 클론한 후 git filter-repo를 실행하는 것이다.

    1. 현재 리포지토리 백업:

      • 현재 작업 중인 리포지토리를 안전하게 백업하기.
      • 예: cp -r ~/Desktop/BookJob/Frontend ~/Desktop/BookJob/Frontend_backup
    2. 리포지토리 새로 클론:

      cd ~/Desktop
      git clone <repository-url> BookJob_new
      cd BookJob_new
      git checkout 브랜치
      
    3. .env 파일 제거:
      새로 클론한 리포지토리에서 명령 실행:

      ```bash
      git filter-repo --path .env --invert-paths
      
      ```
    4. 원격 브랜치 강제 푸시:

      git push origin feature-21/feat --force
      
    5. 로컬 리포지토리 업데이트:
      - 기존 리포지토리(~/Desktop/BookJob/Frontend)를 삭제하고 새로 클론한 리포지토리로 교체:

          ```bash
          rm -rf ~/Desktop/BookJob/Frontend
          mv ~/Desktop/BookJob_new ~/Desktop/BookJob
          
          ```
          

      대안: -force 플래그 사용

      신규 클론이 번거롭다면, 현재 리포지토리에서 --force 플래그를 사용해 강제로 진행할 수 있습니다. 단, 이 방법은 히스토리가 변경되므로 주의가 필요하며, 팀 작업 시 동료와 협의해야 한다.

  1. 강제로 실행:
    ```bash
    git filter-repo --path .env --invert-paths --force
    
    ```
  2. 원격 브랜치 강제 푸시:
    ```bash
    git push origin feature-21/feat --force
    
    ```
  3. 주의사항:
    - -force는 현재 리포지토리의 히스토리를 덮어씌운다. 팀원들이 동일 브랜치에서 작업 중이라면 충돌이 발생할 수 있으므로, 사전에 팀과 공유해야 한다.
    - 작업 전 로컬 리포지토리를 백업하는 것이 안전하다.

    추가 작업

    1. .gitignore 확인:
      .env 파일이 다시 커밋되지 않도록 .gitignore에 추가:

      ```
      .env
      
      ```
      
      커밋:
      
      ```bash
      git add .gitignore
      git commit -m "Add .env to .gitignore"
      git push origin 브랜치
      
      ```
    2. API 키 무효화:

      • .env에 포함된 API 키는 이미 노출되었을 가능성이 있으므로, 즉시 무효화하고 새 키로 교체해야한다.
      • 새 키를 로컬 .env 파일에 업데이트한다.
    3. PR 확인:
      - GitHub PR에서 .env 파일이 제거되었는지 확인한다.
      - 팀원에게 히스토리 변경 사실을 알리고 PR을 다시 검토하도록 요청한다.


      오류 방지 팁

    • 신규 클론 선호: git filter-repo는 히스토리 재작성 도구로, 신규 클론에서 작업하는 것이 가장 안전하다. -force는 편리하지만 잠재적 위험이 있다.

    • GitHub 캐시: 공개 리포지토리라면, GitHub 지원팀에 연락해 캐시된 커밋 데이터를 제거 요청해야한다 (https://support.github.com/).

    • 비밀 관리: .env 파일 대신 GitHub Secrets, AWS Secrets Manager 같은 도구를 사용해 민감한 정보를 관리한다.


  • 원격 브랜치 강제 푸시:
    git push origin feature-21/feat --force
    

Step 4: .gitignore 확인

.env 파일이 다시 커밋되지 않도록 .gitignore에 추가:

.env

커밋:

git add .gitignore
git commit -m "Add .env to .gitignore"
git push origin 브랜치이름

2. 추가 주의사항

  • API 키 무효화: .env에 포함된 API 키는 즉시 무효화하고 새 키로 교체한다.
  • 강제 푸시 주의: git push --force는 히스토리를 덮어쓰므로, 팀원과 협의 후 진행한다.

profile
신나는 개발일기

0개의 댓글