Sottomoduli Git. Tirando in un nuovo clone del super-progetto


87

OK. Quindi pensavo di averlo leccato ... ma ora ...

Ho un progetto che include una piccola libreria di GitHub come sottomodulo. Nella versione originale di quel super-progetto il sottomodulo funziona come previsto.

Tuttavia, ho appena clonato il superprogetto, ho fatto quello che pensavo di dover fare: "git submodule init", ho fatto apparire la directory del sottomodulo, ma è vuota.

Se provo ora a farlo

git submodule update

ottengo

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

Se provo

git submodule foreach git pull

ottengo

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

Nel mio .git / config, ho questo:

[submodule "external_libraries/BEACHhtml"]
    url = git@github.com:interstar/BEACHhtml.git

Nei miei .gitmodules ho questo:

[submodule "external_libraries/BEACHhtml"]
path = external_libraries/BEACHhtml
url = git@github.com:interstar/BEACHhtml.git

Qualcuno ha idea di cosa manca?

Risposte:


189

Sembra che ora (nel 2019) l'installazione dell'ultimo client GIT potrebbe risolvere il problema secondo i commenti di seguito. Questa dovrebbe essere la soluzione migliore per ora.


Ho il tuo stesso problema. Questo è un bug in git: http://git.661346.n2.nabble.com/BUG-git-submodule-update-is-not-fail-safe-td7574168.html

In breve, per il tuo problema, prova:

# rm -rf external_libraries/BEACHhtml
# git submodule update

Sembra che ci sia qualcosa di sbagliato nella precedente cartella di checkout, rimuoverla e aggiornare di nuovo risolve il problema.


1
per me era un git-fetch impiccato che teneva la cartella bloccata
Mihai Timar

32
Ho dovuto rimuovere sia il sottomodulo worktree ( ext/blah) che la cartella corrispondente sotto GIT_DIR( .git/modules/ext/blah).
Tobu

2
Nel mio caso particolare git submodule updatecontinuava a fallire sul mio server CI perché voleva che qualcuno accettasse le chiavi RSA (il server ci normalmente usa la connessione https e questa era la prima volta che un sottomodulo aveva inserito una connessione ssh). Spero che faccia risparmiare a qualcuno un'ora di grattarsi la testa!
Maverik

8
Nel 2016 questo bug persiste ancora :(
Paulo Neves

6
Check in 2017, ancora presente.
william.taylor.09

4

Ho avuto questo problema (rete instabile, quindi ho lasciato cadere il checkout del sottomodulo in questo modo) e l'ho risolto creando questo script (chiamato in git-submodule-fixmodo da poterlo eseguire come git submodule-fix)

#!/bin/bash 

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

Se ottieni questo, ad esempio da un file git submodule update

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

fare

git submodule-fix some/submodule/path
git submodule update

3

Risolto eliminando 2 directory e recuperando il sottomodulo:

  1. Vai a external_libraries/BEACHhtmle guarda nel .gitfile. Il suo contenuto dovrebbe essere qualcosa di similegitdir: ../../.git/modules/external_libraries/BEACHhtml
  2. Elimina sia external_libraries/BEACHhtmle le .git/modules/external_libraries/BEACHhtmldirectory.

D'ora in poi git submodule updatefunziona senza errori.


potrebbe essere necessario eseguire git submodule initprima in git submodule updatemodo che il sottomodulo venga reinizializzato, quindi funzionerà.
Pellet

1

Se stai leggendo nel 2019 o successivamente, aggiorna il client git. Ha funzionato per me.


0

usa uno strumento diff per confrontare il clone originale che funziona e questo. Inoltre, cosa viene git submoduleprodotto. Assicurati di puntare allo stesso ramo in ogni repo prima di farlo.

Ho il sospetto che tu sia passato a un ramo o una versione precedente in cui il sottomodulo non era definito.

spero che sia di aiuto


0

Ho avuto lo stesso problema con un sottomodulo su un progetto. Quando ho provato a clonare il sottomodulo separatamente ha funzionato bene.

Ho provato tutte le risposte sopra, ma senza successo (aggiornamento del sottomodulo git, ..., rimozione delle cartelle del sottomodulo, ...).

Il problema è scomparso dopo l'aggiornamento di git (da Git-1.7.11-preview20120710) all'ultima versione (a Git-1.8.1.2-preview20130201) in quel momento. Stranamente i miei colleghi avevano una versione ancora più vecchia, funzionavano senza problemi, ma erano su Mac. Sono su Win7 a 64 bit.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.