"Sei su un ramo ancora per nascere" quando si aggiunge il sottomodulo git


118

Sto tentando di aggiungere alcuni sottomoduli alla mia .vim/bundlesdirectory e quando provo ad aggiungere questo particolare repository Git mi dà uno strano errore che non ho mai visto prima:

$ git submodule add -f git://github.com/derekwyatt/vim-scala.git .vim/bundle/vim-scala
fatal: You are on a branch yet to be born
Unable to checkout submodule '.vim/bundle/vim-scala'

Qualche idea su cosa possa causare questo?

Se clono lo stesso repository in una directory di prova (non tramite il comando del sottomodulo), funziona bene e crea i file previsti.

Risposte:


212

Per correggere l'errore, è necessario eliminare la cartella con lo stesso percorso del sottomodulo all'interno della .git/modules/directory. Questo errore può verificarsi quando l'URL non era corretto per il sottomodulo per la prima volta quando è stato aggiunto il sottomodulo.


2
Grazie, ha funzionato. All'inizio era un po 'non ovvio che da quando stavo clonando .vim/bundle/vim-scalanel percorso da eliminare fosse.git/modules/.vim/bundle/vim-scala
matt b

2
Se sei su Windows, nota che la directory sotto .git / modules potrebbe non essere visualizzata a meno che tu non abbiadir /AH
paxos1977

13
Dopo aver visto eliminare quella .git/modules/path/to/submoduledirectory e provare ad aggiungere nuovamente il sottomodulo, ricevo l'errore Il seguente percorso viene ignorato da uno dei tuoi file .gitignore: path / to / submodule .
Drew Noakes

1
@Drew Noakes rimuove .vim / bundle / vim-scala creato dopo la prima esecuzione del sottomodulo git add
Piotr Król

Su Windows puoi anche utilizzare le opzioni di Esplora risorse (nello stesso posto in cui sceglieresti di vedere le estensioni dei file) per vedere le cartelle nascoste nella GUI ed eliminarle.
user83358

13

È necessario aggiungere un sottomodulo all'interno di un repository esistente, tale repository deve essere in uno stato per aggiungere e eseguire il commit del collegamento del sottomodulo e il repository del sottomodulo stesso deve avere un commit per il check-out.

Ora, il repository del sottomodulo stesso deve essere ok se puoi creare un clone regolare altrove. Tuttavia, sembra che si submodule addlamenti se il repository è vuoto mentre il clone no. Questo ragazzo suggerisce che questo è risolvibile semplicemente eseguendo di nuovo lo stesso submodule addcomando.

Se il repository interno non è vuoto, selezionare il repository che si desidera contenere il sottomodulo. Passa alla stessa directory in cui hai eseguito git submodule add, ed esegui git status, e git branchper verificare che il tuo repository contenitore abbia almeno un ramo creato e non sia in uno stato strano.


Ho verificato tutte queste cose. Quando estraggo il repository desiderato in un'altra directory, ha molti file e un masterramo. Il repository a cui sto cercando di aggiungere questo come sottomodulo si trova sul masterramo, non ha problemi evidenti (lo stato restituisce alcuni file modificati, ma questo è tutto), e la cosa più strana è che posso aggiungere altri sottomoduli a questo repository .
matt b

Anche strano: dopo l' fatalavvertimento dal mio OP, git lascia una directory vuota in .vim/bundle/vim-scala. Ho anche notato che anche se .gitmodulesnon è stato toccato, ha aggiunto alcune righe che si riferiscono a questo repository github.com .git/config, ma dopo aver rimosso quelle ho ancora lo stesso fatalmessaggio di errore.
matt b

7
+1 Argh! This guy suggests this is fixable by just running the same submodule add command again.. Ho combattuto questo problema cercando di trovare una risposta ragionevole e questo finalmente lo ha risolto. Questo era per git 1.8.0 sotto MSYS durante la creazione di un sottomodulo da BitBucket, quindi se ti trovi nella stessa situazione, prova prima questo.
Aaron Newton

Anche l'aggiunta di due volte ha funzionato per me. Ma non capisco perché. Alcuna spiegazione?
Elise

Aggiungendo due volte anche qui. Mi piacerebbe capire perché però
Vinicius Dantas

12

Questo errore può verificarsi se stai aggiungendo un sottomodulo che non ha un masterramo. Se vuoi usare un altro ramo quando aggiungi il sottomodulo ( developad esempio), puoi usare il seguente comando:

git submodule add -b <branch> <repository>

1
Nel mio caso il repository è stato appena creato e quindi non aveva file e rami (era vuoto), quindi ha git submodule add -b master <repo.git> <folder>aiutato
vladkras

Questo era il mio problema, il mio sottomodulo aveva solo 2 rami nessuno di loro è una mastertua soluzione ha funzionato per me.
Guerneen4

0

Come accennato da @ drew-noakes, ciò può essere causato dal tentativo di aggiungere un sottomodulo utilizzando un nome di directory elencato nel file .gitignore .

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.