如何验证从GitHub克隆的回购协议的正确大小?

如何验证从GitHub克隆的回购协议的正确大小?,git,ubuntu,github,github-api,Git,Ubuntu,Github,Github Api,我的问题是如何验证克隆存储库的实际大小(与Github上的大小相比),以自动检查repo是否已正确下载 问题是GitHub API给出的大小与克隆的repo的大小不匹配。 我是这样做的: 我使用GithubAPI获取存储库大小 $echo | perl-ne'如果m,打印$1!([^/]+/[^/]+?)(?:.git)?$!'xargs-i curl-s-k'{}'| grep size 输出:“大小”:55617 我克隆存储库并计算下载文件夹的大小 $git clone https://gi

我的问题是如何验证克隆存储库的实际大小(与Github上的大小相比),以自动检查repo是否已正确下载

问题是GitHub API给出的大小与克隆的repo的大小不匹配。 我是这样做的:

  • 我使用GithubAPI获取存储库大小

    $echo | perl-ne'如果m,打印$1!([^/]+/[^/]+?)(?:.git)?$!'xargs-i curl-s-k'{}'| grep size

  • 输出:“大小”:55617

  • 我克隆存储库并计算下载文件夹的大小

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

    $du-s drScratch

  • 输出:69104/


    谢谢

    git repo的大小是不同的,因为git没有标准的方法来存储数据(至少有单个对象和包文件,包文件在不同的repo之间可能不同——只需在调用
    git gc
    之前和之后查找本地git repo的大小即可)。因此,您不能使用大小作为正确下载的衡量标准


    您可以通过调用
    git fsck
    来检查本地repo,此命令将遍历所有修订,并查看每个引用对象是否符合其哈希值。

    通过将大小与repo进行比较,您试图实现什么?git在签出时有一些内置的健全性检查。如果你真的想自己动手,可以使用一些更可靠的方法,比如对签出的文件进行散列files@wonderb0lt可以使用验证git数据,然后检查远程头的已知良好哈希。保证指向相同的数据,避免昂贵的SHA1冲突。如果您只需计算
    .git
    目录中所有文件的总大小,就可以知道该磁盘上该文件夹的大小。如果您试图将其与在另一个克隆上执行相同操作的结果进行比较,那么您需要意识到,有许多事情可能会有所不同。在不同的阶段进行打包、垃圾处理和修剪,等等。类似的事情会产生不同。另一方面,如果你只想确保你把所有东西都放在本地,那么你有两个选择:1。相信git能够正常工作。2.执行
    git fetch
    ,确保克隆后不会带来很多新东西。3.执行
    git fsck
    以验证克隆的完整性。