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

vy3*_*y32 31 git github

我正在尝试从 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 ~]$
Run Code Online (Sandbox Code Playgroud)

所以我是这些 repos 的维护者。src/http-parser 是另一个 repo 的分支,并且该 repo 的维护者一直不接受我的拉取请求(没有给出任何理由)将一些自动生成的文件添加到.gitignore文件中。但我不认为这是这里的问题。

iva*_*eev 17

jgit - 什么是 git 的广告参考?- 堆栈溢出

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

  • 看起来您不能直接从服务器获取任何单个特定提交,只能获取 refs(即分支和标签)。或者更确切地说,Github 服务器被配置为禁止此类请求。
  • 因此,如果您想使用 获得特定提交--depth,则它最多必须<depth>-1远离获取的引用(这是子模块元数据中指定的分支/标签)

    通常,人们建议只设置depth一个相当大但仍远小于 repo 中提交总数的数字——比如50100。例如,这50是 Travis 在为项目进行初始克隆时使用的。

如果您不使用 更新子模块--depth,则无法找到提交将意味着:

  • 子模块的树处于“浅”状态,并且上述情况适用(仅当它之前被更新--depth它的条目.gitmoduleshasshallow = true时才可能)
  • 提交不在子模块使用的分支上
  • 提交根本不在子模块的仓库中:
    • 要么有人犯了错误,
    • 或者它曾经在那里但被强制推送删除

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


car*_*ver 10

访问未发布对象的一种方法是同步。然后子模块更新应该可以工作,例如:

git submodule sync --recursive
git submodule update
Run Code Online (Sandbox Code Playgroud)

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