Git: 如何在意外中止后继续 Git 获取?

Git: How to continue Git fetch after an unexpected abort?

服务器端的代码很大,大约20GB。 所以下载需要很长时间。下载超过 10GB 后我尝试了几次,服务器意外中止。 我的操作是这样的:

git fetch --depth=100 url
//about 5GB is downloaded
git fetch --unshallow
// download about 10GB more ,the remote hung up unexpectedly

我可以继续下载吗?如果不能,那10GB也没用,怎么删?

如果提取中止,它不会将任何更改写入您的文件系统。这是因为如果将它们写入您的计算机,您的本地存储库将不会处于稳定状态。

无法恢复 fetch/pull/clone,所以您唯一的选择就是重新获取。

要清理不需要的文件,请使用 git gc

https://git-scm.com/docs/git-gc

试试看:

$ git gc

来自男人:

NAME
       git-gc - Cleanup unnecessary files and optimize the local repository

您无法轻松恢复中止的 fetch/clone,但您可以手动解压已收到的对象:

for pack in $(git rev-parse --git-dir)/objects/pack/tmp_pack*; do
    cat "$pack" |
    git unpack-objects
done

由于您首先使用的是浅克隆,因此您也可以使用例如git fetch --deepen=100 在一个循环中,直到下载完所有内容以减少中止提取的影响。
似乎支持选项 --deepen=<N> since v2.11 (end of 2016)

要删除 10 GB 的额外数据,只需 运行 git prune。这是最快最安全的方法。您也可以手动删除 <gitdir>/objects/pack/tmp_pack_* 个文件。
原则上 git gc 也可以工作,但它只删除早于 gc.pruneExpire(默认为两周)的剩余文件。使用选项 --prune=now 是危险的,因为它也会删除所有其他悬挂对象。我不确定这是否也涉及到 reflog,似乎有一个专门的选项。但无论如何,我建议在这种情况下不要使用 --prune=now 。此外,它需要更长的时间(因为它还做其他家务管理工作)。