【发布时间】:2013-07-10 02:46:43
【问题描述】:
我想知道git clone --verbose 不是很冗长。执行命令的输出如下:
$ git clone --verbose <repo>
remote: Counting objects: 184, done
remote: Finding sources: 100% (184/184)
remote: Total 184 (delta 66), reused 183 (delta 66)
Receiving objects: 100% (184/184), 18.90 KiB, done.
Resolving deltas: 100% (66/66), done.
预期的行为是一一查看接收到的对象的列表。是否可以使用其他选项?
【问题讨论】:
-
有趣的事实 - 如果
git确实按照您的建议逐个报告每个对象,那么 Linux 内核存储库的git clone将产生超过 200 万行的输出。可能是它没有以这种方式实现的一个很好的理由......如果你真的想要这些信息,你可以试试git rev-list --objects --all... -
我明白了,你知道“git rev-list --objects --all”提供的对象顺序与“接收对象”的“git clone”相同吗?我需要它,因为我有时会在接收其中一个对象时遇到网络错误,我想在树中准确地找到这个对象。
-
如果您的“网络错误”与当前通过 TCP 套接字传输的特定对象有任何关联,我会感到非常惊讶。顺序可能不一样,因为
git正在生成并发送一个包含请求对象的包文件,而将订单对象放入包文件中似乎有些随意。 -
在这种情况下,git如何确定已经下载了多少对象?在“接收对象”中,它会写入已下载对象的确切数量。
-
客户端本质上运行
git rev-list --objects --all(在初始克隆时为空)并将该列表发送到服务器。服务器根据它的存储库生成一个类似的列表,并减去客户端已经拥有的东西,然后根据列表中剩下的东西生成一个包文件——客户端还没有的东西。但是,生成包文件可以重新排序该列表,以尽量减小包文件的大小。