Подтвердить что ты не робот

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

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

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

Однако я просто клонировал суперпроект, сделал то, что, как я думал, должен: "git subodule 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 = [email protected]:interstar/BEACHhtml.git

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

[submodule "external_libraries/BEACHhtml"]
path = external_libraries/BEACHhtml
url = [email protected]:interstar/BEACHhtml.git

Кто-нибудь понял, что не хватает?

4b9b3361

Ответ 1

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


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

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

# rm -rf external_libraries/BEACHhtml
# git submodule update

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

Ответ 2

У меня была эта проблема (сломанная сеть, поэтому я получил отложенную подмодульную проверку как это), и я решил ее, сделав это script (назвал его 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 каталога и подмодуль refetching:

  • Перейдите в external_libraries/BEACHhtml и загляните в файл .git. Он должен быть чем-то вроде gitdir: ../../.git/modules/external_libraries/BEACHhtml
  • Удалите каталоги external_libraries/BEACHhtml и .git/modules/external_libraries/BEACHhtml.

Теперь git submodule update работает без ошибок.

Ответ 4

используйте инструмент diff, чтобы сравнить исходный клон, который работает, и этот. Кроме того, что выводит git submodule. Убедитесь, что вы указываете на одну ветвь в каждом репо, прежде чем делать.

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

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

Ответ 5

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

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

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

Ответ 6

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

Ответ 7

Я нахожусь на Window7. run 'rm -rf src/sizzle', может нормально!

E:\GitHub\fork\jquery > rm -rf src/sizzle
E:\GitHub\fork\jquery > git обновление подмодуля
Submodule path 'src/sizzle': выдан '19c7b3440385c9f628a7bc1c5769f6946fcc6887'

E:\GitHub\fork\jquery > grunt.cmd

...
Сохранено как: мастер

Готово, без ошибок.