Podmoduły Git. Wciągam nowy klon super-projektu

87

OK. Więc pomyślałem, że to polizałem ... ale teraz ...

Mam projekt, który zawiera jedną małą bibliotekę z GitHub jako moduł podrzędny. W oryginalnej wersji tego super-projektu podmoduł działa zgodnie z oczekiwaniami.

Jednak właśnie sklonowałem superprojekt, zrobiłem to, co uważałem, że powinienem: „git submodule init”, spowodowałem wyświetlenie katalogu podmodułu, ale jest on pusty.

Jeśli teraz spróbuję to zrobić

git submodule update

dostaję

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

Jeśli spróbuję

git submodule foreach git pull

dostaję

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

W moim .git / config mam to:

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

W moich .gitmodules mam to:

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

Czy ktoś ma pomysł, czego brakuje?

interstar
źródło

Odpowiedzi:

189

Wygląda na to, że teraz (w 2019) zainstalowanie najnowszego klienta GIT może rozwiązać problem, zgodnie z komentarzami poniżej. To powinno być na razie najlepsze rozwiązanie.


Mam ten sam problem co Ty. To jest błąd w git: http://git.661346.n2.nabble.com/BUG-git-submodule-update-is-not-fail-safe-td7574168.html

Krótko mówiąc, spróbuj:

# rm -rf external_libraries/BEACHhtml
# git submodule update

Wygląda na to, że coś jest nie tak z poprzednim folderem pobierania, usuń go, a aktualizacja ponownie rozwiązuje problem.

Han He
źródło
1
dla mnie był to powieszony git-fetch, który blokował folder
Mihai Timar
32
Musiałem usunąć zarówno podmoduł roboczy ( ext/blah), jak i pasujący folder poniżej GIT_DIR( .git/modules/ext/blah).
Tobu,
2
W moim konkretnym przypadku git submodule updatenie udawało się na moim serwerze CI, ponieważ chciał, aby ktoś zaakceptował klucze RSA (serwer ci zwykle używa połączenia https i był to pierwszy raz, kiedy podmoduł wyciągnął połączenie ssh). Mam nadzieję, że zaoszczędzi to komuś godziny drapania się po głowie!
Maverik
8
W 2016 roku ten błąd nadal występuje :(
Paulo Neves,
6
Zameldowanie w 2017 roku, nadal obecne.
william.taylor. 09
4

Miałem ten problem (niestabilna sieć, więc porzucono mi kasowanie podmodułu w ten sposób) i rozwiązałem go, tworząc ten skrypt (nazwał go, git-submodule-fixaby móc go uruchomić jako git submodule-fix)

#!/bin/bash 

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

Jeśli otrzymasz to np. Z pliku git submodule update

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

zrobić

git submodule-fix some/submodule/path
git submodule update
epatel
źródło
3

Rozwiązany przez usunięcie 2 katalogów i ponowne pobranie modułu podrzędnego:

  1. Idź do external_libraries/BEACHhtmli zajrzyj do .gitpliku. Jego treść powinna być podobnagitdir: ../../.git/modules/external_libraries/BEACHhtml
  2. Usuń oba external_libraries/BEACHhtmli .git/modules/external_libraries/BEACHhtmlkatalogi.

Od teraz git submodule updatedziała bez błędów.

Lu55
źródło
może być konieczne uruchomienie git submodule initwcześniej, git submodule updateaby moduł podrzędny został ponownie zainicjowany, wtedy to zadziała.
Pellet
1

Jeśli czytasz w 2019 lub później, po prostu zaktualizuj klienta git. Pracował dla mnie.

Vehsakul
źródło
0

użyj narzędzia porównywania, aby porównać działający oryginalny klon i ten. Ponadto, co się git submodulewyświetla. Zanim to zrobisz, upewnij się, że wskazujesz tę samą gałąź w każdym repozytorium.

Podejrzewam, że przeszedłeś do gałęzi lub starszej wersji, w której moduł podrzędny nie został zdefiniowany.

mam nadzieję że to pomoże

Adam Dymitruk
źródło
0

Miałem ten sam problem z modułem podrzędnym w projekcie. Kiedy próbowałem sklonować podmoduł oddzielnie, działał dobrze.

Wypróbowałem wszystkie powyższe odpowiedzi, ale bez powodzenia (aktualizacja modułu podrzędnego git, ..., usunięcie folderów modułu podrzędnego, ...).

Problem zniknął po aktualizacji gita (z Git-1.7.11-preview20120710) do najnowszej wersji (do Git-1.8.1.2-preview20130201). O dziwo moi koledzy mieli jeszcze starszą wersję, działali bez żadnych problemów, ale byli na Macu. Jestem na Win7 64bit.

David Lukac
źródło