Підмодулі 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

Хтось здогадався, чого не вистачає?

Відповіді:


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, який тримав папку заблокованою
Mihai Timar

31
Мені довелося видалити як підмодуль worktree ( ext/blah), так і відповідну папку під GIT_DIR( .git/modules/ext/blah).
Тобу

2
У моєму конкретному випадку git submodule updateна моєму сервері CI постійно виникав збій, оскільки він хотів, щоб хтось прийняв ключі RSA (сервер ci зазвичай використовує з'єднання https, і це був перший раз, коли підмодуль підключив ssh-з'єднання). Сподіваюся, це заощадить комусь годину подряпин!
Маверік

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працює без помилок.


можливо, вам доведеться запустити git submodule initраніше, git submodule updateщоб підмодуль був повторно ініціалізований, тоді це буде працювати.
Pellet

1

Якщо ви читаєте в 2019 або пізнішій версії, просто оновіть git-клієнт. Працював у мене.


0

використовуйте інструмент diff, щоб порівняти оригінальний клон, який працює, і цей. Крім того, що робитьgit submodule вихід. Переконайтеся, що ви вказуєте на ту саму гілку в кожному репо перед тим, як це зробити.

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

сподіваюся, це допоможе


0

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

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

Проблема зникла після оновлення git (з Git-1.7.11-preview20120710) до останньої версії (до Git-1.8.1.2-preview20130201) того часу. Як не дивно, у моїх колег була навіть старіша версія, вона працювала без жодних проблем, але вони були на Mac. Я на Win7 64bit.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.