2015-01-09 4 views
9

최근 Bitbucket repo에서 크기 제한이 떨어졌습니다. 나는 git repo를 정리하는 방법에 답하는 무수한 다른 질문을 따라 갔고 BFG를 사용하여 나쁜 커밋을 제거했다.원격 git repo에서 쓰레기를 정리하는 방법

그러나 위대한 일을했지만, git count를 실행 한 후에 쓰레기에 많은 양의 공간이 있음을 발견했습니다. 그래서 간단한 git gc를 실행했습니다. 그러나, 그것은 쓰레기를 치우는 것을 아무것도하지 않았다.

git -c gc.reflogExpire=0 -c gc.reflogExpireUnreachable=0 -c gc.rerereresolved=0 \ 
-c gc.rerereunresolved=0 -c gc.pruneExpire=now gc "[email protected]" 

이 로컬을 청소하고 쓰레기를 주도 실행 :

는 뒷조사 후 나는 다음과 같은 명령을 발견했다. 그러나 원격 Repo 문제는 여전히 있습니다. 내 원격 저장소에서이 명령을 실행하려면 Bitbucket을 가져야합니까, 아니면이 변경 사항을 저장소로 푸시 할 수있는 방법이 있습니까?

+2

저는 bitbucket을 말할 수 없지만, 일반적으로 베어 클론은 reflog를 보관하지 않습니다. rerere 데이터도 없습니다. 일반적으로 원격지의 심판을 업데이트하고 거기에서 gc를 트리거해야합니다. – torek

답변

7

다른 누구에게도이 문제가 발생하면 대답은 '예'로 나타납니다. 1기가바이트 아래에,

bash-4.1$ git reflog expire --expire="1 hour" --all 
bash-4.1$ git reflog expire --expire-unreachable="1 hour" --all 
bash-4.1$ git prune --expire="1 hour" -v 
bash-4.1$ git gc --aggressive --prune="1 hour" 

사전이 2GB의 이상에서 감소 원격 REPO 크기 후 :

의 Bitbucket 지원은 다음을 달렸다.

14

우리는 오늘 같은 문제가 있다고 생각하고 Bitbucket 지원에 연락하지 않고 해결할 수있었습니다. 은이 방법을 사용하여 repo에서 마지막 커밋을 버립니다. 따라서 백업을 원할 수 있습니다.

Bitbucket은 우리 repo가 ​​약 2.1GB 인 반면, 복제 할 때는 로컬에서 약 250MB 밖에 걸리지 않는다고보고했습니다. 이로부터 도달 할 수없는 커밋의 큰 파일 (this answer 덕분에)에서 가장 가능성이 높은 것으로 결론지었습니다.

git reflog expire --expire-unreachable="now" --all 
git prune --expire="now" -v 
git gc --aggressive --prune="now" 

:

로컬 git fsck --unreachable --no-reflog

, 도달 할 수없는 커밋이로 세척 할 수 있습니다

이것은 우리가 reflog를 통해 계정 접근 가능성을 고려하지 않는 경우, 도달 할 수없는 로컬 커밋을 참조하는 방법입니다 그러나 Bitbucket에서 이러한 명령을 원격으로 실행할 수는 없습니다. 그러나, 그들은 git push -f 다음 git reset --hard HEAD~1을 (파기 마지막를 저지하는) 일에 대한 응답으로 git gc 자신을 실행하는 것이 (저장소 제한을 제거 섹션 ) the page about reducing repo size에 말한다. 또한 그들은 섹션에서 쓰레기 수거 데이터을 수집 할 수 있다고 말합니다. git reflog expire --expire=now --all, git gc --prune=now, git push --all --force.

git reflog expire --expire-unreachable="30m" --all 
git prune --expire="30m" -v 
git gc --prune="30m" 
git reset --hard HEAD~1 
git push -f 
:이 모든 감안할 때, 나는 그것이 reflog를 잘라 로컬 자두을 할 거라고 기대하고, 로컬 다음 시도하고 그것이 GC를 시작했으면하는 원격의 Bitbucket 저장소에 밀어하기로 결정

이것은 효과가 있었고, repo 크기는 즉시 2.1GB에서 ca. 250MB.:)

expire/expire-unreachable/prune에 대한 시간 매개 변수는 지금부터 측정 한 만료 컷오프 지점을 설정합니다. 그래서 예. "지금"은 모든 것을 만료/정리하는 것을 의미하고, "30m"은 지난 30 분 동안의 변경을 제외하고는 의미합니다.

+0

'git reset --hard HEAD ~ 1'과'git push -f' 트릭은 골드 먼지입니다, 감사합니다! – Liam

+1

이 작업은 모든 분기에서 작동합니까, 아니면 마스터에서 재설정해야합니까? –

+0

매력처럼 작동합니다. 감사합니다. –

관련 문제