2011-11-19 7 views
26

Próbuję zaktualizować submodules tego git repositary ale wciąż otrzymuję fatalnym błędy:Błąd krytyczny podczas aktualizowania submodule używając GIT

[[email protected] ProdigyView]# git submodule update --recursive 
Cloning into core... 
Permission denied (publickey). 
fatal: The remote end hung up unexpectedly 
Clone of '[email protected]:ProdigyView/ProdigyView-Core.git' into submodule path 'core' failed 

albo to sposób

[[email protected] root]# git clone --recursive https://github.com/ProdigyView/ProdigyView.git 
Cloning into ProdigyView... 
remote: Counting objects: 438, done. 
remote: Compressing objects: 100% (275/275), done. 
remote: Total 438 (delta 172), reused 394 (delta 128) 
Receiving objects: 100% (438/438), 8.03 MiB | 5.19 MiB/s, done. 
Resolving deltas: 100% (172/172), done. 
Submodule 'core' ([email protected]:ProdigyView/ProdigyView-Core.git) registered for path 'core' 
Cloning into core... 
Permission denied (publickey). 
fatal: The remote end hung up unexpectedly 
Clone of '[email protected]:ProdigyView/ProdigyView-Core.git' into submodule path 'core' failed 

jakieś pomysły dlaczego to dzieje się z modułem częściowym? Repo jest to jedno:

https://github.com/ProdigyView/ProdigyView

(modułem może być klonowane gdybym nie próbują sklonować go jako modułem).

+1

Jeśli to może pomóc, dodanie klucza publicznego do github wykonało to za mnie. –

Odpowiedz

-4

Zdobione. Ścieżka w plikach .gitmodule nie może pobrać modułu.

+7

Mam ten sam problem. Czy mógłbyś wyjaśnić, co było nie tak i jak to naprawiłeś? –

+0

Oto jak rozwiązałem ten problem: w pliku .gitmodules i .git/config zobaczysz ścieżkę URL modułu, który chcesz zaktualizować. Jeśli to jest jak git @ github ... zmień go na poprawny adres URL: git // github.com/.... to rozwiąże problem. –

+2

Ta odpowiedź jest strasznie niejasna. Sugestia Khune Vu również nie rozwiązała problemu. – awolf

59

Problem polega na tym, że git nie może znaleźć klucza publicznego potrzebnego do pobrania repozytorium z serwera, rozwiązaniem jest użycie publicznego adresu URL.

W pliku .gitmodule znajdziecie następujący wpis:

[submodule "example"] 
    path = example 
    url = [email protected]:webhat/example.git 

URL muszą być zmieniane do publicznego adresu URL dla modułu:

[submodule "example"] 
    path = example 
    url = https://github.com/webhat/example.git 

Jak widać prefiks git @ został zmieniony na https: // i infix : staje się /

EDIT: W swoim własnym repozytorium może trzeba użyć git:// zamiast https://

Poprzednia odpowiedź była dla mnie jasne, więc dodałem tego.

EDIT 2: Jeśli okaże się, trzeba uruchomić git submodule sync czy trzeba zmieniać .git/config aby uzyskać to do pracy, masz może skonfigurować piloty dla submodułów.

+2

Wcześniej wpadłem na ten sam problem, a Github wydaje się oferować publiczne klonowanie tylko przez HTTPS. Adres URL w twoim przykładzie byłby "https: // github.com/webhat/example.git", a następnie – bfncs

+0

@boundaryfunctions updated –

+1

Dzięki za szybką reakcję, zagłosował. – bfncs

29

Jeśli może pomóc niektórym ludziom:

zaktualizować .gitmodules

[submodule "example"] 
    path = example 
    url = https://github.com/webhat/example.git 

Następnie zaktualizować .git/config zbyt

[submodule "example"] 
    url = https://github.com/webhat/example.git 

Podobnie jak niektórzy z was to powiedział przed (i dziękuję ci).

Następnie aktualizuję moje.git/moduły/example/config

[remote "origin"] 
    fetch = [...] 
    url = https://github.com/webhat/example.git 

I skończyć zrobić

git submodule sync 
git submodule init 
git submodule update 
+0

to jest kompletne rozwiązanie :) – almaruf

1

miałem ten sam problem. Jednak w mojej sytuacji zespół chciał, aby używał dostępu SSH z .gitmodules, więc modyfikowanie adresu URL do korzystania z http: // nie było możliwe.

W końcu mój problem polegał na niepoprawnym pliku ~/.ssh/config. Plik konfiguracyjny miał błędne ustawienia, więc próbowałem uzyskać dostęp do nieprawidłowego serwera za każdym razem, gdy naprawdę chciałbym uzyskać dostęp do [email protected] Znalazłem to na zewnątrz, wykonując następujące polecenia:

ssh -vT [email protected] 

Trzecia linia czy tak powinien powiedzieć:

debug1: Connection to github.com [<ip address>] port <port num> 

Jeśli nie próbuje połączyć się github.com, następnie plik konfiguracyjny wskazuje na ciebie.

W każdym razie nie potrzebowałem żadnych elementów w moim pliku konfiguracyjnym, więc mogłem go bezpiecznie usunąć. Jeśli chcesz zachować plik konfiguracyjny, tutaj jest dobry artykuł na ten temat:

http://nerderati.com/2011/03/17/simplify-your-life-with-an-ssh-config-file/

Również te docs GitHub naprawdę pomógł mi debugowania mój problem:

https://help.github.com/articles/error-permission-denied-publickey

https://help.github.com/articles/what-ip-addresses-does-github-use-that-i-should-whitelist

1

Poniższe kroki rozwiążą problem.

  1. Usunąć folder modułu podrzędnego na lokalnym komputerze.
  2. Czy git submodule sync
  3. następnie git submodule update --init

nadzieję, że to pomaga.

3

Można ręcznie przechodzić w kluczu w produkcji -> sekcja "Execute skorupę" Jenkins praca:

ssh-agent bash -c 'ssh-add {path_to_private_key}; git submodule update --init --recursive'

Przykład:

ssh-agent bash -c 'ssh-add /var/lib/jenkins/.ssh/jenkins_rsa; git submodule update --init --recursive'

+0

To jest naprawdę użyteczne. Nawet na komputerze z systemem Windows próba aktualizacji kodu modułu daje ci odmowę dostępu, ponieważ żaden klawisz nie jest faktycznie używany. –

0

to się stało, że wiele dla mnie czasy, w których umieściłem funkcję w moim.bash_profile (działa na BSD sed/GNU/Mac):

gitfix() { 
if [ -f "./.gitmodules" ] ; then 
    sed -E -i.bak -e "s/(url *= *)(.*:)(.*)/\1https:\/\/github.com\/\3/g" .gitmodules \ 
    git submodule sync 
    git submodule update --init --recursive 
fi 
} 

Jeden liner:

sed -E -i.bak -e "s/(url *= *)(.*:)(.*)/\1https:\/\/github.com\/\3/g" .gitmodules ; git submodule sync ; git submodule update --init --recursive 

wyszukiwania vim/wymienić:

%s/\(url\s*=\s*\)\(.*:\)\(.*\)/\1https:\/\/github.com\/\3/ 

rozwiązanie Bazowy na podstawie odpowiedzi Daniela