2012-05-17 7 views
10

Mam prywatne repo na Githubie, które zawiera 3 submoduły, z których wszystkie 3 są prywatne.Problemy z submodułami git, gdy submoduły są prywatne. Replik Github

Wygenerowałem 4 klucze SSH na moim serwerze EC2 i zastosowałem je jako klucze Github do wszystkich 4 prywatnych repozytoriów.

Jestem w stanie sklonować główne repozytorium, ponieważ rozpoznaje klucz SSH. Kiedy uruchamiam "aktualizację modułu podległego git", nie powiedzie się on w repozytoriach prywatnych z następującym błędem:

BŁĄD: nie znaleziono repozytorium. Śmiertelna: zdalny koniec zawiesił się niespodziewanie

Jeśli ręcznie sprawdzę te prywatne repozytorium, to działa, ale nie w przypadku użycia polecenia submodułu git. Dowolny pomysł? Czy to nie jest w pełni obsługiwane?

Odpowiedz

9

Uwierzytelnianie Githuba jest nieco dziwne. Nie używają nazw użytkowników; oni po prostu wnioskowali na podstawie klucza publicznego, którym pokazałeś, którym jesteś. Ponieważ wygenerowałeś cztery klucze do rozmieszczenia, to nikt nie zgadnie, który z nich będzie używany przez twój serwer, gdy połączy się z github - github zaakceptuje którekolwiek z nich, a następnie odrzuci dostęp do repozytoriów, które nie mają zarejestrowanego klucza.

Jako takie, najprostszym rozwiązaniem jest użycie pojedynczego klucza wdrażania we wszystkich repozytoriach.

Jeśli jednak nie możesz tego zrobić, możesz użyć haseł SSH hosta. Dodaj do ~/.ssh/config zwrotek Twojego serwera jak poniżej:

Host repo-foo 
    HostName ssh.github.com 
    Port 443 
    User git 
    IdentityFile /path/to/my-ssh-key-file-for-foo 
    IdentitiesOnly yes 

Host repo-bar 
    HostName ssh.github.com 
    Port 443 
    User git 
    IdentityFile /path/to/my-ssh-key-file-for-bar 
    IdentitiesOnly yes 

następnie użyć submodules w repo-bar:username/bar.git i repo-foo:username/foo.git raczej niż za pomocą formularza [email protected]:....

To skutecznie spowoduje, że git i ssh traktują każde repozytorium jako żyjące na innym serwerze i przekazują jawny plik tożsamości, więc nie ma wątpliwości co do tego, którego klucza użyć.

+1

Tak, pomyślałem, ale klucze do rozmieszczania są wyjątkowe i nie mogę ich umieścić w wielu projektach. Zobaczę, co jeszcze mogę zrobić, ale przede wszystkim chcę tylko wdrożeń bez haseł. –

+1

To nie jest dziwne; to jest dość standardowe! Standardowe rozwiązanie jest dokładnie tak, jak sugerujesz. – Ashe

+0

@Len, standardowy, jak być może, jest dość dziwny. github powinien naprawić swoje rzeczy, aby umożliwić użycie tego samego klucza do wdrożenia na wielu repozycjach :) – bdonlan