-
Github에 100MB 이상의 용량 파일 올리는 방법개발 2020. 1. 3. 00:56728x90
Github 에 100MB 이상의 파일을 올리려고 시도하면 다음과 같은 에러가 나면서 올라가지 않는다. ㅠㅠ
LFS
LFS(Large File Storage) 는 큰 파일을 처리하기 위한 github에서 만든 오픈소스이다.
원래 github 에는 큰 용량의 이진파일을 처리하는데 적합하지 않다. 바이너리는 소스코드와는 다르게 diff 를 용이하게 처리하는데 어려움이 있기 때문에 이진파일인 경우 형상관리를 하는데에 문제가 있을 수 밖에 없는것이다.
바이너리를 계속 Push 하게 되면 github 에서는 해당 파일에 대한 history 를 관리하기 위해 용량을 낭비하게 되는 것이다.
그래서 LFS 는 대용량 파일을 그대로 동일한 repository 에 저장하지 않고 분리된 Storage에 저장을 해두고, 해당 파일을 마치 C의 포인터처럼 가리키고 있는 방식으로 동작하게 된다.
어쨌든 해결을 해보도록 하자.
해결책
일단은 다음 사이트로 가서 LFS클라이언트를 설치해 준다
git clone 을 해둔 폴더로 가서 마우스 우클릭
Git Bash Here 를 선택해준다
터미널이 열릴테니 다음을 입력해준다
$ git lfs install Updated git hooks. Git LFS initialized.
그리고 100MB 넘는 파일을 tracking 하기 위해 다음을 입력
$ git lfs track "*.lib" Tracking "*.lib"
git lfs track 이라는 명령을 그냥 치면 어떤 파일이 track중인지 표시된다
이렇게 되면 .gitattributes 라는 파일이 생성되고 내부에 track중인 파일이 리스팅 된다 (요것도 git add 대상)
위와 같이 한번 설정해두면 이후에는 자동으로 100MB 넘는 파일이 LFS 를 통해서 관리되게 된다.
그냥 git push 하면됨
반전
근데 안됨!
계속 에러뜸 ㅠㅠ
이럴때는 100MB 이상의 파일 이전에 commit 한적이 있으면 안된다고 한다.
이럴때는 BFG Repo-Cleaner 를 실행해줘야한다.
다음 사이트에서 옆에 jar 파일을 다운로드 한다.
https://rtyley.github.io/bfg-repo-cleaner/
이거... 계속 복잡해지지만 어쨋든 끝까지 하면 빛을 볼 수는 있다. ㅠㅠ
jar 파일이므로 JRE또는 JDK가 컴퓨터에 설치되어 있어야 한다. 설치 안되어 있으면 다운로드 및 설치...
우리는 개발자니까 JDK 를 설치해주자.
JAVA 를 설치하고 나서 환경변수에 JAVA_HOME 과 Path 에 java/bin 폴더를 추가하는것 잊지말자.
이후
java -jar bfg-1.13.0.jar --strip-blobs-bigger-than 100M
를 입력하면 성공할줄 알았지만... 다음과 같은 에러가 날 수 있다.
D:\project\github\todengine3>java -jar bfg-1.13.0.jar --strip-blobs-bigger-than 100M Using repo : D:\project\github\todengine3\.git Scanning packfile for large blobs: 6092 Scanning packfile for large blobs completed in 67 ms. Warning : no large blobs matching criteria found in packfiles - does the repo need to be packed? Please specify tasks for The BFG : bfg 1.13.0 Usage: bfg [options] [<repo>] -b, --strip-blobs-bigger-than <size> strip blobs bigger than X (eg '128K', '1M', etc) -B, --strip-biggest-blobs NUM strip the top NUM biggest blobs -bi, --strip-blobs-with-ids <blob-ids-file> strip blobs with the specified Git object ids -D, --delete-files <glob> delete files with the specified names (eg '*.class', '*.{txt,log}' - matches on file name, not path within repo) --delete-folders <glob> delete folders with the specified names (eg '.svn', '*-tmp' - matches on folder name, not path within repo) --convert-to-git-lfs <value> extract files with the specified names (eg '*.zip' or '*.mp4') into Git LFS -rt, --replace-text <expressions-file> filter content of files, replacing matched text. Match expressions should be listed in the file, one expression per line - by default, each expression is treated as a literal, but 'regex:' & 'glob:' prefixes are supported, with '==>' to specify a replacement string other than the default of '***REMOVED***'. -fi, --filter-content-including <glob> do file-content filtering on files that match the specified expression (eg '*.{txt,properties}') -fe, --filter-content-excluding <glob> don't do file-content filtering on files that match the specified expression (eg '*.{xml,pdf}') -fs, --filter-content-size-threshold <size> only do file-content filtering on files smaller than <size> (default is 1048576 bytes) -p, --protect-blobs-from <refs> protect blobs that appear in the most recent versions of the specified refs (default is 'HEAD') --no-blob-protection allow the BFG to modify even your *latest* commit. Not recommended: you should have already ensured your latest commit is clean. --private treat this repo-rewrite as removing private data (for example: omit old commit ids from commit messages) --massive-non-file-objects-sized-up-to <size> increase memory usage to handle over-size Commits, Tags, and Trees that are up to X in size (eg '10M') <repo> file path for Git repository to clean
그러면 다음과 같은 명령을 친후
D:\project\github\todengine3>git repack && git gc
더보기Counting objects: 1149, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (1120/1120), done.
Writing objects: 100% (1149/1149), done.
Total 1149 (delta 124), reused 0 (delta 0)
Counting objects: 7241, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (4413/4413), done.
Writing objects: 100% (7241/7241), done.
Total 7241 (delta 2596), reused 7129 (delta 2484)다시 적용하면~
D:\project\github\todengine3>java -jar bfg-1.13.0.jar --strip-blobs-bigger-than 100M Using repo : D:\project\github\todengine3\.git Scanning packfile for large blobs: 7241 Scanning packfile for large blobs completed in 70 ms. Found 2 blob ids for large blobs - biggest=198766846 smallest=179020480 Total size (unpacked)=377787326 Found 1573 objects to protect Found 4 commit-pointing refs : HEAD, refs/heads/master, refs/remotes/origin/HEAD, refs/remotes/origin/master Protected commits ----------------- These are your protected commits, and so their contents will NOT be altered: * commit 812b841b (protected by 'HEAD') Cleaning -------- Found 65 commits Cleaning commits: 100% (65/65) Cleaning commits completed in 218 ms. Updating 1 Ref -------------- Ref Before After --------------------------------------- refs/heads/master | 812b841b | e3055c33 Updating references: 100% (1/1) ...Ref update completed in 16 ms. Commit Tree-Dirt History ------------------------ Earliest Latest | | ........................................................DDmm D = dirty commits (file tree fixed) m = modified commits (commit message or parents changed) . = clean commits (no changes to file tree) Before After ------------------------------------------- First modified commit | ddf838f9 | e656a708 Last dirty commit | 61aa5734 | 52b86a74 Deleted files ------------- Filename Git id -------------------------------------- libfbxsdk-md.lib | eaa7a71e (170.7 MB) libfbxsdk-mt.lib | be6c7def (189.6 MB) In total, 12 object ids were changed. Full details are logged here: D:\project\github\todengine3.bfg-report\2020-01-03\00-17-25 BFG run is complete! When ready, run: git reflog expire --expire=now --all && git gc --prune=now --aggressive -- You can rewrite history in Git - don't let Trump do it for real! Trump's administration has lied consistently, to make people give up on ever being told the truth. Don't give up: https://www.theguardian.com/us-news/trump-administration
성공했다!
이후 git push 를 하면 드디어 Push 에 성공한다!
뭔갈 할래도 쉽게 되질 않는다. ㅠㅠ
그냥 100MB 이하 파일만 올리도록 하자.
728x90'개발' 카테고리의 다른 글
윈도우 탐색기의 Context Menu 에 Sublime 실행 추가 (0) 2018.11.11 Firebase Crashlytics 관련 자료 (0) 2018.09.06 _get_wpgmptr 이 크래쉬 날때 (0) 2015.07.09