2014-09-16 3 views
4

나는 자식 저장소에서 큰 파일을 제거 할 수 BFG 리포 - 클리너를 사용했다 : 나는 전에 BFG 리포-클리너를 실행 한 후 내 저장소를 확인하는 스크립트 (http://stubbisms.wordpress.com/2009/07/10/git-script-to-show-largest-pack-objects-and-trim-your-waist-line/)를 사용해BFG Repo-Cleaner가 큰 파일을 git 저장소에서 올바르게 제거했는지 확인하는 방법은 무엇입니까?

java -jar ../bfg-1.11.8.jar --delete-folders escrow application.git 
cd application.git 
git reflog expire --expire=now --all 
git gc --prune=now --aggressive 
cd .. 
mkdir clone 
cd clone 
git clone file:///home/damian/temp/TCLIPG-4370/test/application.git 

그것은 보여줍니다 에스크로 디렉토리를 제거하고 두 저장소에서 메모리를 줄일 수 있습니다.

모두 괜찮은 것처럼 보이지만 내 커밋이 모두 동일한 지 어떻게 확인할 수 있습니까? git-for-each-ref로 스크립트를 만들고 BFG가 올바르게 작동했는지 확인하기 위해 두 저장소에서 같은 이름으로 커밋을 비교해야합니까?

의견을 보내 주시면 대단히 감사하겠습니다.

답변

2

신속하고 더러운 기술 - 지금까지

이 이전에서 샤를 사용하여 큰 파일

git hash-object <large-file> 

의 덩어리 샤에서 인쇄 할 수 있던 큰 파일의 한 버전이 있었다 추정 step

git cat-file -p <large-file-sha> 

이것이 실패하면 해당 블롭을 참조하는 커밋이 없음을 알 수 있습니다.

커밋을 모두 확인하려면 (큰 파일을 제거하기 때문에 여기에서 '다른'은 같은 의미입니다) 원래의 커밋을 diff 트리로 작성해야합니다. 그리고 새로운 커밋. 당신은 for-each-ref를 사용하지 않을 것이고, rev-list를 사용할 것이고, 당신은 BFG 툴을 가지고 있지 않을 수도있는 오래된 sha를 새로운 sha에 맵핑하는 메커니즘이 필요할 것이다. 당신이 설명하는대로 가지 팁을 확인할 수 있습니다.

당신은 에릭 S. 레이몬드의 repodiffer (그의 reposurgeon 프로젝트의 일부)에서 독립적 인 의견을 얻을 수
+1

BFG는 유용 할 수도있는 object-id 매핑 파일 (old new)을 생성합니다. https : //github.com/rtyley/bfg-repo-cleaner/issues/18#issuecomment-17973838 –

2

: http://www.catb.org/~esr/reposurgeon/repodiffer.html

는이처럼 사용

$ repodiffer old-repo-copy.git new-repo-copy.git 

스크립트가 실행하는 데 시간이 걸릴 수 있습니다 하지만 두 리포지토리간에 무엇이 바뀌 었는지 정확하게 알려줄 것입니다. 출력의 작은 샘플 :

... 
1a54b66 -> 9b11d44: same differences as for 5c572dc -> 6e8307c. 
changed: e00a601 -> 30a42c8 in tree. 
L only: 
    frontend/assets/big.mp4 
R only: 
    frontend/assets/big.mp4.REMOVED.git-id 
... 

전체 공개 : 나는 BFG 리포-클리너의 저자입니다.