Неустранимая ошибка при обновлении подмодуля с помощью GIT

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

[root@iptlock 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

Или так

[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' ([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

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

https://github.com/ProdigyView/ProdigyView

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


person Devin Dixon    schedule 19.11.2011    source источник
comment
Если это может помочь, добавление открытого ключа в github помогло мне.   -  person i_v_harish    schedule 03.11.2017


Ответы (8)


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

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

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

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

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

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

EDIT: В вашем собственном репозитории вам может понадобиться использовать git://, а не https://

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

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

person Daniël W. Crompton    schedule 11.02.2013
comment
Сегодня я столкнулся с той же проблемой, и Github, похоже, сейчас предлагает публичное клонирование только через HTTPS. URL-адрес в вашем примере был бы https://github.com/webhat/example.git тогда - person bfncs; 25.09.2013
comment
Повторите процедуру в .git/config - person Alexander; 01.09.2014
comment
@Alexander Александр У меня не было проблем с .git/config после обновления. - person Daniël W. Crompton; 01.09.2014
comment
Это сработало для меня, но мне пришлось запустить: git submodule sync перед запуском git submodule update --init --recursive - person Nazareno Lorenzo; 10.09.2014
comment
Не забудьте: git submodule sync git submodule init git submodule update - person Trake Vital; 30.06.2021

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

Я обновляю свои .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
person Temi    schedule 13.05.2014

Вы можете вручную передать ключ в разделе «Сборка» -> «Выполнить оболочку» задания 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'

person RC_02    schedule 13.09.2015
comment
Это на самом деле полезно. Даже на компьютере с Windows, пытающемся просто обновить подмодуль git, вам будет отказано в доступе, потому что на самом деле ключ не используется. - person Vladimir Ivanov; 16.03.2017

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

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

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

person Sruthi    schedule 24.08.2015

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

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

person hmedia1    schedule 02.08.2017

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

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

ssh -vT [email protected]

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

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

person Kio Krofovitch    schedule 04.08.2014

Добавление нового ответа вместо редактирования для большей наглядности для всех, кто сталкивается с той же проблемой, что и я...

У меня было с точностью до наоборот. Частный репозиторий Bitbucket и подмодуль для работы. Всегда выдавал эту ошибку...

fatal: repository 'http://bitbucket.org/companyname/submodule-repo-name.git' does not exist
fatal: clone of 'http://bitbucket.org/companyname/submodule-repo-name.git' into submodule path 
'/Users/me/path/to/repo-using-submodule/folder' failed
Failed to clone 'submodule/folder'. Retry scheduled
fatal: repository 'http://bitbucket.org/companyname/submodule-repo-name.git' does not exist
fatal: clone of 'http://bitbucket.org/companyname/submodule-repo-name.git' into submodule path 
'/Users/me/path/to/repo-using-submodule/folder' failed
Failed to clone 'submodule/folder' a second time, aborting

Мне пришлось вручную зайти в мой файл .git/config и обновить это:

[submodule "submodule-name"]
url = https://bitbucket.org/companyname/submodule-repo.git

с этим:

[submodule "submodule-name"]
url = [email protected]:companyname/submodule-repo.git

Не уверен, как настроить это, чтобы я и все мои коллеги могли использовать подмодуль без настройки, но я преодолел свою многомесячную борьбу с этим.

person MayTheSForceBeWithYou    schedule 15.05.2020

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

person Devin Dixon    schedule 19.11.2011
comment
У меня такая же проблема. Не могли бы вы уточнить, что было не так и как вы это исправили? - person Dave Lancea; 01.12.2011
comment
Вот как я решил эту проблему: в файле .gitmodules и файле .git/config вы увидите URL-адрес для подмодуля, который вы хотите обновить. Если это похоже на git@github... измените его на действительный URL-адрес: git//github.com/.... это решит проблему. - person Khue Vu; 18.07.2012
comment
Этот ответ ужасно неясен. Предложение Кхунэ Ву также не решило проблему. - person awolf; 28.08.2012
comment
Извините, в вашем каталоге клонов откройте файл .gitsubmodule. Там вы увидите, что подмодули имеют пути, связанные с репо, из которого они клонированы. Убедитесь, что URL-адрес, с которого выполняется клонирование, правильный. Кстати, .gitsubmodule невидим, выполните команду ls -l a из корня, чтобы увидеть его. - person Devin Dixon; 28.08.2012
comment
После изменения пути в обоих местах я продолжал получать одни и те же ошибки. Пришлось удалить папку субмодуля. Сделайте git submodule sync, а затем git submodule update --init - person Arnaldo Capo; 30.10.2013
comment
Арнальдо, спасибо за это, это также решило проблему, с которой я столкнулся. - person awshepard; 09.01.2014
comment
@DevinDixon отредактируйте свой ответ, чтобы объяснить, что вы изменили. - person Stealth Rabbi; 22.10.2015
comment
Это такой ужасный ответ. Мало того, что файл называется .gitmodules не .gitmodule, но все, что вы сделали, — это перефразировали свой первоначальный вопрос без каких-либо объяснений, чтобы помочь кому-либо еще. К счастью, есть отличный ответ, который опубликовал Даниэль В. Кромптон, и я призываю вас изменить принятый ответ на этот @DevinDixon. Между тем, я предложу редактирование вашего - person hmedia1; 02.08.2017