Подмодули Git. Втягивание в новый клон суперпроекта

87

ОК. Так что я подумал, что мне это лизнули ... но теперь ....

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

Однако я просто клонировал суперпроект, сделал то, что думал, что должен: «git submodule init», получил каталог подмодуля, чтобы появиться, но он пуст.

Если я сейчас попытаюсь сделать

git submodule update

я получил

fatal: Needed a single revision 
Unable to find current revision in submodule path 'external_libraries/BEACHhtml'

Если я попробую

git submodule foreach git pull

я получил

Entering 'external_libraries/BEACHhtml'
fatal: Where do you want to fetch from today?
Stopping at 'external_libraries/BEACHhtml'; script returned non-zero status.

В моем .git / config у меня есть следующее:

[submodule "external_libraries/BEACHhtml"]
    url = git@github.com:interstar/BEACHhtml.git

В моих .gitmodules у меня есть это:

[submodule "external_libraries/BEACHhtml"]
path = external_libraries/BEACHhtml
url = git@github.com:interstar/BEACHhtml.git

У кого-нибудь есть идея, чего не хватает?

Interstar
источник

Ответы:

189

Похоже, что теперь (в 2019 году) установка последнего клиента GIT может решить проблему согласно комментариям ниже. На данный момент это должно быть лучшим решением.


У меня такая же проблема, как и у вас. Это ошибка в git: http://git.661346.n2.nabble.com/BUG-git-submodule-update-is-not-fail-safe-td7574168.html

Короче говоря, для вашей проблемы попробуйте:

# rm -rf external_libraries/BEACHhtml
# git submodule update

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

Хан Хэ
источник
1
для меня это был зависший git-fetch, который держал папку заблокированной
Михай Тимар
32
Мне пришлось удалить как подмодуль worktree ( ext/blah), так и соответствующую папку под GIT_DIR( .git/modules/ext/blah).
Tobu
2
В моем конкретном случае git submodule updateна моем сервере CI продолжался сбой, потому что он хотел, чтобы кто-то принял ключи RSA (сервер ci обычно использует соединение https, и это был первый раз, когда субмодуль подключился к ssh-соединению). Надеюсь, это сэкономит кому-нибудь час чесать голову!
Maverik
8
В 2016 году эта ошибка все еще продолжается :(
Пауло Невес
6
2017 год, все еще присутствует.
william.taylor 09
4

У меня была эта проблема (нестабильная сеть, поэтому я потерял проверку подмодуля, как это), и я решил ее, создав этот скрипт (назвал его, git-submodule-fixчтобы я мог запустить его как git submodule-fix)

#!/bin/bash 

for arg 
do 
  echo $arg 
  find . -name "`basename $arg`" | grep "$arg\$" | xargs rm -fr
done

Если вы получите это, например, от git submodule update

fatal: Needed a single revision
Unable to find current revision in submodule path 'some/submodule/path'

делать

git submodule-fix some/submodule/path
git submodule update
эпатель
источник
3

Решено удалением 2 каталогов и повторной загрузкой подмодуля:

  1. Зайдите external_libraries/BEACHhtmlи посмотрите в .gitфайл. Его содержание должно быть примерно такимgitdir: ../../.git/modules/external_libraries/BEACHhtml
  2. Удалить как external_libraries/BEACHhtmlи .git/modules/external_libraries/BEACHhtmlкаталоги.

Отныне git submodule updateработает без ошибок.

Lu55
источник
вам может потребоваться запустить его git submodule initраньше, git submodule updateчтобы подмодуль был повторно инициализирован, тогда это сработает.
Pellet
1

Если вы читаете в 2019 году или позже, просто обновите клиент git. Работал у меня.

Vehsakul
источник
0

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

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

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

Адам Димитрук
источник
0

У меня была такая же проблема с подмодулем в проекте. Когда я попытался клонировать подмодуль по отдельности, это сработало.

Я пробовал все ответы выше, но безуспешно (git submodule update, ..., удаление папок подмодуля, ...).

Проблема исчезла после обновления git (с Git-1.7.11-preview20120710) до последней версии (до Git-1.8.1.2-preview20130201) на тот момент. Как ни странно, у моих коллег была и более старая версия, работала без проблем, но они были на Mac. Я на Win7 64bit.

Давид Лукач
источник