簡體   English   中英

是否可以遠程計算 git 存儲庫的對象和大小?

[英]Is it possible to remote count object and size of git repository?

假設網絡中的某個地方存在公共 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-the-size-of-a-github-repo-before-cloning-它給出了答案

命令:(來自@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,

不提供對象計數,但如果您使用 Google Chrome 瀏覽器並安裝此擴展程序

它將 repo 大小添加到主頁:

GitHub Repo Size 擴展截圖

我認為這個問題有幾個問題: git count-objects並不能真正代表存儲庫的大小(即使git count-object -v也不是真的); 如果您使用的不是愚蠢的 http 傳輸,那么當您制作它時,將為您的克隆創建一個新包; 並且(正如 VonC 指出的那樣)您為分析遠程倉庫所做的任何事情都不會考慮工作副本的大小。

話雖如此,如果他們使用愚蠢的 http 傳輸(例如 github,不是),您可以編寫一個 shell 腳本,使用 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

在所有這一切結束時,遠程服務器將為您打包 master/HEAD 和所有標簽,您將下載整個包文件,只是為了查看在克隆期間下載它時的大小。

當您最終進行克隆時,也會創建工作副本,因此整個目錄將比這些命令輸出的要大,但包文件通常是具有任何重要歷史記錄的工作副本的最大部分。

從來沒聽說過:
Git 不是服務器,默認情況下沒有任何內容偵聽請求(除非您激活 gitweb 或 gitolite 層)
命令“git remote ... ”處理git remote ...本地副本(獲取)。

因此,除非您獲取某些東西,或者clone --bare一個遠程存儲庫(它不檢出文件,因此您只有 Git 數據庫),否則您將不知道它的大小。
一旦簽出,這不包括工作目錄的大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM