결론
깃 이닛 후에는 꼭 깃 이그노어부터 만들 것.
장고강의를 듣고 홈브류를 통해 파이썬 3.10버전을 추가로 깔아서 븨에스 코드에서 폴더단위로 인터프리터 설정과 가상환경을 야심차게 만들었따... 심지어 어디서든 작업하겠다고 AnyWork로 만들어서 깃헙에 푸시까지 했다.
하지만 바보같은 나는 크나큰 실수를 하고야 말았다.
그냥 푸시를 한것이다...
venv의 큰 용량은 깃허브를 놀라게 해버렸고, 큰 용량으로 푸쉬가 중단되었다.
그제서야 부랴부랴 깃 이그노어를 만들고 벤브를 추가했지만 소잃고 외양간 고치는 사람마냥 계속 오류가 생겼다...ㅠㅠ
로그도 삭제하고, 벤브를 추적하는 것도 끊고, 멀쩡한 깃허브 레포를 지우고 새로 생성도 해보고, 벤브 폴더 지우고 새로 리콰이먼츠로 받아도 보고, 벤브 폴더 지운채로 푸시도 해봤지만 망령같은 벤브 푸쉬는 끈질기게 나를 괴롭혔다...
계쏙!!! 큰 용량이 푸시 되려고 시도하는것이었따!
내 폴더에는 test.py 밖에 없고 그 안에는 print("hello")밖에 없는데도 말이다 ㅠㅠㅠ
하지만 결국 방법을 찾았따.
히스토리가 문제였다.
Git 히스토리에서 완전히 제거하려면 아래 방법대로 하면 된다.
# 1. 현재 상태 백업 (선택사항이지만 권장)
git branch backup-main
# 2. BFG Repo Cleaner를 사용하거나 git filter-repo를 사용해서 히스토리에서 venv 폴더 제거
# BFG 사용 예시:
bfg --delete-folders venv
# 또는 git filter-repo 사용:
git filter-repo --invert-paths --path venv/
# 3. 강제로 push
git push origin main --force
주의점:
- 이 작업은 Git 히스토리를 다시 쓰는 작업이라 위험할 수 있
- 팀 프로젝트라면 다른 팀원들과 상의가 필요....(깃 이그노어 제발 먼저 만들자)
- force push가 필요함
아참 git-filter-repo 없는 사람은 깔아야 한다.
맥이면 Homebrew로 설치하면 된다.
brew install git-filter-repo
설치하고 다시 위에 코드 따라가면 된다.
근데 오류가 날 수 있다.(내가 그랬으니까)
그러면 두가지 방법을 택할 수 있는데 알아서 선택해서 하면된다.
현재 저장소의 상태가 깨끗하지 않을 수 있어서, 새로운 복사본에서 작업하는 것이 더 안전할 수도 있다.
각자 알아서 선택 ㄱㄱ
첫번째 방법
# 1. 현재 위치를 기억
cd ..
# 2. 새로운 복사본 생성
git clone file://$(pwd)/AnyWork AnyWork-clean
# 3. 새 복사본으로 이동
cd AnyWork-clean
# 4. filter-repo 실행
git filter-repo --invert-paths --path venv/
# 5. 강제 push
git push origin main --force
두번째 방법
git filter-repo --invert-paths --path venv/ --force
난 두번째 방법으로 했다.
왜냐면 혼자 쓸려고 만든 레포와 가상환경들이니까 솔직히 문제 생기면 안쓰고 새로 만들면 된다는 마음이었다.
아무튼 여기까지 했으면 다시 깃허브와 연결해죠야한다.(필터링 작업 후에는 remote repository 연결이 끊어짐)
git remote add origin [YOUR_REPOSITORY_URL]
그다음 아래 명령어 실행하면 끝이다.
git push origin main --force
이 명령어는 원격 저장소의 히스토리를 현재의 수정된 히스토리로 덮어쓰게 만든다..
주의: 이 작업 후에 팀의 다른 멤버들은 변경된 히스토리를 가져오기 위해 저장소를 새로 clone 하거나 reset 해야 할 수 있음(회사였으면 끔찍)
뭐 잘 해결됐는지 확인하고 싶은 사람은 아래 명령어로 확인해보면 된다.
큰 파일들이 제거되었는지 확인:
git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | sed -n 's/^blob //p' | sort -k2nr | head -10
venv 폴더가 더 이상 추적되지 않는지 확인:
git ls-files | grep venv
내 터미널 결과를 보면 완벽 해결
#큰 파일들이 제거되었는지 확인:
t2023-m0122@t2023-m0122ui-MacBookAir ~/Desktop/JY/AnyWork main
git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | sed -n 's/^blob //p' | sort -k2nr | head -10
4e1b2ac36d4d3fd36e62263b63cae2ed6dea86ab 1600 requirements.txt
77dbfd96a910e9a23ec807c6788647872b302541 176 requirements.txt
71f06aaa375a2ab3ca5b3913fa6f988578370682 15 test.py
ce47b771f4fdb0c612745ca4b7c36695f3853f7c 14 test.py
f7275bbbd035b827023cbae18954c0703b200c34 6 .gitignore
eba74f4cd2e2acfb1470300d69b58d8cff458c68 5 .gitignore
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 test.py
#venv 폴더가 더 이상 추적되지 않는지 확인:
t2023-m0122@t2023-m0122ui-MacBookAir ~/Desktop/JY/AnyWork main
git ls-files | grep venv
✘ t2023-m0122@t2023-m0122ui-MacBookAir ~/Desktop/JY/AnyWork main
결론
깃 이닛 후에는 꼭 깃 이그노어부터 만들 것.
'Today I learned' 카테고리의 다른 글
2025.01.03 파이썬 클래스의 메서드 (4) | 2025.01.03 |
---|---|
WIL (5) | 2025.01.03 |
2024.12.30 백준 - 너의평점은(25206번) (0) | 2024.12.30 |
냥타로 수정 (2) | 2024.12.28 |
2024.12.27 과제끗, 냥타로 없뎃 (3) | 2024.12.27 |