ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Git] git filter-repo로 올리면 안되는 파일기록 말소하기
    📚 개발백과 2024. 6. 24. 16:06
    728x90

    상황:

    DB data 가 들어있는 data 파일을 원격 저장소에 푸쉬했다.

     

    파일구조:

    .
    ├── Dockerfile
    ├── build
    ├── build.gradle
    ├── data ⬅️ ‼️
    ├── docker-compose.yml
    ├── gradle
    ├── gradlew
    ├── gradlew.bat
    ├── readme.md
    ├── settings.gradle
    └── src

     

     

    참고:

    data 디렉토리는 커밋 후 수정한 적이 없고 다른 폴더와 연관관계가 없다.

     

     

    해결: 

     

    1. git filter-repo 설치

    brew install git-filter-repo

     

     

    2. 

    선택 1) 안전한 방법

    # 새로운 클론 생성
    git clone https://your-repo-url.git
    cd your-repo-name
    
    # git filter-repo 실행
    git filter-repo --invert-paths --path data

     

    선택 2) 난 괜찮다는 확신이 있다

    git filter-repo --invert-paths --path data --force

     

     

    Completely finished after xx seconds. 가 뜨면 1차 성공.

    하지만 원격 저장소 설정이 사라진다. (git remote -v 로 확인)

    이유: git filter-repo가 리포지토리의 히스토리를 재작성할 때, 원격 저장소 설정을 포함하지 않기 때문. 이로 인해 원격 저장소 설정이 지워짐

     

     

    3. 원격 저장소 다시 연결

    git remote add origin 주소.git
    
    # 잘 연결되었나 확인
    git remote -v

     

     

     

    4. 원격 저장소의 변경사항(=기록 말소)을 로컬로 병합

    git pull origin develop --rebase
    
    # 병합 충돌시
    # 충돌된 파일을 수정한 후
    git add <conflicted-file>
    git rebase --continue

     

    5. 변경사항 강제 푸시

    git push origin 브랜치명 --force

     

     

    추가)

    main, develop 브랜치 모두에 data 폴더가 올라간 상황이다.

    그렇다면 두 브랜치 각각에서 모두 해당 명령어를 실행해야한다.

    다만 첫 번째 브랜치에서 원격에 재푸쉬 한 이후에 다른 브랜치로 local checkout 하면 데이터가 날라간 것 처럼 보일텐데,

     git filter-repo 가 히스토리를 재작성하면서 로컬 브랜치도 전부 날려서 그럼

    해결 -> 1. 원격 브랜치로 checkout / 2. 로컬 브랜치와 원격브랜치를 연결, git pull 

    728x90
Designed by Tistory.