git - 推送递归子模块 - 上传包:不是我们的参考
问题描述
尝试推送到生产环境时会抛出此错误
remote: Cloning into '/var/www/domain.com/php/repo/api/log'...
remote: fatal: remote error: upload-pack: not our ref fdbef7944df6b5e83715f8679395a852dc5faf5e
remote: Fetched in submodule path 'php/repo/api/log', but it did not contain fdbef7944df6b5e83715f8679395a852dc5faf5e. Direct fetching of that commit failed.
回购路径
php/repo/api
php/repo/api/log <-- the repo nested inside another repo
挂钩/接收后
#/bin/sh
cd /var/www/domain.com
git --work-tree=. --git-dir=/var/git_repos/domain.com.git checkout master -f
git --work-tree=. --git-dir=/var/git_repos/domain.com.git submodule update --init --recursive
解决方案
您已指示另一个 Git(您服务器上的 Git)克隆一个子模块,它确实这样做了。我无法回答它在哪里获得子模块,但大概它使用您的.gitmodules
文件获取第三台服务器的 URL,并git clone
使用该 URL 运行以在您的服务器上创建子模块存储库。
在服务器上创建或更新了该子模块后,您可以让服务器的子模块的 Git 尝试签出特定的提交,即哈希 ID 为fdbef7944df6b5e83715f8679395a852dc5faf5e
. 您的服务器的子模块存储库中没有fdbef7944df6b5e83715f8679395a852dc5faf5e
。这可能是因为从该服务器上的子模块克隆的第三台服务器也没有它。
这很难理解,但如果我们给每个 Git 存储库命名,我们可以更容易理解。总共至少有 5 个存储库:
- 您有一个超级项目存储库;我们称他为弗雷德。
- 您的超级项目有一个子模块。我们叫她威尔玛。
- 您的服务器有一个 Git 存储库,它也充当超级项目。我们称他为 Barney,尽管他实际上主要是 Fred 的克隆(反之亦然)。
- 您的服务器有一个作为子模块的 Git 存储库。我们称它为贝蒂。
- 当然,Betty 自己也是一个克隆(因为所有 Git 存储库都是克隆)。她是谁的克隆人?那是我不知道的(但你可以通过你的
.gitmodules
文件找到/控制),但我们称她为 Ann Margrock。
这里发生的事情是你在 Fred 中做了一个新的提交。这个新的提交要求 Wilma 或 Betty 作为子模块使用 commit fdbef7944df6b5e83715f8679395a852dc5faf5e
。据推测,您确实fdbef7944df6b5e83715f8679395a852dc5faf5e
在 Wilma 中做出了承诺。
然后,您将 Git 从 Fred 推送到 Barney。Barney 现在有一个提交,也需要fdbef7944df6b5e83715f8679395a852dc5faf5e
从他的子模块提交。但他的子模块是贝蒂。
为了得到 fdbef7944df6b5e83715f8679395a852dc5faf5e
,贝蒂可以给安·玛格洛克打个电话。但如果安没有fdbef7944df6b5e83715f8679395a852dc5faf5e
,贝蒂也不会得到 fdbef7944df6b5e83715f8679395a852dc5faf5e
。当巴尼命令贝蒂退房时fdbef7944df6b5e83715f8679395a852dc5faf5e
,她会抱怨,说她不能那样做。
解决方案是提交 commit fdbef7944df6b5e83715f8679395a852dc5faf5e
,不是给 Barney ,也不是给 Betty ,而是给Ann,因为 Betty 打电话给 Ann 来得到它。所以找出谁在这里代表安,并确保威尔玛发送fdbef7944df6b5e83715f8679395a852dc5faf5e
给安。
推荐阅读
- excel - 按活动列 vba 求和
- c# - 如何阻止关闭按钮关闭多个选项卡?带有关闭按钮的 C# TabControl
- javascript - 在不使用获取请求的情况下将文件加载到沙盒 iframe
- c# - 如何以两种方式绑定属性WPF
- java - 在java中的三个线程内发送数据,一个接一个
- forms - 谷歌表单输入的验证规则,以避免不同输入字段中的重复值?
- python - Python ArgumentParser 到 Influxdb-Client
- swift - WKWebView 不会显示我需要它的网页
- nest-device-access - 使用服务帐号访问 API
- google-sheets - 允许 Google 表格上的“创建新过滤器视图”功能,并保护某些列