web-dev-qa-db-ja.com

オブジェクトとgitリポジトリのサイズをリモートカウントすることは可能ですか?

Webのどこかにパブリックgitリポジトリが存在するとします。クローンを作成したいのですが、最初にサイズを確認する必要があります(git count-objectsのようなオブジェクトとキロバイトの量)

それを行う方法はありますか?

44
dfens

使用できる小さな応急修理は次のとおりです。

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」と表示されている場合は、問題があることがわかり、キャンセルできます。

20
Cascabel

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,
17
ken

オブジェクト数は表示されませんが、Google Chromeブラウザを使用してこれをインストールする場合 拡張機能

ホームページにリポジトリサイズを追加します。

GitHub Repo Size extension screenshot

6
Bigwave

この質問にはいくつか問題があると思います: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とすべてのタグをパックし、クローン中にダウンロードしたときの大きさを確認するために、パックファイル全体をダウンロードします。

最終的にクローンを作成すると、作業コピーも作成されるため、ディレクトリ全体がこれらのコマンドが吐き出すよりも大きくなりますが、パックファイルは通常、重要な履歴を持つ作業コピーの最大の部分です。

2
Xentac

私が知っていることではありません:
Gitはサーバーではなく、デフォルトではリクエストをリッスンするものはありません(gitwebまたはgitoliteレイヤーをアクティブ化しない限り)
そしてコマンド " git remote ... "は、リモートリポジトリのlocalコピー(フェッチ)を処理します。

したがって、何かをフェッチしない限り、またはclone --bareリモートリポジトリ、そのサイズはわかりません。
これには、一度チェックアウトした作業ディレクトリのサイズは含まれていません。

1
VonC