2012-11-13 18 views
10

Moje repozytorium używa dostosowanej wersji programu Recurly-js, a następnie zapakowałem go jako moduł podrzędny, korzystając z instrukcji: https://devcenter.heroku.com/articles/git-submodules. Jednak pojawia się następujący błąd teraz gdy próbuję wdrożyć:Pchnięcie Heroku odrzucone, instalacja modułu nie powiodła się

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

Odpowiedz

15

Podałem odpowiedź jako komentarz do odpowiedzi @ jeffrey-k, ale teraz jestem tego jeszcze bardziej pewien, napiszę to tutaj.

Moje repo nagle zatrzymał popychanie, a te dwie rzeczy „stałe” to:

  1. zmienić wszystkie adresy URL modułem publiczna (jeśli w ogóle) z wykorzystaniem adresów transportu ssh tylko do odczytu adresów transportowych git (czyli od [email protected]:yaniv-aknin/public-project do git://github.com/yaniv-aknin/public-project). Aby to zrobić, musisz edytować plik o nazwie .gitmodules w katalogu głównym repozytorium.
  2. Usuń wszystkie prywatne submoduły (jeśli istnieją) z mojego repozytorium (usuń je z .gitmodules i rm -fr z ich katalogów).
  3. Zatwierdź zmiany.

ten obsługuje te dwie zmiany w zachowaniu:

  1. Heroku używane aby móc sklonować submodules z github za pomocą transportu ssh (przypuszczalnie mieli jakieś „ogólnie Heroku klucz ssh” i konto GitHub, ale niepewny).
  2. Heroku zignorował nieudane submodules i po prostu kontynuował push.

Otworzyłem zgłoszenie z pytaniem, czy moja analiza jest prawidłowa i dlaczego nastąpiła zmiana (bez ostrzeżenia, o którym zdążyłem się dowiedzieć) - zaktualizuję tę odpowiedź, jeśli dowiem się czegoś nowego.

UPDATE: Noah ze wsparcia Heroku odpowiedział na mój bilet iw dużej mierze przyznał, co powiedziałem powyżej. Publiczne adresy URL repo powinny zostać zmienione, prywatne repozyty powinny zostać usunięte lub powinny zawierać w sobie dane uwierzytelniające zgodnie z dokumentem: this; to drugie rozwiązanie ma oczywiste konsekwencje dla bezpieczeństwa.

+0

Dzięki za obserwację tego. –

+0

Heroku wydaje się teraz akceptować tylko submodules odmiany https: //. Zobacz https://devcenter.heroku.com/articles/git-submodules, aby uzyskać szczegółowe informacje. – jeffjv

1

Wygląda na to odpowiedź - https://stackoverflow.com/a/8768240 - opowiada. Heroku nie akceptuje submodułów Git, które są prywatnymi repo. Moja wersja recurly-js to rozwidlone, nieprywatne repozytorium.

+0

Wierzę, że nastąpiła ostatnia zmiana w zachowaniu Heroku. Mamy repozytorium z prywatnymi i publicznymi podmodulami. Do tej pory Heroku korzystał z ogólnodostępnych submodułów, nie działał na szeregowych i kontynuował działania. Na dzień dzisiejszy (być może wczoraj) wygląda na to, że Heroku zatrzymuje wdrażanie, jeśli nie działa moduł podrzędny. Ponadto uważamy, że Heroku zaczęło traktować repo z prywatnymi adresami URL (zaczyna się od git @) jako prywatne, nawet jeśli są publiczne. Rozważmy adresy URL git-read-only (zaczyna się od git: //). –

Powiązane problemy