우리는 오늘 같은 문제가 있다고 생각하고 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 분 동안의 변경을 제외하고는 의미합니다.
저는 bitbucket을 말할 수 없지만, 일반적으로 베어 클론은 reflog를 보관하지 않습니다. rerere 데이터도 없습니다. 일반적으로 원격지의 심판을 업데이트하고 거기에서 gc를 트리거해야합니다. – torek