我正在使用 repo 下载 android 源代码。
我注意到大多数项目都是通过远程将对象压缩成一个包文件然后简单地获取包文件并提取包内容来下载的。这样,我在 .repo/objects/pack/ 文件夹中获得了 .pack 和 .idx 文件。objects 文件夹中没有任何其他文件夹。下载此包文件时,如果连接中断,则无法恢复。
我还注意到,实际上很少有项目在没有远程将对象压缩到包文件的情况下被下载。对于这些,我没有 .pack 和 .idx 文件。但许多单独的文件夹和这些文件夹内的文件都是在对象文件夹中创建的。我对这种方法有几个疑问。
此克隆在中断后会恢复吗?我不是在问单个文件对象恢复功能。但是当中断并尝试重新下载时,会跳过已下载的文件吗?这对普通克隆和浅克隆有何影响?
我可以请求服务器在 git 克隆时不将对象压缩到打包文件中吗?如果它取决于服务器,github 和 aosp 是否支持此功能?
答案1
这个问题的答案很好地涵盖了这一点如何在不稳定的连接上完成大项目的 git clone?Stack Overflow 问题。
git - 中断后,无包克隆是否会恢复?
这个克隆中断后会恢复吗?
但是当中断并尝试重新下载时,会跳过已下载的文件吗?这对正常克隆和浅克隆有何影响?
如何进行克隆并不重要(浅克隆或普通克隆)在撰写本文时(2018 年 6 月 27 日),git 不支持可恢复克隆。如果克隆过程被很好地中断,git 将丢弃正在进行的 repo,如果克隆过程突然中断,您将不得不通过删除它(因为它将损坏)来丢弃 repo,然后重新启动克隆。
我可以请求服务器在 git 克隆时不要将对象压缩到包文件中吗?
不可以——打包只是 git 工作的基础。
由于您提到您不能/不想使用 @anr 提到的解决方法,请查阅https://stackoverflow.com/a/3957733/2732969(让 repo 所有者创建 repo 的捆绑包并将其作为常规文件放在 HTTP 服务器上,克隆到更浅的深度)您的选择是有限的......