[英]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,
我認為這個問題有幾個問題: 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.