2015-05-19 21 views
6

sono stato successo in grado di convertire moduli di sottodirectory utilizzando comandi quali i metodi descritti in questi due esempi:Git: conversione di una sottodirectory a un sottomodulo

Submodule->Subdir

Subdir->Submodule

L' la sfida è riuscire a raggiungere questo risultato su una directory, preservando la sua cronologia attraverso ogni conversione.
Questi due metodi descritti sopra hanno funzionato bene su un repository sperimentale banale, ma non gestiscono un repository più complesso. ad esempio, un repository con un modello di commit arbitrario.

Il problema si espone quando si esegue

git filter-branch --subdirectory-filter <lib-directory> -- --all

quando si cerca di convertire una directory (che in precedenza era un modulo) per un modulo. Se capisco correttamente. Questo stava gettando:

Rewrite c95281d27e4602e9af50146eefcf7c28f5bb4f35 
     (2/11)a989b207d3757f9803fd50fa2d77908a4dc1330e 
fatal: failed to unpack tree object 
     c95281d27e4602e9af50146eefcf7c28f5bb4f35:lib/test_submodule 
Could not initialize the index` 

di cui non erano assolutamente non ha prodotto risultati simili in linea.
È stato calcolato che ciò si è verificato a causa del riferimento ricorrente al sottomodulo all'interno dell'INDICE, per cui quando il sottomodulo è stato convertito, si sarebbe verificato l'errore precedente.

Esiste un modo per eseguire uno filter-branch che consenta di evitare questi precedenti riferimenti al sottomodulo ??

Edit: Sono tornato a guardare questo problema di nuovo, e non ho ancora trovato un modo per risolverlo. L'utilizzo del metodo Subdir-> Submodule con git filter-branch funziona correttamente per una directory normale; ma si blocca quando colpisce un sottomodulo. L'incidente che continua a succedere in questa sezione all'interno git:

https://github.com/github/git-msysgit/blob/master/git-filter-branch.sh#L300

non riesco molto senso di esso, però.

risposta

8

Per me ha funzionato dopo l'aggiunta di una barra finale alla directory:

$ git filter-branch --subdirectory-filter htdocs/typo3_src -- --all 
Rewrite cbe03e13da071403a2632263f1760b560398cdd3 (1/12) (0 seconds passed, remaining 0 predicted) 004b20fc15023539484c7f5990b99780f54dc0ac 
fatal: failed to unpack tree object cbe03e13da071403a2632263f1760b560398cdd3:htdocs/typo3_src 
Could not initialize the index 

$ git filter-branch --subdirectory-filter htdocs/typo3_src/ -- --all 
Rewrite ec6e3c7212f1080fc052c87b1129335ab5bee524 (5/10) (1 seconds passed, remaining 1 predicted)  
Ref 'refs/heads/master' was rewritten 
Ref 'refs/remotes/origin/master' was rewritten 
Ref 'refs/remotes/origin/develop' was rewritten 
WARNING: Ref 'refs/remotes/origin/master' is unchanged 
WARNING: Ref 'refs/tags/0.0.1' is unchanged 
0

Invece di utilizzare l'opzione rev-list --all, provare a filtrare con hash di commit.

git filter-branch --subdirectory-filter <lib-directory> <hash>... 

il commit che ha causato il problema nel mio caso è stato quello contenente il Subproject commit. Esempio:

git filter-branch --subdirectory-filter <lib-directory> c95281d27e4... 
Problemi correlati