2012-11-13 105 views
10

我的回購使用Recurly-js的定製版本,並且我使用這些說明將其打包爲子模塊https://devcenter.heroku.com/articles/git-submodules。不過,我現在得到以下錯誤,當我嘗試部署:Heroku推送被拒絕,子模塊安裝失敗

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

回答

15

我給出了答案,作爲對@ jeffrey-k答案的評論,但是現在我更加確信它了,我會在這裏寫出來。

我的回購突然停止推搡,而這兩樣東西「固定」它:

  1. 更改所有公共子模塊的URL(如果有的話)使用ssh運輸網址爲只讀的git運輸的URL(即從[email protected]:yaniv-aknin/public-projectgit://github.com/yaniv-aknin/public-project)。要做到這一點,您需要在回購的根目錄中編輯名爲.gitmodules的文件。
  2. 從我的回購庫中刪除所有私人子模塊(如果有的話)(將它們從.gitmodulesrm -fr的目錄中刪除)。
  3. 提交更改。

此處理這些行爲中的兩個變化:

  1. Heroku的使用能夠克隆使用ssh運輸(想必他們有一些「一般的Heroku SSH密鑰」和GitHub的帳戶從GitHub子模塊,但不確定)。
  2. Heroku過去忽略失敗的子模塊,只是繼續推送。

我已經開了票,詢問我的分析是正確的,爲何發生變化(沒有警告我設法聽到的) - 如果我學到新的東西,我會更新這個答案。

UPDATE:Heroku的支持Noah回覆了我的機票,並主要承認了我上面所說的。公共回購網址應該被更改,私人回購網站應該被移除或者根據this文檔嵌入憑證;後一種解決方案具有明顯的安全分歧。

+0

感謝您關注此事。 –

+0

Heroku現在似乎只接受https://變種的子模塊。有關詳細信息,請參閱https://devcenter.heroku.com/articles/git-submodules。 – jeffjv

1

貌似這個答案 - https://stackoverflow.com/a/8768240 - 講述的故事。 Heroku不會接受私人回購的git子模塊。我的rebly-js版本是一個分叉的非私人回購。

+0

我相信Heroku的行爲有一個最近的變化。我們有一些私人和一些公共子模塊的回購。直到今天,Heroku取得了公共子模塊,失敗後繼續推進。從今天(也許是昨天)開始,Heroku似乎會在子模塊失敗時停止部署。另外,我們認爲heroku開始將個人網址(以git @開頭)作爲私有網站處理回購協議,即使它們是公開的。考慮git只讀URL(以git://開頭)。 –