2013-07-16 2 views
1

내 저장소를 해외에서 사용할 사용자의 다운로드 시간을 줄이길 기대하고 있습니다. 나는 이것이 너무 느리다는 것에 대한 불만을 접수했다.복제 할 때 git을 정확히 다운로드하고 크기를 줄이는 방법은 무엇입니까?

나는 모든 객체를 조사하고 가장 큰 객체를 찾기 위해 저장소에서 스크립트를 실행했습니다. 여기에 마지막 표는 다음과 같습니다

|  size |  pack | SHA  | location          | 
|----------+----------+----------+----------------------------------------------| 
| 7755956 | 7715996 | ecb5febf | media/promo/some.mp4       | 
| 7082482 | 7019098 | 108b2909 | media/promo/some.webm      | 
| 5154689 | 5079200 | 1c20bd3b | media/promo/some.ogv       | 
| 3889885 | 3657066 | 2ad1b747 | AdModule/AdModule/media/other.mp4   | 
| 3799591 | 3772833 | 7a901d41 | AdModule/AdModule/media/other.ogv   | 
| 2130845 | 2119014 | e034cb72 | media/promo/trailer.webm      | 
| 2130845 | 2119014 | e034cb72 | media/promo/trailer.webm      | 
| 2130845 | 2119014 | e034cb72 | media/promo/trailer.webm      | 
| 1912643 | 1806844 | cbd2562f | media/promo/trailer.mp4      | 
| 1912643 | 1806844 | cbd2562f | media/promo/trailer.mp4      | 
| 1912643 | 1806844 | cbd2562f | media/promo/trailer.mp4      | 
| 1371459 | 1356916 | bbb2c932 | AdModule/AdModule/media/trailer.webm   | 
| 277981 | 80590 | 61375a0c | AdModule/AdModule/Scripts/jquery-1.9.1.js | 
| 260304 | 47616 | f4427aed | AdModule/packages/jQuery.1.9.1/jquery-1.9.1- | 

을 지금, 나는이 some.webmsome.mp4 느슨한 아마 수 개발의 과정에서 그들은 기존의 비디오를 필요로하지 않습니다 다른 비디오 및 기타 개발자에 의해 대체되었다 때문이다.

나는 git history/squashed 커밋을 다시 작성한 적이 없다. 그래서, 나는 그것을 두려워 해요 :)

git clone 실행할 때 발생하는 다운로드 시간과보고 된 크기를 보면 리포지토리에 저장된 것과 거의 같은 많은 데이터를받지 못합니다 (아마 그것의 10 분의 1).

그래서 내 질문에 : 큰 얼룩을 포함하는 커밋을 삭제하려는 시도가 다운로드 시간을 줄이는 것과 마찬가지로 나의 경우에 도움이 될까요? 그렇지 않은 경우 다운로드 시간을 줄이기 위해 무엇을 할 수 있습니까?

추신. 전체 SHA 합계를 가졌으나 가독성을 위해 표에서 잘립니다.

|  size | file                 | 
|----------+----------------------------------------------------------------------| 
| 46802 | projects/take5/sdk/.git            | 
| 46680 | projects/take5/sdk/.git/objects          | 
| 42268 | projects/take5/sdk/.git/objects/pack         | 
| 20164 | projects/take5/sdk/.git/objects/pack/pack-594c78df5239b9e0dcd1014ac8 | 
|  9712 | projects/take5/sdk/.git/objects/pack/pack-66fbcdd8ee5685720eb77a979a | 
|  4176 | projects/take5/sdk/.git/objects/pack/pack-f6f37936674d8f016b58dce74e | 
|  4176 | projects/take5/sdk/.git/objects/pack/pack-9f11f69dc046de80640de5d265 | 
|  3960 | projects/take5/sdk/.git/objects/pack/pack-56985618be0c8c8596d12111fe | 
|  551 | projects/take5/sdk/.git/objects/b9         | 
: 여기

(이 REPO의 역사에 있어야 모든의 전체 크기보다 훨씬 적습니다 인) 실제로 .git 디렉토리에있는 파일의 크기를 보여줍니다 다른 테이블의

러닝 git gc 총 크기의 약 11Mb를 면도 할 수있었습니다.

답변

0

filter-branch를 사용하여 기록을 다시 쓰고 해당 파일을 제외 할 수 있습니다. 전체 자습서는 http://dalibornasevic.com/posts/2-permanently-remove-files-and-folders-from-a-git-repository

호환되지 않는 저장소로 끝나고 모든 기존 사용자는 새 저장소를 다시 복제해야한다는 점에 유의하십시오.

ps : 예, 다운로드 크기가 줄어 듭니다. git은 복제 할 때 모든 파일의 전체 기록을 다운로드합니다 (저축을 얻기 위해 filter-branch로 파일을 완전히 제거해야하는 이유). 히스토리를 저장할 때 약간의 압축이 이루어지기 때문에 오브젝트 파일이 실제 체크 아웃보다 작을 것으로 예상되지만 (너무 많은 히스토리가없는 경우), 1/10의 요소는 이상하게 보입니다. 특히 영화의 경우 잘 압축되지 않습니다.

+0

감사합니다, 재미있는 읽기 (나는'git gc'에 대한 코멘트에서 배웠습니다 - 또한 좋았습니다). 그러나 나는 가능하다면 실제로 재 작성하는 것을 피하고 싶습니다. 대신 초기 복제 작업을 수행하는 데 걸리는 시간을 줄이고 싶습니다 (다른 개발자는 전체 저장소가 필요하지 않으며 전체 역사가 필요하지 않습니다). 복제가 당신에게 모든 repo를 가져 오지 않는다고 판단하여, 그 크기를 줄이는 다른 방법이 있을지도 모릅니다. 아마도 마스터 브랜치를 청소할 것입니까? 어쩌면 선택한 지점 만 복제하는 방법이 있을까요? 먼저 확인해보고 싶습니다. –

+0

"복제로 인해 모든 repo를 가져올 수 없습니다." 다른 한편으로는 "(다른 개발자가 전체 저장소를 필요로하지 않고 전체 역사 - 단지 그 일부분 만) - 그렇다면 얕은 클론에 대해 배우고 싶어 할지도 모르지만 많은 이점을주지는 않습니다 (http://blogs.gnome.org/simos/2009/04/18/git-clones-vs-shallow-git-clones/) 정말로 기분을 되찾고 싶다면 정말 짜증이납니다. – mnagel

+0

오 ... 이제 알았어! 음, 크기 보고서에서 한 자릿수 더 상상해 보았습니다 ... 음 :(네, 크기의 10 분의 1 정도라고 말한 곳에서 틀 렸습니다. 정확히 그 크기입니다. 그렇습니다. 아마도 내가 가질 것입니다. –

관련 문제