【问题标题】:Heroku push rejected, Submodule install failedHeroku 推送被拒绝,子模块安装失败
【发布时间】:2012-11-01 23:21:17
【问题描述】:

我的 repo 使用了自定义版本的 Recurly-js,并且我使用这些指令 https://devcenter.heroku.com/articles/git-submodules 将其打包为子模块。但是,当我尝试部署时,现在出现以下错误:

----> Heroku receiving push 
-----> Git submodules detected, installing
       Submodule 'recurly-js' (/app/tmp/repo.git/recurly-js) registered for path 'recurly-js'
       Initialized empty Git repository in /tmp/build_3iacvn8h2rnha/recurly-js/.git/
       fatal: '/app/tmp/repo.git/recurly-js' does not appear to be a git repository
       fatal: The remote end hung up unexpectedly
       Clone of '/app/tmp/repo.git/recurly-js' into submodule path 'recurly-js' failed
 !     Heroku push rejected, Submodule install failed

【问题讨论】:

    标签: git heroku git-submodules


    【解决方案1】:

    其他答案都是旧的。

    从 2019 年开始,您现在只需登录 Heroku 并前往此处:

    • https://dashboard.heroku.com/apps/<YOUR-WEBSITE-NAME>/deploy/github

    并将您的 GitHub 帐户或组织与 Heroku 相关联。然后,它可以克隆您的帐户在选择推送到主 GitHub 存储库的主节点时可以访问的私有子模块。

    【讨论】:

      【解决方案2】:

      我将答案作为对@jeffrey-k 答案的评论,但现在我更加确定了,我会在这里写下来。

      我的 repo 突然停止推送,这两件事“修复”了它:

      1. 将所有公共子模块 URL(如果有)从使用 ssh 传输 URL 更改为只读 git 传输 URL(即,从 git@github.com:yaniv-aknin/public-projectgit://github.com/yaniv-aknin/public-project)。为此,您需要在存储库的根目录中编辑名为 .gitmodules 的文件。
      2. 从我的 repo 中删除所有私有子模块(如果有)(从 .gitmodulesrm -fr 他们的目录中删除它们)。
      3. 提交更改。

      这会处理这两种行为变化:

      1. Heroku 过去能够使用 ssh 传输从 github 克隆子模块(可能他们有一些“通用 heroku ssh 密钥”和 github 帐户,但不确定)。
      2. Heroku 过去常常忽略失败的子模块并继续推送。

      我打开了一张票,询问我的分析是否正确以及为什么会发生更改(我没有听到任何警告)-如果我学到新东西,我会更新这个答案。

      更新:来自 Heroku 支持的 Noah 回复了我的请求,并在很大程度上承认了我上面所说的。应更改公共回购 URL,应删除私人回购或根据this 文档在其中嵌入凭据;后一种解决方案具有明显的安全后果。

      【讨论】:

      • 感谢您跟进此事。
      • Heroku 现在似乎只接受 https:// 的子模块。详情请见devcenter.heroku.com/articles/git-submodules
      • 在我的情况下,这是因为 .gitmodules 没有添加到我的 git 文件中
      【解决方案3】:

      看起来像这个答案 - https://stackoverflow.com/a/8768240 - 讲述了这个故事。 Heroku 不接受私有仓库的 git 子模块。我的 recurly-js 版本是一个分叉的、非私有的 repo。

      【讨论】:

      • 我相信 Heroku 的行为最近发生了变化。我们有一个包含一些私有和一些公共子模块的仓库。直到今天,Heroku 获取公共子模块,在私有子模块上失败,并继续推送。截至今天(可能是昨天),如果子模块失败,Heroku 似乎会停止部署。此外,我们认为 heroku 开始将带有私有 URL(以 git@ 开头)的 repos 视为私有,即使它们是公共的。考虑 git 只读 URL(以 git:// 开头)。
      猜你喜欢
      • 2019-05-31
      • 2017-01-09
      • 2021-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      相关资源
      最近更新 更多