Git packed-refs 别名打破了浅层获取

Git packed-refs aliases break shallow fetch

谁能告诉我 Git 存储库中 'packed-refs' 中的 refspec 格式是什么,如下所示:

<some-hash>  refs/tags/anytag
^<tags-commit-true-hash>

因此,当我执行 git ls-remote 时,我得到

<some-hash>             refs/tags/anytag
<tags-commit-true-hash> refs/tags/anytag^{}

因此,当我尝试浅层获取 anytag 时,我收到指向 <some-hash> 的 FETCH_HEAD,但在检查之后我收到 <tags-commit-true-hash>。这打破了浅层获取相同标签的方式,因为无论如何都会提取数据(即使它已经存在)。

本地 Git 版本:1.9.1 Linux x86-64 on Linux Mint 17.3

Git 托管:Bitbucket

有谁知道如何删除那些奇怪的哈希别名或解决它们的问题?

这些"aliases"是标签对象。它们包含额外的注释并指向实际的提交(类似于提交如何指向树以及树如何指向子树和 blob)。

据我所知,它们按设计工作。不需要任何 "workaround".

This breaks shallow fetching same tag, as data is pulled anyway (even if it's already there).

不,已经存在的数据被拉取。

有一点点extra数据需要拉取,但真的就一点点。如果提交本身以及其中引用的树和 blob 已经可用,则不应将其拉出。