자식 저장소 크기 줄이기


290

나는 repo 크기를 줄이는 좋은 자습서를 찾으려고했지만 아무것도 찾지 못했습니다. 리포지토리 크기를 줄이려면 ... 약 10MB이지만, Heroku는 50MB 만 허용하며 앱 개발이 거의 끝나지 않았습니다.

나는 일반적인 용의자 (log, vendor, doc 등)를 .gitignore에 이미 추가했습니다. 최근에 .gitignore 만 추가했지만.

어떤 제안?


1
방금했는데 2.2MB로 떨어졌습니다 ... 많은 감사합니다! 비록 그것이 Heroku에서 repo 크기를 줄이는 것처럼 보이지는 않았지만 .. hmm
sent-hil

11
--force를 사용하여 푸시하십시오. 새로운 커밋 등이 변경되지 않은 경우에도 내용을 덮어 쓰게됩니다.
Marcin Gil

1
@MarcinGil-아래에서 VonC는 원격 서버를 정리하기 위해 서버에 액세스해야한다고 말합니다 (정확하게 구문 분석하는 경우).
jww

1
다른 독자가에 추가 할 내용을 모른다면 .gitignoregitignore.io에는 .gitignore개발자 환경에 따라 좋은 것을 설정하는 데 도움이되는 훌륭한 서비스가 있습니다.
Blairg23

답변:


352

git gc --aggressive정리 프로세스를 강제로 수행하는 한 가지 방법입니다 (확실히 :) git gc --aggressive --prune=now. 당신이 다른 명령 너무 REPO를 청소합니다. 그러나 때때로 git gc혼자서 repo의 크기를 늘릴 수 있음을 잊지 마십시오 !

또한 a 다음에 사용 filter-branch하여 일부 디렉토리를 히스토리에서 제거하도록 표시 할 수 있습니다 (추가 공간 확보). 여기를 참조 하십시오 . 그러나 그것은 아무도 당신의 공개 리포지토리에서 당기고 있지 않다는 것을 의미합니다. 디렉토리를 정리할 filter-branch수 있도록 백업 참조를에 보관할.git/refs/original 수 있습니다.

마지막으로, 언급 한 바와 같이 이 댓글에이 질문 ; Reflog를 청소하면 도움이 될 수 있습니다.

git reflog expire --all --expire=now
git gc --prune=now --aggressive

더 완벽하고 위험한 해결책은 git 저장소에서 사용하지 않는 객체를 제거하는 것입니다.



1
자체 참고 사항 : 원격 브랜치를 잊지 마십시오 : stackoverflow.com/questions/11255802/…
VonC

1
자기 소개 : 원격 태그를 잊지 마십시오
saiyancoder

1
원격 참조 외에도 reflog는 제거하려는 참조가 유지되도록하는 또 다른 원인입니다. stackoverflow.com/q/27489761/1072626
vossad01

1
@ jww 나는 이것이 순전히 로컬 작업임을 확인합니다. 원격 저장소의 크기와 관련이 없습니다. 동일한 원격 저장소의 서버에 직접 액세스해야합니다.
VonC 2016 년

94

답장을 보내 주셔서 감사합니다. 내가 한 일은 다음과 같습니다.

git gc
git gc --aggressive
git prune

그 트릭을 한 것 같습니다. 나는 약 10.5MB로 시작했고 지금은 980KB를 조금 넘습니다.


8
prune항상 gc2 주 전으로 실행됩니다 .
Cas

117
U는 현재 사용까지 자두와 3을 실행할 수 있습니다git gc --aggressive --prune=now
rahul286

1
그러나 repo를 삭제하고 다시 복제하면 크기가 여전히 큽니다. 어떻게 처리합니까?
cwtuan

2

필자의 경우 몇 개의 큰 (> 100Mb) 파일을 푸시 한 다음 계속해서 제거했습니다. 그러나 그들은 여전히 ​​내 레포의 역사에 있었기 때문에 그것들을 제거해야했습니다.

그 트릭은 무엇 이었습니까?

bfg -b 100M  # To remove all blobs from history, whose size is superior to 100Mb
git reflog expire --expire=now --all
git gc --prune=now --aggressive

그런 다음 지점에 힘을 가해 야합니다.

git push origin <your_branch_name> --force

bfg 는 brew를 사용하여 Linux 및 macOS에 설치할 수있는 도구입니다.

brew install bfg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.