git错误消息“服务器不允许请求未发布的对象”是什么意思?


23

我正在尝试从github进行签出,但收到此错误消息:

[user@arch ~]$ git clone --recursive https://github.com/simsong/tcpflow.git
Cloning into 'tcpflow'...
The authenticity of host 'github.com (192.30.253.113)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.253.113' (RSA) to the list of known hosts.
remote: Counting objects: 4190, done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 4190 (delta 21), reused 29 (delta 12), pack-reused 4146
Receiving objects: 100% (4190/4190), 50.27 MiB | 2.21 MiB/s, done.
Resolving deltas: 100% (2954/2954), done.
Submodule 'src/be13_api' (https://github.com/simsong/be13_api.git) registered for path 'src/be13_api'
Submodule 'src/dfxml' (https://github.com/simsong/dfxml.git) registered for path 'src/dfxml'
Submodule 'src/http-parser' (https://github.com/nodejs/http-parser.git) registered for path 'src/http-parser'
Cloning into '/home/user/tcpflow/src/be13_api'...
remote: Counting objects: 1203, done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 1203 (delta 2), reused 5 (delta 1), pack-reused 1194
Receiving objects: 100% (1203/1203), 477.47 KiB | 1.96 MiB/s, done.
Resolving deltas: 100% (821/821), done.
Cloning into '/home/user/tcpflow/src/dfxml'...
remote: Counting objects: 1929, done.
remote: Total 1929 (delta 0), reused 0 (delta 0), pack-reused 1929
Receiving objects: 100% (1929/1929), 572.09 KiB | 2.89 MiB/s, done.
Resolving deltas: 100% (1294/1294), done.
Cloning into '/home/user/tcpflow/src/http-parser'...
remote: Counting objects: 1487, done.
remote: Total 1487 (delta 0), reused 0 (delta 0), pack-reused 1487
Receiving objects: 100% (1487/1487), 667.24 KiB | 2.46 MiB/s, done.
Resolving deltas: 100% (916/916), done.
Submodule path 'src/be13_api': checked out 'c81521d768bb78499c069fcd7c47adc8eee0350c'
Submodule path 'src/dfxml': checked out 'c31224626cf5f6678d42cbcfbfcd4e6191c9a864'
error: Server does not allow request for unadvertised object 5bbcdc5df9d01b521e8da011bab0da70bdec3653
Fetched in submodule path 'src/http-parser', but it did not contain 5bbcdc5df9d01b521e8da011bab0da70bdec3653. Direct fetching of that commit failed.
[user@arch ~]$

因此,我是这些存储库的维护者。src / http-parser是另一个存储库的分叉,并且该存储库的维护者一直未接受我的请求(没有给出原因)将一些自动生成的文件添加到该.gitignore文件中。但我认为这不是问题所在。


我尝试了相同的命令,没有错误。您还有问题吗?在我看来,顺便说一句,它签出了不同的提交:Submodule path 'src/http-parser': checked out '6b05cce82da5c4d407e5576ab892bc20a17b0394'
ge0rdi

问题不见了。我认为这意味着子模块引用用于不存在的签出。但是我不确定。
vy32

作为对其他困惑但该消息的注释,如果您更新子模块,将父模块更新为新的提交,并且永远不要将新的提交推送到子模块中,则会出现此消息。然后,当然,您将无法检出子模块的远程控制器上不存在的提交!
Patrick Sanan

问题似乎是我更新了子模块,更新了父存储库,推送了父存储库,但没有推送子模块。因此,从字面上看,父存储库引用的提交不在github上子模块的存储库中。
vy32

Answers:


8

jgit-什么是git的广告引用?-堆栈溢出

在获取期间,服务器可以列出它具有的引用以及客户端可能希望获取的引用。这些是广告参考。

  • 看来您不能直接从服务器直接获取任何特定的提交,只能从引用(即分支和标签)中获取。或者更确切地说,将Github服务器配置为禁止此类请求。
  • 因此,如果您想使用进行特定的提交--depth,则该<depth>-1提交最多只能是与获取的ref(在子模块的元数据中指定的分支/标记)相背的提交。

    通常,人们建议将其设置depth为一定数量,但要比回购中提交的总数小得多,例如50100。例如50,Travis在为项目进行初始克隆时会使用什么。

如果您不使用来更新子模块--depth,则找不到提交将意味着以下任何情况:

  • 子模块的树处于“浅”状态,并且上面的内容适用(仅当先前用--depth.gitmoduleshas中的条目shallow = true更新时才可能)
  • 提交不在子模块正在使用的分支上
  • 提交完全不在子模块的仓库中:
    • 有人犯错了
    • 或者它曾经在那里但被强制推送删除

作为记录,在您的特定情况下,这是最后一种情况:提交5bbcdc5df9d01b521e8da011bab0da70bdec3653根本不在存储https://github.com/simsong/http-parser.git库中。


什么depth
vy32

@ vy32添加了有关您不使用进行更新的情况的信息--depth
ivan_pozdeev

“它曾经存在,但是被强制推送删除了”-在这种情况下有没有追索权?
skolsuper

1
@skolsuper选择其他提交进行检索。例如,如果这是一个子模块,则将其切换到超级项目中的其他提交。
ivan_pozdeev

3

访问未广告对象的一种方法是同步。然后,子模块更新应该起作用,例如:

git submodule sync --recursive
git submodule update

1
为简单起见,+ 1。对我来说,git submodule update在另一个子模块上失败了,但是当我以正确的顺序将这两行应用到我的所有子模块上时,它终于起作用了。
Bizhan

2
对于潜在的大型超级项目,建议您实际执行“ $ git submodule sync --recursive; git submodule update或”操作(如果只是在克隆远程对象Just之后)$ git submodule update --init --recursive/project/root/根据中的内容,这将有效地从下遍历您的项目文件树/project/root/.gitmodules。更多$ git submodule --help……
Cbhihe

感谢@Cbhihe,我将编辑答案以包括该--recursive标志。
雕刻师
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.