Heroku push rejected, Submodule install failed

ぐ巨炮叔叔 提交于 2020-01-01 08:46:41

问题


My repo uses a customized version of Recurly-js, and I have packaged it as a submodule using these instructions https://devcenter.heroku.com/articles/git-submodules . However, I get the following error now when I try to deploy:

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

回答1:


I gave the answer as a comment to @jeffrey-k's answer, but now I'm even more sure of it, I'll write it here.

My repo suddenly stopped pushing, and these two things 'fixed' it:

  1. Change all public submodule URLs (if any) from using the ssh transport URLs to readonly git transport URLs (i.e., from git@github.com:yaniv-aknin/public-project to git://github.com/yaniv-aknin/public-project). To do this, you will need to edit the file called .gitmodules in the root of your repo.
  2. Remove all private submodules (if any) from my repo (remove them from .gitmodules and rm -fr their directories).
  3. Commit the changes.

This handles these two changes in behaviour:

  1. Heroku used to be able to clone submodules from github using the ssh transport (presumably they had some 'general heroku ssh key' and github account, but not sure).
  2. Heroku used to ignore failed submodules and just continue the push.

I've opened a ticket asking if my analysis is correct and why did the change happen (with no warning I managed to hear of) - I'll update this answer if I learn something new.

UPDATE: Noah from Heroku's support replied to my ticket and largely acknowledged what I said above. Public repo URLs should be changed, private repos should either be removed or have credentials embedded in them as per this document; the latter solution has obvious security ramifications.




回答2:


Looks like this answer - https://stackoverflow.com/a/8768240 - tells the story. Heroku will not accept git submodules that are private repos. My version of recurly-js is a forked, non-private repo.




回答3:


The other answers are old.

As of 2019, you can now simply log in to Heroku and go here:

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

And link your GitHub account or organization with Heroku. It'll then be able to clone private submodules your account has access to when selecting to deploy on a push to the master of your main GitHub repo.



来源:https://stackoverflow.com/questions/13362288/heroku-push-rejected-submodule-install-failed

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!