2017-04-07 58 views
-1

我的問題是如何驗證克隆存儲庫的實際大小,與Github上的大小進行比較,以自動檢查回購是否已正確下載。如何從GitHub驗證克隆回購的正確大小?

問題是由GitHub API給出的大小與克隆回購的大小不匹配。 這是我做的:

  1. 我使用GitHub的API

    $呼應https://github.com/jemole/drScratch獲得庫的大小| perl -ne'打印$ 1如果m!([^ /] +/[^ /] +?)(?:.git)?$!' | xargs -i curl -s -k https://api.github.com/repos/'{}'| grep的大小

輸出: 「大小」:55617,

  • 我克隆庫,並計算所下載的文件夾的大小

    $ git clone https://github.com/jemole/drScratch

    $ du -s drScratch

  • 輸出:69104 drScratch/

    謝謝!

    +1

    你試圖通過比較大小與回購實現什麼? git在退房時有一些內置的完整性檢查。如果你真的想推出自己的,使用更可靠的東西,如哈希檢出文件 – wonderb0lt

    +0

    @ wonderb0lt可以使用[git fsck](https://git-scm.com/docs/git-fsck)來驗證git數據,然後檢查遠程頭的已知好的散列。保證指向相同的數據,禁止昂貴的SHA1衝突。 –

    +0

    如果你只是計算'.git'目錄中所有文件的總大小,它會給你一個關於該磁盤上該文件夾大小的提示。如果您嘗試將其與在另一個克隆上執行相同操作的結果進行比較,那麼您需要意識到有很多事情可能會有所不同。包裝,垃圾和各個階段的修剪等等。這樣的事情會有所作爲。 –

    回答

    0

    git repo的大小確實有所不同,因爲git沒有規範的方式來存儲數據(至少有單個對象與包文件,也有不同的回購包之間的包文件可能不同 - 只需查看對於撥打git gc前後的本地git倉庫大小)。所以你不能用這個尺寸作爲正確下載的一個尺度。

    您可以通過調用git fsck來檢查本地回購,此命令遍歷所有修訂,並查看每個引用的對象是否符合其散列。