Nessuna mapping del sottomodulo trovata in .gitmodule per un percorso che non è un sottomodulo

Ho un progetto che ha un sottomodulo a lib/three20

Il mio file .gitmodule il seguente aspetto:

 [submodule "lib/three20"] path = lib/three20 url = git://github.com/facebook/three20.git 

Ho clonato questo in passato senza errori, ( git submodule init seguito da un git submodule update ) e ha funzionato per un po ‘.

Ho provato a clonare questo su una nuova macchina, e ora sto ricevendo questo errore su git submodule init :

 No submodule mapping found in .gitmodules for path 'Classes/Support/Three20' 

Quel percorso è solo una cartella vuota in Xcode che uso per ospitare i progetti dall’altra directory. Non fa parte del file .gitmodules , quindi non vedo da dove viene questo percorso.

Qualche idea?

Seguendo la risposta di rajibchowdhury (upvoted), utilizzare il comando git rm che è consigliato per rimuovere la voce speciale nell’indice che indica un sottomodulo (una ‘cartella’ con una modalità speciale 160000 ).

Se quel percorso di entrata speciale non è referenziato nel .gitmodule (come ‘ Classes/Support/Three20 ‘ nella domanda originale), allora è necessario rimuoverlo, per evitare la ” Nessuna mapping sottomodulo trovata in .gitmodules per il percorso ” messaggio di errore.

Puoi controllare tutte le voci dell’indice che fanno riferimento ai sottomoduli:

 git ls-files --stage | grep 160000 

Risposta precedente (novembre 2010)

È ansible che tu non abbia dichiarato correttamente il tuo sottomodulo iniziale (cioè senza coda ‘/’ alla fine, come descritto nella mia vecchia risposta , anche se il tuo .gitmodule ha dei percorsi che sembrano ok in esso).

Questo thread cita:

ottieni lo stesso errore quando esegui ‘git submodule init’ da un nuovo clone?
Se è così, hai qualcosa di sbagliato.

Se non si hanno sottomoduli, cancellare .gitmodules e qualsiasi riferimento ai sottomoduli in .git / config e assicurarsi che la dir Pikimal non abbia una directory .git in essa.
Se ciò risolve il problema, effettua il check-in e fai lo stesso nella tua copia di lavoro di crociera.

Ovviamente, non eliminare il file .gitmodules principale, ma .gitmodules cura degli altri file .gitmodules aggiuntivi nella struttura di lavoro.


Sempre in tema di “inizializzazione errata del sottomodulo”, Jefromi menziona i sottomoduli che in realtà sono gitlink.

Vedi Come monitorare i contenuti non tracciati? per convertire tale directory in un vero sottomodulo.

Nessuna mapping del sottomodulo trovata in .gitmodules per il percorso “OtherLibrary / MKStore” quando

 $ git submodule update --init 

Non sapevo perché si è verificato l’errore. Dopo aver trascorso un minuto e trovato la risposta in StackOverflow.

 $ git rm --cached OtherLibrary/MKStore 

e quindi aggiornare di nuovo il sottomodulo. Funziona bene.

http://en.saturngod.net/no-submodule-mapping-found-in-gitmodules

Quando uso SourceTree per fare le cose, sputerà questo messaggio.
Il messaggio che ho incontrato:

 git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree submodule update --init --recursive No submodule mapping found in .gitmodules for path 'SampleProject/SampleProject' Completed with errors, see above 

Il mio scenario è che ho applicato erroneamente la directory del progetto che contiene la cartella .git .
SourceTree considerava questa cartella come sottomodulo git, ma in realtà no.

La mia soluzione è usare la riga di comando per rimuoverlo.

 $ git rm -r SampleProject --cached $ git commit -m "clean up folders" 

rimuovere la spazzatura in git e tenerla pulita.

Ho risolto questo problema per me. Inizialmente ho provato a farlo:

 git submodule add --branch master [URL] [PATH_TO_SUBMODULE] 

Dato che si scopre che le specifiche dell’opzione –branch non dovrebbero essere usate se si vuole clonare il ramo master . Genera questo errore:

 fatal: Cannot force update the current branch. Unable to checkout submodule '[PATH_TO_SUBMODULE]' 

Ogni volta che provi a fare un

 git submodule sync 

Questo errore verrà generato:

 No submodule mapping found in .gitmodules for path '[PATH_TO_SUBMODULE]' 

E le linee necessarie in .gitmodules non vengono mai aggiunte.

Quindi la soluzione per me era questa:

 git submodule add [URL] [PATH_TO_SUBMODULE] 

Ho appena ricevuto questo errore dopo aver provato a “git submodule init” su un nuovo checkout del mio repository. Risulta che avevo inizialmente specificato la sottocartella del modulo con il caso errato. Dato che sono su un Mac con un filesystem sensibile alle maiuscole e alle minuscole (hurr), non funzionava. Per esempio:

 git submodule add git@github.com:user/project.git MyApp/Resources/Project Cloning into 'MyApp/Resources/Project' 

ha successo ma il problema è che su disco il percorso è

 Myapp/Resources/Project 

Quello che non capisco è perché git sta iniziando il modulo nella cartella sbagliata (ignorando il caso errato nel mio comando) ma poi funziona correttamente (fallendo) con i comandi successivi.

Ho appena avuto questo problema. Per un po ‘ho provato il consiglio di rimuovere il percorso, rimuovere il percorso, rimuovere .gitmodules, rimuovere la voce da .git / config, aggiungere il sottomodulo indietro, quindi eseguire il commit e spingere la modifica. E ‘stato sconcertante perché sembrava che non ci fossero cambiamenti quando ho fatto “git commit -a”, quindi ho provato a spingere solo la rimozione, quindi ho spinto la readdition per farlo apparire come un cambiamento.

Dopo un po ‘ho notato per caso che dopo aver rimosso tutto, se avessi eseguito “git submodule update –init”, aveva un messaggio su un nome specifico a cui git non avrebbe più dovuto fare riferimento: il nome del repository il sottomodulo stava collegando a, non al nome del percorso che stava controllando. Grepping ha rivelato che questo riferimento era in .git / index. Così ho eseguito “git rm –cached repo-name” e poi ho letto il modulo. Quando mi sono impegnato questa volta, il messaggio di commit includeva una modifica che stava eliminando questo object inatteso. Dopo che funziona bene.

Non sono sicuro di cosa sia successo, immagino che qualcuno abbia usato male il comando del sottomulo git, magari invertendo gli argomenti. Avrei potuto essere persino io … Spero che questo aiuti qualcuno!

La mapping della cartella può essere trovata nella cartella .git/modules (ognuno ha un file di config con riferimento al suo worktree ), quindi assicurati che queste cartelle corrispondano alla configurazione in .gitmodules e .git/config .

Quindi .gitmodules ha il percorso corretto:

 [submodule ""] path =  url = git@github.com:foo/bar.git 

e in .git/modules//config nella sezione [core] hai il percorso giusto per il tuo , ad es.

 [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true worktree = ../../../ 

Se manca la giusta cartella in .git/modules , allora devi andare nella directory del tuo submodule e provare git reset HEAD --hard o git checkout master -f . Se questo non aiuta, probabilmente vuoi rimuovere tutti i riferimenti al sottomodulo rotto e aggiungerlo di nuovo, poi vedi: Rinominare un sottomodulo git .

Scenario: modifica del sottomodulo dalla directory dirA-xxx a un’altra directory dirB-xxx

  1. sposta dirA-xxx su dirB-xxx
  2. modificare la voce in .gitmodules per usare dirB-xxx
  3. modifica la voce in .git / config per usare dirB-xxx
  4. modifica .git / modules / dirA-xxx / config per riflettere la directory corretta
  5. modificare dirA-xxx / .git per riflettere la directory corretta
  6. eseguire git submodule status

    se errore di ritorno: nessuna mapping del sottomodulo trovata in .gitmodules per il percorso dirA-xxx. Ciò è dovuto al fatto che dirA-xxx non esiste, ma è ancora tracciato da git. Aggiorna l’indice git di: git rm --cached dirA-xxx

    Prova con il git submodule foreach git pull . Non ho esaminato lo studio effettivo della struttura del sottomodulo git, quindi i passaggi sopra descritti potrebbero rompere qualcosa. Tuttavia, passando attraverso i gradini sopra, le cose sembrano buone al momento. Se hai qualche idea o dei passi da fare per farlo, condividilo qui. 🙂

Solo git rm subdir andrà bene. che rimuoverà il sottodir come un indice.

nel file .gitmodules , ho sostituito la stringa

 "path = thirdsrc\boost" 

con

 "path = thirdsrc/boost", 

e ha risolto! – –

Di solito, git crea una directory nascosta nella directory principale del progetto (.git /)

Quando lavori su un CMS, è ansible installare moduli / plug-in che portano .git / directory con i metadati di git per il modulo / plugin specifico

La soluzione più rapida è trovare tutte le directory .git e mantenere solo la directory dei metadati root git. Se lo fai, git non considererà quei moduli come sottomoduli di progetto.

Dopo aver visto i miei .gitsubmodules , ho scoperto che avevo una lettera maiuscola in cui non avrei dovuto. Quindi, tieni presente che le directory .gitsubmodules fanno distinzione tra maiuscole e minuscole

Nel mio caso l’errore era probabilmente dovuto a un’errata unione tra .gitmodules su due rami con diverse configurazioni di sottomoduli. Dopo aver preso i suggerimenti da questo forum, ho risolto il problema modificando manualmente il file .gitmodules, aggiungendo la voce del sottomodulo mancante è piuttosto semplice. Dopo di ciò, il comando git submodule update –init –recursive ha funzionato senza problemi.

Il problema per noi era che le voci di sottomodulo duplicate erano state aggiunte in .gitmodules (probabilmente da un’unione). Abbiamo cercato il percorso git lamentato in .gitmodules e trovato le due sezioni identiche. L’eliminazione di una delle sezioni ha risolto il problema per noi.

Per quello che vale, git 1.7.1 ha dato l’errore “no submodule mapping” ma git 2.13.0 non sembra interessarsi.