2011-10-01 3 views
18

Ecco la storia: Ho 2 rami Git master e develop Sono attualmente in develop.Sostituito codice di terze parti con sottomoduli git, ora non può passare rami

Ho da tempo avuto i file di origine di una libreria di terze parti inclusa nel mio repository nella directory Vendor/MGTwitterEngine. Questo codice era già stato fuso in master.

Ora, sul ramo develop, ho rimosso la libreria e l'ho sostituita con un sottomodulo git e commesso.

Il problema è che non riesco più a tornare al ramo master. Se provo, ottengo il seguente errore:

The following untracked working tree files would be overwritten by checkout: 
    Vendor/MGTwitterEngine/MGTwitterHTTPURLConnection.h 
    Vendor/MGTwitterEngine/MGTwitterHTTPURLConnection.m 
    Vendor/MGTwitterEngine/MGTwitterLibXMLParser.h 
    Vendor/MGTwitterEngine/MGTwitterLibXMLParser.m 
    Vendor/MGTwitterEngine/MGTwitterMessagesLibXMLParser.h 
    Vendor/MGTwitterEngine/MGTwitterMessagesLibXMLParser.m 
    Vendor/MGTwitterEngine/MGTwitterMessagesParser.h 
    Vendor/MGTwitterEngine/MGTwitterMessagesParser.m 
    ... 
    Aborting 

git pensa che i file di modulo sono "non tracciata" e non li sostituiranno con i cingolati, i file non sottomodulo nella stessa posizione.

Come posso risolvere questo problema?

risposta

16

Sfortunatamente, penso che questo sia solo uno degli svantaggi dell'utilizzo dei sottomoduli. Questi problemi sono descritti in una sezione chiamata "Issues with Submodules" in Pro Git, ma in breve, la soluzione più semplice è quello di spostare la directory modulo di mezzo prima di passare al ramo master:

mv Vendor Vendor.moved 
git checkout master 

Allo stesso modo, quando si passa a develop, è dovrebbe fare:

git checkout develop 
mv Vendor.moved Vendor 
+1

Naturalmente, non appena si passa la transizione, questo problema scompare. (E per essere onesti, è almeno un po 'difficile per Git cambiare * in sicurezza * i rami. Purtroppo, però.) – Cascabel