2017-02-25 45 views
1

私はsamba共有にリポジトリを持っています。これには1.2Gの.git /オブジェクトがあります。 そのレポをfile://プロトコルでローカルにクローンすると、クローンされたレポは.git /オブジェクトで1.5GBになります。 Gitはなぜこれを私にしていますか?ファイルプロトコルで複製するときにgit repoが大きくなるのはなぜですか?

それから、もう少し小さい別のレポで試してみました。 stdoutでは、Gitは常にfile://プロトコルのrepoの一部を再圧縮していますが、それは理由かもしれませんが、githubのhttpsプロトコルでは起こっていません。

httpsのgithubのからローカルrepo2のプロトコル://プロトコル:

git clone https://github.com/someuser/somerepo.git ~/repo2 
19:39:56.188035 git.c:371    trace: built-in: git 'clone' 'https://github.com/someuser/somerepo.git' 'repo2' 
Klone nach 'repo2' ... 
19:39:56.211036 run-command.c:350  trace: run_command: 'git-remote-https' 'origin' 'https://github.com/someuser/somerepo.git' 
19:39:57.381345 run-command.c:350  trace: run_command: 'fetch-pack' '--stateless-rpc' '--stdin' '--lock-pack' '--thin' '--check-self-contained-and-connected' '--cloning' 'https://github.com/someuser/somerepo.git/' 
19:39:57.400372 exec_cmd.c:116   trace: exec: 'git' 'fetch-pack' '--stateless-rpc' '--stdin' '--lock-pack' '--thin' '--check-self-contained-and-connected' '--cloning' 'https://github.com/someuser/somerepo.git/' 
19:39:57.412380 git.c:371    trace: built-in: git 'fetch-pack' '--stateless-rpc' '--stdin' '--lock-pack' '--thin' '--check-self-contained-and-connected' '--cloning' 'https://github.com/someuser/somerepo.git/' 
remote: Counting objects: 73839, done. 
19:39:57.951242 run-command.c:350  trace: run_command: 'index-pack' '--stdin' '-v' '--fix-thin' '--keep=fetch-pack 122 on SAJTY' '--check-self-contained-and-connected' '--pack_header=2,73839' 
19:39:57.960749 exec_cmd.c:116   trace: exec: 'git' 'index-pack' '--stdin' '-v' '--fix-thin' '--keep=fetch-pack 122 on SAJTY' '--check-self-contained-and-connected' '--pack_header=2,73839' 
19:39:57.976259 git.c:371    trace: built-in: git 'index-pack' '--stdin' '-v' '--fix-thin' '--keep=fetch-pack 122 on SAJTY' '--check-self-contained-and-connected' '--pack_header=2,73839' 
remote: Total 73839 (delta 0), reused 0 (delta 0), pack-reused 73839 
Empfange Objekte: 100% (73839/73839), 21.96 MiB | 112.00 KiB/s, Fertig. 
Löse Unterschiede auf: 100% (60640/60640), Fertig. 
19:44:31.187832 run-command.c:350  trace: run_command: 'rev-list' '--objects' '--stdin' '--not' '--all' '--quiet' '--progress=Prüfe Konnektivität' 
19:44:31.190358 exec_cmd.c:116   trace: exec: 'git' 'rev-list' '--objects' '--stdin' '--not' '--all' '--quiet' '--progress=Prüfe Konnektivität' 
19:44:31.195362 git.c:371    trace: built-in: git 'rev-list' '--objects' '--stdin' '--not' '--all' '--quiet' '--progress=Prüfe Konnektivität' 
remote: Total 73839 (delta 0), reused 0 (delta 0), pack-reused 73839 

repo3へのローカルrepo2からファイルプロトコル:ファイルをクローニングする場合

git clone file://$HOME/repo2 ~/repo3 
19:46:53.852660 git.c:371    trace: built-in: git 'clone' 'file:///home/sajty/repo2' 'repo3' 
Klone nach 'repo3' ... 
19:46:53.874679 run-command.c:350  trace: run_command: 'git-upload-pack '\''/home/sajty/repo2'\''' 
19:46:53.878697 run-command.c:209  trace: exec: '/bin/sh' '-c' 'git-upload-pack '\''/home/sajty/repo2'\''' 'git-upload-pack '\''/home/sajty/repo2'\''' 
19:46:53.903236 run-command.c:350  trace: run_command: 'index-pack' '--stdin' '-v' '--fix-thin' '--keep=fetch-pack 129 on SAJTY' '--check-self-contained-and-connected' 
19:46:53.903236 run-command.c:350  trace: run_command: 'pack-objects' '--revs' '--thin' '--stdout' '--progress' '--delta-base-offset' 
19:46:53.907238 exec_cmd.c:116   trace: exec: 'git' 'index-pack' '--stdin' '-v' '--fix-thin' '--keep=fetch-pack 129 on SAJTY' '--check-self-contained-and-connected' 
remote: 19:46:53.910226 exec_cmd.c:116   trace: exec: 'git' 'pack-objects' '--revs' '--thin' '--stdout' '--progress' '--delta-base-offset' 
19:46:53.915230 git.c:371    trace: built-in: git 'index-pack' '--stdin' '-v' '--fix-thin' '--keep=fetch-pack 129 on SAJTY' '--check-self-contained-and-connected' 
remote: 19:46:53.918234 git.c:371    trace: built-in: git 'pack-objects' '--revs' '--thin' '--stdout' '--progress' '--delta-base-offset' 
remote: Zähle Objekte: 72156, Fertig. 
remote: Komprimiere Objekte: 100% (12623/12623), Fertig. 
remote: Total 72156 (delta 59287), reused 72156 (delta 59287) 
Empfange Objekte: 100% (72156/72156), 21.65 MiB | 16.91 MiB/s, Fertig. 
Löse Unterschiede auf: 100% (59287/59287), Fertig. 
19:46:57.648781 run-command.c:350  trace: run_command: 'rev-list' '--objects' '--stdin' '--not' '--all' '--quiet' '--progress=Prüfe Konnektivität' 
19:46:57.653804 exec_cmd.c:116   trace: exec: 'git' 'rev-list' '--objects' '--stdin' '--not' '--all' '--quiet' '--progress=Prüfe Konnektivität' 
19:46:57.658788 git.c:371    trace: built-in: git 'rev-list' '--objects' '--stdin' '--not' '--all' '--quiet' '--progress=Prüfe Konnektivität' 

は、どのように私は、再圧縮を無効にするには? これはHDDのスペースを浪費し、クローン作成に1分かかる。私はそれを理解していません。 githubと同じpackfileを使用したいだけです。

注1:再圧縮を無効にする--localオプションについては知っていますが、低速ネットワーク接続の場合はさらに進んだ進行/ダウンロード速度が悪いです。

注2:デフォルトのパッキングとgc設定を使用しています。これを別のPCに複数のreposで再現できます。

答えて

1

あなたは試してみて、圧縮せずにクローンを圧縮せずに迅速であるかどうかを見ることができます。そのオブジェクトのための圧縮レベルを示す、整数-1..9

git -c core.compression=0 clone ... 

git config core.compressionを参照してください。パックファイルにありません。
-1がzlibのデフォルトです。
0は圧縮なし、1.9はさまざまな速度/サイズのトレードオフ、9は最も遅いことを意味します。
設定されていない場合、デフォルトはcore.compressionです。設定されていない場合、デフォルトは1(最高速度)になります。また

latest Git for Windows使用してください(2.12今日から利用可能で、2017年2月)

も参照してください "git pull without remotely compressing objects":

core.compression 0が緩んオブジェクトとオブジェクトのzlib圧縮を無効にする必要がありますパックファイル内。圧縮しないオブジェクトは少し時間を節約できますが、テキストファイルのサイズメリットは失われます。
デルタ圧縮をオフにしません。これは、プッシュ&プル実行中の "Compressing..."フェーズの動作です。そして、それはずっと遅い原因である可能性がより高いです。

pack.window 0は、デルタ圧縮を行うときに考慮する他のオブジェクトの数を設定します。それを低く設定するとプッシュ/プル時間が改善されます。
しかし、画像以外のファイル(およびgitのメタオブジェクト)のデルタ圧縮の大きな利点を失うことになります。

だから、あなたも試すことができます。

git -c pack.window=0 clone ... 

結論は、あなたが「圧縮」フェーズを避けることができますが、これは推奨されない、ということです。
オールレポのデルタ圧縮を削除するのではなく、disable delta for certain files only through a .gitattributes directiveよりも優れています。

+0

ありがとうございます、pack.window 0が問題を解決しました! – sjty

関連する問題