Quello che probabilmente sta succedendo è che il master
del sottomodulo non è la versione richiesta dal repository proprietario.
impostare il proprio modulo per la versione che il repo tenendo vuole:
holding/ $ git submodule update
Controllare lo SHA1 desiderata del modulo:
holding/ $ git submodule # (1)
<list of all submodules, with the desired SHA1>
Verificare qual è il vostro modulo master
:
holding/ $ cd sub
holding/sub $ git checkout master
holding/sub $ git log -1 # (2)
Il numero SHA1
in (2) è uguale a quello visto in (1)? Se no, questo è il tuo problema. Qualcosa è accaduto nel master del sottomodulo, ma questi nuovi cambiamenti non sono stati inclusi nel repository.
Il repository di mantenimento mantiene un SHA1
come riferimento alla versione del sottomodulo da utilizzare. Se si verifica ulteriore sviluppo nel repository del sottomodulo, il repository di mantenimento mantiene la stessa versione, non aggiorna automaticamente il sottomodulo.
Se si esegue il checkout di una versione più recente (ad es. master
) del sottomodulo e quindi si torna al repository di mantenimento, git status
indica che è stato estratto un nuovo commit nel sottomodulo. Questo modifica del commit del sottomodulo corrente può essere impegnato nel repository di tenuta. Ciò aggiornerebbe la versione del sottomodulo da utilizzare con questo commit di holding.
Se si desidera continuare a lavorare sul modulo, dalla versione che il repo tenendo vuole, avrete bisogno di creare un nuovo ramo. master
riflette lo sviluppo ulteriore nel repository del sottomodulo, quindi o lavori dal master
(e includi sia questo ulteriore sviluppo che il tuo nuovo lavoro), oppure crei un nuovo ramo dalla testa staccata a cui si riferisce l'azienda.
Se si dovesse forzare master
sulla testata staccata che si desidera tenere, cosa accadrebbe ai commit (ulteriore dev) che sono stati creati tra la testina staccata e master
? Sarebbero persi. E cosa succederebbe la prossima volta che spingi il tuo spostato da master
a origin
? Ci sarebbe un conflitto dal momento che il tuo locale master
avrebbe dovuto divergere da origin
.
Grazie per le informazioni. Fa la clonazione senza --recursive e quindi facendo 'cd helper; git submodule init; aggiorna git submodule 'fai qualcosa di diverso? C'è un modo semplice per riportare un sottomodulo al punto in cui il progetto genitore dice che dovrebbe essere, essere su "master" (quindi posso eseguire commit su di esso), ma non essere stato scaricato in modo che non sappia che c'è più lavoro nel futuro? –
Un clone ricorsivo fa la stessa cosa dell'invio e dell'aggiornamento del sottomodulo. Ogni volta che esegui l'aggiornamento di un sottomodulo, Reimposta HEAD al commit specificato nell'indice e ogni volta che HEAD non punta a quel commit per nessun motivo riceverai quel messaggio. L'unico modo per far sparire questo messaggio è eseguire un aggiornamento del sottomodulo o aggiornare il commit nell'indice (git add; git commit). Puoi anche ignorare i sottomodelli in stato git con il flag --ignore-submodules (http://www.nils-haldenwang.de/frameworks-and-tools/git/how-to-ignore-changes-in-git-submodules) –