일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- tuist #xcodecloud #ios #ci/cd #swiftlint #firebase
- TCA
- composablearchitecture
- uikit
- SWIFT
- Tuist
- iOS 13.0+
- xcodecloud
- concurrency
- Navigation
- 개발
- github
- 모바일
- SWIFTUI
- 정규표현식
- regex
- ios18
- xcode
- swiftdata
- Alamofire
- ObjC
- network
- Firebase
- Git
- IOS
- combine
- test
- navigationsplitview
- iOS 개발자
- UI
- Today
- Total
iOS 개발 기록
[Git] 100MB 이상의 파일이 담긴 커밋을 푸쉬해야할 때 본문
앱을 개발하다가 밀린 커밋을 Github에 푸쉬하려는데 다음과 같은 에러가 떳다.
Github에는 파일 용량이 50MB 이하이기를 권장한다. 따라서 해당 에러에서는 2가지를 확인할 수 있다.
1. 50MB 이상인 경우 Warning를 표시한다.
2. 100MB 이상인 경우 Error처리 후 원격 저장소에 푸쉬가 안된다.
확인해보니 CocoaPods를 통해 설치했던 Realm에 있는 시뮬레이터의 파일에서 용량을 초과한 것 같았다.
해당 파일을 삭제해도 문제가 될 것 같지는 않았다. 그런데 나중에 사용하는 파일이 용량을 초과할 경우 어떻게 해결할지 미리 공부할 겸 찾아보았다.
해당 문제에는 크게 git-lfs를 사용하는 방법과 BFG Repo-Cleaner를 사용하는 방법이 있었다.
Git-LFS
1. 원리
git-lfs는 큰 용량의 파일을 직접 관리하는 것이 아니라 파일에 대한 텍스트 포인터로 관리한다. 그래서 원격 저장소로 push할 때에 포인터만 저장소로 올라가고 큰 용량의 파일은 Git저장소가 아니라 Large File Storage로 저장된다. 원격 저장소에서 clone할 때에는 포인터를 통해 해당 파일을 Large File Storage에서 다운로드해 체크아웃 한다.
2. 설치와 사용
해당 사이트를 통해 다운받을 수도 있고, Homebrew가 설치되있다면 터미널에서 다음 명령어를 통해 설치할 수 있다.
// homebrew를 통해 설치
brew install git-lfs
git-lfs을 사용하기 위해서 사용할 로컬 저장소에서 다음 명령어들을 실행한다.
// lfs 적용
git lfs install
// 특정 확장자를 가진 파일들을 lfs로 관리할 경우 - (예 : .a 파일)
git lfs track "*.a"
// 특정 파일을 lfs로 관리할 경우
git lfs track "경로/파일 이름"
// 대용량 파일을 추적하기 위해 생긴 포인터. 꼭 add 해줘야한다.
git add .gitattributes
대용량 파일을 track 해두면 이후에는 해당 파일이 자동으로 git-lfs에 의해 관리 되어서 그냥 푸쉬하면 된다.
그런데 나는 git-lfs로 해결할 수 없었다. 이미 100MB 의 파일이 포함된 커밋 후에도 쌓인 커밋들이 많았기 때문 ....
lfs는 현재 설치 이후의 커밋들에만 적용이 되었다.
BGF Repo-Cleaner
1. 원리
문제가 되는 해당 파일과 텍스트 부분의 기록을 제거해주는 심플하지만 강력한 도구이다.
나는 100MB가 넘는 파일들을 지우기 위해 사용했지만 개인정보와 같은 민감한 정보들이 커밋 되었을 때에도 해당 부분을 수정하기 위해 사용할 수도 있다고 한다.
2. 설치와 사용
역시 홈페이지와 Homebrew를 통해 설치할 수 있다.
나는 처음에는 Homebrew를 통해 다운받았는데 사용할 때에 명령어들을 실행하니 "unable to access jarfile bfg.jar " 는 에러가 계속 떠서 홈페이지에서 다운받았고 로컬 저장소 경로에 파일을 넣어서 명령어를 실행했다.
https://rtyley.github.io/bfg-repo-cleaner/
//Homebrew를 통해 설치
brew install bfg
설치 후 해당 로컬 저장소로 이동해 필요에 따른 명령어를 실행한다.
// bfg-'해당 버전'.jar를 적으면 된다. 현재 버전이 1.14.0이므로 그대로 적는다.
// 특정 크기 이상의 파일을 지울 때
java -jar bfg-1.14.0.jar --strip-blobls-bigger-than 100M
// 특정 이름의 파일을 삭제 때
java -jar bfg-1.14.0.jar --delete-files_{"파일 이름"}
후에 원격 저장소로 편하게 푸쉬할 수 있었다.
배운점
1. 커밋과 푸쉬는 쌓아두지 말고 그때그때 하자 ...
2. 100MB 이상의 파일을 Git으로 관리하는 법
3. 이전 커밋들에 민감한 정보들이 있을 때 이를 삭제, 수정하는 법
'Git' 카테고리의 다른 글
[Git] git 기본 (0) | 2023.02.14 |
---|---|
[Git] CLI 기본 명령어 (0) | 2022.05.13 |