git - 当通过 --tags 获取 git refs 时,“upload-pack: not our ref”是什么意思?
问题描述
在我的一个项目中,一旦我的构建脚本尝试使用以下命令获取所有 Git 标记,Travis 构建就会在我的任何构建系统或代码到达之前失败git fetch --tags
:
`` git fetch --tags --verbose
POST git-upload-pack (350 bytes)
POST git-upload-pack (788 bytes)
POST git-upload-pack (797 bytes)
From https://github.com/ELLIOTTCABLE/bs-sedlex
= [up to date] fix-ci -> origin/fix-ci
* [new tag] sedlex-1.99.2 -> sedlex-1.99.2
* [new tag] v1.99.3 -> v1.99.3
...
* [new tag] v20.0.0-pre.2 -> v20.0.0-pre.2
Fetching submodule ppx-sedlex
POST git-upload-pack (122 bytes)
From https://github.com/ELLIOTTCABLE/ppx-sedlex
= [up to date] develop -> origin/develop
= [up to date] master -> origin/master
...
= [up to date] v20.0.0-pre.2 -> v20.0.0-pre.2
POST git-upload-pack (4 bytes)
POST git-upload-pack (69 bytes)
POST git-upload-pack (586 bytes)
fatal: remote error: upload-pack: not our ref 0f509703fcd43ff4324d721a39220153bab49d4a
这尤其令人困惑,因为主 repobs-sedlex
和 git-submoduleppx-sedlex
都没有任何以 ; 开头的提交0f5097...
。我不知道 SHA 是从哪里来的。这个故障只发生在Linux工作人员身上,我不知道为什么——git fetch --tags
在 macOS Travis 工作人员、我的 macOS 机器和我启动调试的 Ubuntu Vagrant 机器上,同一个 repo 工作。
“致命:远程错误:上传包:不是我们的参考”错误表示什么;我该如何解决?我什至不确定从哪里开始调试这个错误,因为它只发生在 Travis 工作人员身上。
(这不太可能有帮助,但这是context 中的错误,以及有问题的存储库。)
编辑 1:这是一些额外的有趣输出,来自添加 GIT_TRACE=2:
Fetching submodule ppx-sedlex
23:55:28.125076 git.c:439 trace: built-in: git fetch --no-prune --no-prune-tags --tags -v --recurse-submodules-default on-demand --submodule-prefix ppx-sedlex/
23:55:28.125914 run-command.c:663 trace: run_command: git-remote-https origin https://github.com/ELLIOTTCABLE/ppx-sedlex.git
23:55:28.429609 run-command.c:663 trace: run_command: git rev-list --objects --stdin --not --all --quiet --alternate-refs
23:55:28.432485 run-command.c:663 trace: run_command: git rev-list --objects --stdin --not --all --quiet --alternate-refs
23:55:28.434082 git.c:439 trace: built-in: git rev-list --objects --stdin --not --all --quiet --alternate-refs
From https://github.com/ELLIOTTCABLE/ppx-sedlex
= [up to date] develop -> origin/develop
= [up to date] master -> origin/master
= [up to date] v1.99.4 -> v1.99.4
= [up to date] v1.99.4-pre.1 -> v1.99.4-pre.1
= [up to date] v1.99.4-pre.3 -> v1.99.4-pre.3
= [up to date] v1.99.4-pre.8 -> v1.99.4-pre.8
= [up to date] v2.0.0 -> v2.0.0
= [up to date] v20.0.0-pre.1 -> v20.0.0-pre.1
= [up to date] v20.0.0-pre.2 -> v20.0.0-pre.2
23:55:28.442482 run-command.c:1616 run_processes_parallel: preparing to run up to 1 tasks
23:55:28.442504 run-command.c:1648 run_processes_parallel: done
23:55:28.442536 run-command.c:663 trace: run_command: git gc --auto
23:55:28.443983 git.c:439 trace: built-in: git gc --auto
23:55:28.444903 run-command.c:663 trace: run_command: cd /home/vagrant/ELLIOTTCABLE/bs-sedlex/.git/modules/ppx-sedlex; unset GIT_PREFIX; GIT_DIR=. git fetch --no-prune --no-prune-tags --tags -v --recurse-submodules-default on-demand --submodule-prefix ppx-sedlex/ origin 0f509703fcd43ff4324d721a39220153bab49d4a
23:55:28.446392 git.c:439 trace: built-in: git fetch --no-prune --no-prune-tags --tags -v --recurse-submodules-default on-demand --submodule-prefix ppx-sedlex/ origin 0f509703fcd43ff4324d721a39220153bab49d4a
23:55:28.447105 run-command.c:663 trace: run_command: git-remote-https origin https://github.com/ELLIOTTCABLE/ppx-sedlex.git
23:55:28.735871 run-command.c:663 trace: run_command: git fetch-pack --stateless-rpc --stdin --lock-pack --thin --no-progress https://github.com/ELLIOTTCABLE/ppx-sedlex.git/
23:55:28.738885 git.c:439 trace: built-in: git fetch-pack --stateless-rpc --stdin --lock-pack --thin --no-progress https://github.com/ELLIOTTCABLE/ppx-sedlex.git/
error: Server does not allow request for unadvertised object 0f509703fcd43ff4324d721a39220153bab49d4a
我无法掩饰为什么 Git 在这里请求“未公布的对象”;但这显然不是 GitHub 问题,这里——出于某种原因,命令:
git fetch --no-prune --no-prune-tags --tags -v \
--recurse-submodules-default on-demand \
--submodule-prefix ppx-sedlex/ \
origin 0f509703fcd43ff4324d721a39220153bab49d4a
...当我git fetch
在父仓库中时,在子模块上自动调用。(同样,该提交 ,0f509703
不存在于两个存储库中;同样,完全相同的存储库,完全相同的提交,并且这不会发生在 macOS 上——仅在 Travis 的 Linux 机器上。)
解决方案
这尤其令人困惑,因为主 repo bs-sedlex 和 git-submodule ppx-sedlex 都没有任何以 0f5097 ... 开头的提交;
但他们可能有一个带有该 SHA1的标签(一旦取消引用,它将指向一个提交)
“致命:远程错误:上传包:不是我们的参考”错误表示什么;
请参阅“使用嵌套子模块克隆 repo 不起作用”
Git 提供了三个选项来控制是否可以获取任意对象 ID:
- 一种允许获取 Git 有权访问的任意对象,
- 一种允许从引用中获取任何可访问的对象,
- 另一个还允许从隐藏引用中获取可访问的对象。
“not our ref”消息意味着您正在尝试按对象 ID 获取对象,该对象 ID 用于子模块,但服务器不允许这样做。
在您的情况下,可能是:
- 子模块中的标签从未被推送
- 或者(因为它是从其他来源工作的)Travis-CI 无权访问子模块(私有依赖项):请参阅“ Git - Travis CI 中的子模块”。
或者它有该子模块的一些缓存版本。
推荐阅读
- android - 如何从本地存储加载媒体以将视频投射到 Android TV?
- java - 将 JHipster 项目部署到 tomcat 服务器
- r - 如何基于另一个矩阵创建一个矩阵
- python - Python com 文件用 pyinstaller 打包成 exe 后如何注册?
- swiftui - SwiftUI - TabView 禁用背景透明度
- .net-core - 如何停止并行执行被 backgroundhangfire 作业多次排队的方法
- spring-boot - 春季启动中的 HMAC TOEKN 安全性
- reactjs - React Native:将内联样式道具传递给组件时出现错误“类型'IntrinsicAttributes&...”上不存在属性'样式'
- android - 应用程序重新启动时初始化不起作用
- reactjs - 在 ReactJS 中获取 SignalR 未经授权的错误