2014-10-15 2 views
1

이전 프로젝트로 돌아가서 일부 업데이트를 수행 했으므로 이제는 저장소가 얼마나 지저분한 지 아무도 언급하지 않았습니다. 그것은 많은 커밋을 많이 가지고 있으며 매우 잘 관리되지 않은 것 같습니다 아주 오래된 하나입니다.지저분한 지저분한 저장소에서 파일을 제거하려고 시도했지만 제거되지 않는 것 같습니다.

짧은 이야기 .git 파일은 이제 4.02Gb (예, 오른쪽, 기가 바이트) 크기입니다. 나는 처음부터 추적해서는 안되는 오래된 파일들을 모두 제거하려고한다. (필자는 .ipa와 .swfs를 즉시 볼 수있다.)

저는 atlassian이 자신의 Maintaining a Git Repository에서 추천하는 작은 쉘 스크립트를 사용했습니다.이 스크립트는 매우 도움이되는 상위 10 명의 범죄자를 나열했지만, 기록에서 파일을 제거하는 데 어려움을 겪고 있습니다.

모두가 가비지 수집을 제안한 다음 실행하고있는 것처럼 보였습니다. git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch <file/dir>' HEAD을 실행 해 보았습니다. 나는 너무 거대하기 때문에 공격적인 GC를 사용하지 않으려 고 노력했습니다. 몇 시간이 걸립니다. 그러나 함께 GC를 실행 한 후 : git gc --prune=now 그것은 어떤 영향을 미치지 않는 것 같아요 그리고 가장 큰 파일의 목록을 내 스크립트를 실행할 때 같은 파일이 나타납니다.

크기를 줄이기 위해 내 저장소의 모든 내역에서 이전에 커밋 된 파일을 제거하려면 어떤 명령을 사용해야합니까?

답변

1

당신은 원래 심판이 자식 필터 - 지점에 의해 백업 제거 the Checklist for Shrinking a repository

에서이 두 단계를 누락하는 것은 : 이눔 말에 대한-각-REF --format = "% (refname)"심판/원본/| xargs -n 1 git update-ref -d.

git reflog로 모든 reflog를 만료 시키십시오. expall --expire = now --all.

또한, 나는 git gc --aggressive 대신 내가`자식 분기` 을 -d와 다른 모든 지점을 제거했습니다

git repack -ad --depth=250 --window=250 
+0

안녕하세요 앤드류, 네 말이 맞아요. 나는 그 몇 걸음도 놓쳤습니다! 나는 원래 Windows 용 자식에서 실행했지만 리눅스 컴퓨터로 옮겼습니다.'git for-each-ref' 명령이 파이프와 올바르게 작동하지 않기 때문입니다. 그러나 이것의 아무도는 문제를 해결 한 것을 보이지 않는다, 파일은 큰 파일 로케이터 원본 및를 달릴 때 아직도 나타난다.자식 파일 크기가 전혀 줄어들지 않습니다. 어떤 아이디어? –

+0

큰 파일 찾기 스크립트는 blob 만 반환합니까? 아니면 커밋을 제공합니까? –

+0

blob을 반환하는 중, 참조 용으로 실행되는 주요 명령은 다음과 같습니다 :'git verify-pack -v .git/objects/pack/pack - *. idx | grep -v 체인 | 정렬 -k3nr | head'를 선택하면 저장소 트리의 크기, 압축 된 크기, sha 및 객체 위치가 화면에 표시됩니다. –

1

현재 현재 사용중인 지점 (HEAD)을 다시 작성했습니다. 오래된 커밋을 유지하는 다른 refs가있을 수 있습니다 - 다른 브랜치 나 오래된 커밋의 태그.

물론 분기의 새 복사본을 밀어 넣기 전까지는 오래된 리모컨 (예 : origin/master)이 이전 커밋을 계속 유지합니다.

+0

사용하지 않도록한다. 지금 한 명의 주인이 있습니다. 그래서 나는 뭔가를 놓치지 않으면 이것이 원인이 될 것이라고 생각하지 않았을 것입니까? –

+0

"한 명의 마스터"가 로컬 마스터입니까? 여전히 '원점/마스터'가 있습니까? 태그가 없습니까? – Useless

+0

죄송합니다. 모호했습니다. 이 모든 것이 파괴적이기 때문에 주요 저장소에서 아무 것도 망치지 않도록 모든 큰 파일을 제거하는 테스트를하고 있습니다. 로컬 사본을 가져 와서 리모컨을 제거한 후 마스터가 아닌 다른 모든 지점을 삭제했습니다. 저장소에는 태그가 없습니다. –

관련 문제