2012-01-13 15 views
9

Ho creato un sottomodulo git e l'ho inserito nel nostro repository principale. Questo ha funzionato bene e posso vedere il sottomodulo nel repository tramite un browser.non riesce con errore su una macchina ma funziona su un'altra macchina

Per testarlo funziona correttamente, ho cercato di ottenere che l'origine sia un albero di nuova costruzione. Prima ho eseguito git submodule init e poi git submodule update <submodule-name>.

Questo viene a mancare con l'errore:

error: pathspec 'x/mypkg' did not match any file(s) known to git. Did you forget to 'git add' 

Ho provato ad aggiungere al .gitmodules l'URL del modulo, ma senza fortuna.

risposta

3

Questo è probabile perché tu o qualcuno del tuo team ha modifiche nel sottomodulo che non sono pubblicate (impegnate, ma non inviate al server remoto). Hanno quindi pubblicato il superproject con riferimenti al commit git nel sottomodulo che non esiste sul server git. Quindi git sta cercando di tirare giù uno specifico ID di commit git del sottomodulo che non riesce a trovare.

Questo sarebbe il caso se le modifiche si trovano in un repository altrove sulla macchina o su un'altra macchina.

Per risolvere, passare a quel repository che fa riferimento a commit e pubblica (push) le modifiche del sottomodulo al server. Oppure modificare il sottomodulo in modo che punti a un ID di commit diverso.

+0

Penso di aver avuto un caso molto simile ma non ancora sicuro. Avevo una libreria che ho aggiunto come nuovo sottomodulo e un altro sottomodulo utilizza questa libreria. Ho prima modificato la libreria, l'ho confermata, l'ho spinta e poi modificato e spinto il sottomodulo che lo utilizza. Nessun altro sta modificando questi nel mio caso. Stranamente, non posso aggiornare il sottomodulo che usa anche la libreria. –

+0

@GauravSinha In ogni caso, se stai ricevendo l'errore su 'git submodule update', è perché il repository git non riesce a localizzare l'ID di commit git a cui punta il sottomodulo. Poiché stai creando un "nuovo albero" mentre lo inserisci, l'URL è sbagliato oppure non hai premuto il commit a cui è indirizzato il sottomodulo. –

+0

sembra che potrebbe essere l'URL sbagliato, lasciami fare un tentativo, incrociamo le dita .. –

1

Per ottenere nuovi sottomoduli in altri repository, credo che sia necessario eseguire git submodule init una volta prima di iniziare a eseguire git submodule update; questo registrerà il nuovo sottomodulo da .gitmodules in .git/config.

+0

Ho eseguito init sottomulo git prima di eseguire il comando di aggiornamento del sottomodello git. Purtroppo non aiuta Aggiornata la mia domanda per evitare confusione. –

13

Ho anche ricevuto questo errore utilizzando TortoiseGit durante il tentativo di sottomoduli di aggiornamento non presenti nell'indice. Cioè, esistono in .gitmodules ma non sono stati aggiunti correttamente al repository.

La soluzione è di riaggiungerli manualmente utilizzando i percorsi specificati in .gitmodules. È possibile utilizzare l'interfaccia utente TortoiseGit o eseguire questo sulla riga di comando per ogni modulo ...

git submodule add <url> <path> 

Re-adding a git submodule

(Mi rendo conto che probabilmente non è la soluzione per il manifesto originale, ma si spera che aiuta altri Googling questo.)

+0

Ho dovuto aggiungere '- -force' per fare questo lavoro. –

Problemi correlati