Heroku推送被拒绝,Submodule安装失败

时间:2012-11-13 14:15:39

标签: git heroku git-submodules

我的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

3 个答案:

答案 0 :(得分:15)

我给@ jeffrey-k的答案给出了答案,但现在我更加确定了,我会在这里写。

我的回购突然停止推动,这两件事“固定”了它:

  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. 提交更改。
  4. 这处理了这两个行为变化:

    1. Heroku曾经能够使用ssh传输从github克隆子模块(可能他们有一些'一般的heroku ssh密钥'和github帐户,但不确定)。
    2. Heroku过去常常忽略失败的子模块,只是继续推动。
    3. 我已经开了一张票,询问我的分析是否正确以及为什么会发生变化(我没听到任何警告) - 如果我学到了新的东西,我会更新这个答案。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

其他答案很旧。

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

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

并将您的GitHub帐户或组织与Heroku关联。然后,当选择推送到主要GitHub存储库的主服务器上进行部署时,它将能够克隆您的帐户有权访问的私有子模块。