Git Подмодули. Тянет в новый клон супер-проекта - PullRequest
81 голосов
/ 30 сентября 2011

OK.Так что я подумал, что мне это подошло ... но сейчас ....

У меня есть проект, который включает одну небольшую библиотеку из 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

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

Ответы [ 5 ]

178 голосов
/ 20 декабря 2011

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

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

# rm -rf external_libraries/BEACHhtml
# git submodule update

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

4 голосов
/ 04 июля 2013

У меня была эта проблема (нестабильная сеть, поэтому я забронировал проверку субмодуля, как это), и я решил ее, создав этот скрипт (названный 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'

do

git submodule-fix some/submodule/path
git submodule update
3 голосов
/ 26 июля 2017

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

  1. Перейдите на external_libraries/BEACHhtml и найдите файл .git. Это должно быть что-то вроде gitdir: ../../.git/modules/external_libraries/BEACHhtml
  2. Удалить каталоги external_libraries/BEACHhtml и .git/modules/external_libraries/BEACHhtml.

С этого момента git submodule update работает без ошибок.

0 голосов
/ 04 марта 2013

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

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

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

0 голосов
/ 30 сентября 2011

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

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

...