Heroku推送被拒绝,子模块安装失败

问题描述 投票:10回答:3

我的仓库使用了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
3个回答
15
投票

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

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

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

这处理了这两种行为更改:

  1. Heroku以前能够使用ssh传输从github克隆子模块(大概他们有一些'general heroku ssh key'和github帐户,但不确定)。
  2. Heroku过去会忽略发生故障的子模块,而只是继续推送。

我开了一张票,询问我的分析是否正确以及更改为何发生(我没有听到警告)-如果我学到新知识,将更新此答案。

UPDATE:Heroku的支持下的Noah回答了我的问题,并在很大程度上认可了我上面所说的。根据this文档,应更改公共仓库URL,应删除私人仓库或在其中嵌入凭据;后一种解决方案具有明显的安全后果。


1
投票

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


0
投票

其他答案很旧。

截至2019年,您现在只需登录Heroku并转到此处:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.