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
Кто-нибудь понял, что не хватает?
Ответы
Ответ 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
...
Сохранено как: мастер
Готово, без ошибок.