11

我的仓库使用了自定义版本的 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
4

3 回答 3

16

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

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

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

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

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

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

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

于 2012-11-13T15:50:00.120 回答
4

其他答案都是旧的。

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

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

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

于 2019-10-20T00:21:57.220 回答
1

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

于 2012-11-13T14:41:10.860 回答