Неустранимая ошибка при обновлении субмодуля с помощью GIT - PullRequest
35 голосов
/ 20 ноября 2011

Я пытаюсь обновить подмодули этого репозитория git, но продолжаю получать фатальные ошибки:

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

Или вот так

[root@iptlock 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' (git@github.com:ProdigyView/ProdigyView-Core.git) registered for path 'core'
Cloning into core...
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
Clone of 'git@github.com:ProdigyView/ProdigyView-Core.git' into submodule path 'core' failed

Есть идеи, почему это происходит с подмодулем? Репо это:

https://github.com/ProdigyView/ProdigyView

(Подмодуль может быть клонирован, если я не попытаюсь клонировать его как подмодуль.)

Ответы [ 7 ]

71 голосов
/ 11 февраля 2013

Проблема в том, что git не может найти открытый ключ, необходимый для загрузки репо с вашего сервера, решение состоит в том, чтобы использовать открытый URL-адрес.

В файле .gitmodule вы найдете следующую запись:

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

URL-адрес необходимо изменить на общедоступный URL-адрес для модуля:

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

Как видите, префикс git @ был измененна https:// и инфикс : становится /

РЕДАКТИРОВАТЬ: В вашем собственном хранилище вам может понадобитьсяиспользуйте git:// вместо https://

Предыдущий ответ был мне неясен, поэтому я добавил это.

РЕДАКТИРОВАТЬ 2: Есливы обнаружите, что вам нужно запустить git submodule sync или отредактировать .git/config, чтобы заставить это работать, вы, вероятно, настроили пульты для подмодулей.

35 голосов
/ 13 мая 2014

Если это может помочь некоторым людям:

Я обновляю свои .gitmodules

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

Затем я тоже обновляю свой .git / config

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

Как некоторыеВы сказали это раньше (и я благодарю вас).

Затем я обновляю свой .git / modules / example / config

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

И чтобы закончить, я делаю

git submodule sync
git submodule init
git submodule update
4 голосов
/ 14 сентября 2015

Вы можете вручную передать ключ в разделе Build -> «Execute shell» задания jenkins:

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

Пример:

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

2 голосов
/ 02 августа 2017

Это часто случалось так, что я помещал функцию в свой .bash_profile (работает на 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
}

Один вкладыш:

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

поиск / замена vim:

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

Базовое решение, основанное на ответе Даниэля

1 голос
/ 25 августа 2015

Следующие шаги помогут решить проблему.

  1. Удалите папку субмодуля на вашем локальном компьютере.
  2. До git submodule sync
  3. затем git submodule update --init

Надеюсь, это поможет.

1 голос
/ 04 августа 2014

У меня была такая же проблема.Однако в моей ситуации команда хотела использовать SSH-доступ из .gitmodules, поэтому изменение URL-адреса для использования http: // не было возможным.

В конечном счете, моя проблемабыл неправильный файл ~ / .ssh / config.В файле конфигурации были некоторые ошибочные настройки, поэтому я пытался получить доступ к неверному серверу каждый раз, когда действительно хотел получить доступ к git@github.com.Я выяснил это, выполнив следующую команду:

ssh -vT git@github.com

Третья строка или около того должна сказать следующее:

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

Если вы не пытаетесь подключиться к github.com,тогда ваш конфигурационный файл указывает вам с курса.

Оказывается, мне все равно не понадобилось ничего из моего конфигурационного файла, поэтому я был в безопасности его удалить.Если вы хотите сохранить файл конфигурации, вот хорошая статья на эту тему:

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

Кроме того, эти документы GitHub действительно помогли мне отладить мою проблему:

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

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

0 голосов
/ 20 ноября 2011

Разобрался.Путь в файлах .gitmodule не может загрузить подмодуль.

...