2010-05-21 3 views
34

웹 어딘가에 공용 git 저장소가 있다고 가정합니다. 나는 그것을 복제하고 싶지만 먼저 그것의 크기가 무엇인지 확인해야한다. (얼마나 많은 물체 & 킬로바이트가 git count-objects에있는 것)git 저장소의 객체와 크기를 원격으로 계산할 수 있습니까?

거기에 할 수있는 방법이 있습니까?

+2

을 당신은 GitHub의 크기를 찾아 자신의 API에 저장소 감사를 호스팅 할 수 @Dogbert (이 [SO 질문] (HTTP를 참조하십시오. com/questions/8646517/see-a-github-repo-before-cloning-it)를 참조하십시오. 하지만 개체 수와 관련된 아무 것도 발견하지 못했습니다. Hth. – nulltoken

답변

16

다음과 같은 것 사용할 수있는 하나의 작은 kludge :이 라인을 따라

mkdir repo-name 
cd repo-name 
git init 
git remote add origin <URL of remote> 
git fetch origin 

git fetch 표시 피드백 : 일반적으로 꽤 빨리 일어날 원격 끝에

remote: Counting objects: 95815, done. 
remote: Compressing objects: 100% (25006/25006), done. 
remote: Total 95815 (delta 69568), reused 95445 (delta 69317) 
Receiving objects: 100% (95815/95815), 18.48 MiB | 16.84 MiB/s, done. 
... 

단계; 그것은 시간 소모적 인 수령 단계입니다. 실제로 총 크기를 표시하지는 않지만 잠시 볼 수 있습니다. "1 % ... 23.75 GiB"가 표시되면 문제가 있음을 알게되고 취소 할 수 있습니다.

+5

이것이 유효할까요? 나는 비율이 데이터의 크기가 아닌 객체의 수를 나타냅니다 생각합니다. – jhabbott

+1

나는 이것이 당신에게 정확한 숫자를 주었다고 말하지 않았다. 당신이 저장소가 너무 컸는지를 알 수있는 방법으로 그것을 사용할 수있다. – Cascabel

+2

이 루트를 사용하고 싶다면'git fetch --dry-run'을 실행하면 데이터 전송 전에 취소 할 필요가 없습니다. 하지만 네가 맞아. 불완전한 흙더미 야. –

1

내가 알고하지 않는 것이 : 요청을 듣고 기본적으로 아무것도,
힘내는 서버가 아닌
그리고 명령과 함께 "git remote ..."거래 (당신은 gitweb, 또는 gitolite 층을 활성화하지 않은 경우) 로컬 원격 저장소를 복사 (가져옴)합니다.

그래서 뭔가를 가져 오지 않으면 원격 저장소 인 clone --bare 크기를 알 수 없습니다.
그리고 일단 체크 아웃하면 작업 디렉토리의 크기는 포함되지 않습니다.

2

는이 질문에 몇 가지 문제가 있다고 생각합니다 : git count-objects 이 진정으로 (심지어 git count-object -v 정말 않습니다) 저장소의 크기를 나타내지 않는이; 멍청한 http 전송 이외의 것을 사용하고 있다면, 복제본을 만들 때 새 팩이 생성됩니다. 리모컨을 분석하기 위해 수행하는 작업 (VonC에서 을 가리킴)은 작업 복사본 크기 인 을 고려하지 않습니다. 그들이 바보 HTTP 전송을 (github에, 예를 들어, 가 아닌)를 사용하는 경우

말했다되는 것을, 모든 개체와 팩의 크기를 쿼리 컬 사용되는 쉘 스크립트를 작성할 수 있습니다. 그게 더 가까워 질지 모르지만 더 많은 http 요청을하면 실제로 복제를 수행하기 위해 다시 만들어야합니다.

git-fetch의 (a 스마트 HTTP 전송에) 회선을 통해 전송 것이 무엇인지 파악하고 그 결과를 분석하는 것을 보낼 수있다,하지만 정말 할 수있는 좋은 것은 아니다. 기본적으로 대상 서버에 개의 결과를 다운로드하여 버리도록 요청하면 다운로드하여 다시 버릴 수 있으므로 을 다시 다운로드하여 저장할 수 있습니다. 다음 단계 같은

뭔가이 효과를 사용할 수 있습니다 :이 모든 것의 끝에

url=https://github.com/gitster/git.git 
git ls-remote $url | 
    grep '[[:space:]]\(HEAD\|refs/heads/master\|refs/tags\)' | 
    grep -v '\^{}$' | awk '{print "0032want " $1}' > binarydata 
echo 00000009done >> binarydata 
curl -s -X POST --data-binary @binarydata \ 
    -H "Content-Type: application/x-git-upload-pack-request" \ 
    -H "Accept-Encoding: deflate, gzip" \ 
    -H "Accept: application/x-git-upload-pack-result" \ 
    -A "git/1.7.9" $url/git-upload-pack | wc -c 

는 원격 서버는 마스터/HEAD를 포장하고 당신을 위해 모든 태그와 당신은 것이다 것 전체 팩 파일을 에 다운로드 했으므로 복제 중에 다운로드 할 때 얼마나 큰지보십시오.

최종적으로 복제본을 만들면 작업 복사본도 생성되므로 전체 디렉토리가 이러한 명령보다 더 커지지 만 팩 파일 은 일반적으로 작업 사본의 가장 큰 부분입니다. 중요한 역사.

12

github 저장소의 경우 파일 크기를 확인하는 API를 제공합니다. 그것은 작동합니다!

이 링크 : see-the-size-of-a-github-repo-before-cloning-it 대답했다

명령 : (@VMTrooper에서 답)

curl https://api.github.com/repos/$2/$3 | grep size 

예 :

curl https://api.github.com/repos/Marijnh/CodeMirror | grep size 
% Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 5005 100 5005 0  0 2656  0 0:00:01 0:00:01 --:--:-- 2779 
"size": 28589, 
3

개체 수를 제공하지만, 만약하지 않습니다 Chrome 브라우저를 사용하여 설치하십시오. extension

그것은 홈 페이지에 REPO 크기를 추가합니다 : // 유래 :

GitHub Repo Size extension screenshot

관련 문제