Webのどこかにパブリックgitリポジトリが存在するとします。クローンを作成したいのですが、最初にサイズを確認する必要があります(git count-objects
のようなオブジェクトとキロバイトの量)
それを行う方法はありますか?
使用できる小さな応急修理は次のとおりです。
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」と表示されている場合は、問題があることがわかり、キャンセルできます。
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,
この質問にはいくつか問題があると思います:git count-objects
は、リポジトリのサイズを正確に表すものではありません(git count-object -v
実際にはそうではありません);ダムhttpトランスポート以外のものを使用している場合は、作成時にクローン用に新しいパックが作成されます。そして(VonCが指摘したように)リモートリポジトリを分析するために行うことは、作業コピーのサイズを考慮しません。
そうは言っても、ダムhttpトランスポートを使用している場合(たとえば、githubは使用していない場合)、curlを使用してすべてのオブジェクトとパックのサイズをクエリするシェルスクリプトを作成できます。それはあなたに近づくかもしれません、しかしそれはあなたが実際にクローンをするためにあなたがただもう一度しなければならないであろうより多くのhttp要求をします。
何を理解することが可能ですgit-fetch
はネットワークを介して(スマート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とすべてのタグをパックし、クローン中にダウンロードしたときの大きさを確認するために、パックファイル全体をダウンロードします。
最終的にクローンを作成すると、作業コピーも作成されるため、ディレクトリ全体がこれらのコマンドが吐き出すよりも大きくなりますが、パックファイルは通常、重要な履歴を持つ作業コピーの最大の部分です。
私が知っていることではありません:
Gitはサーバーではなく、デフォルトではリクエストをリッスンするものはありません(gitwebまたはgitoliteレイヤーをアクティブ化しない限り)
そしてコマンド " git remote ...
"は、リモートリポジトリのlocalコピー(フェッチ)を処理します。
したがって、何かをフェッチしない限り、またはclone --bare
リモートリポジトリ、そのサイズはわかりません。
これには、一度チェックアウトした作業ディレクトリのサイズは含まれていません。