L'idea generale è quella di utilizzare 'git filter-branch' e le seguenti operazioni:
1) Creare un modulo utilizzando --subdirectory-filtro filter-branch
(dopo la clonazione vostro repo).
$ git filter-branch --subdirectory-filter ABC HEAD -- --all
Vedere questo SO question per ulteriori informazioni su questo passaggio.
2) Creare un superprogetto utilizzando un filtro indice di filter-branch
per eliminare il sottomodulo.
$ git filter-branch --index-filter "git rm -r -f --cached --ignore-unmatch ABC" --prune-empty HEAD
3) Confermare il sottomodulo all'ultima versione del superprogetto.
Vedere Detach subdirectory into separate git repository per un esempio pratico.
Ogni sottomodulo manterrà la sua cronologia.
Ma, come detto in questo patch proposal, sarebbe:
perdere tutti i collegamenti storici tra l'SuperProject ed il modulo, rompendo strumenti come 'git bisect
', e rendendo difficile il recupero vecchie versioni.
Idealmente, ogni versione del SuperProject appena creato sarebbe legato alla versione corretta del modulo (e tutte le voci .gitmodules verrebbe impostato correttamente, anche, in tutta la storia del progetto)
Se non è necessario avere una cronologia precedente collegata ai nuovi sottomoduli, è possibile seguire i passaggi sopra menzionati.
Ma se hai bisogno di diramarti da un punto precedente mentre hai riferimenti ai tuoi sottomoduli (che sono al momento semplici sottodirectory), potresti prendere in considerazione di provare lo script menzionato nella patch a cui mi riferisco. Si è discusso in this thread, ma integrato a Git ancora, come dice Junio C Hamano:
Purtroppo, non credo che abbiamo progettato completamente (non attuata a tutti) il comportamento di controllare diversi punti della storia che ha lo stesso sottomodulo si è spostato nell'albero del superprogetto.
possibile duplicato di [Come estrarre una sottodirectory git e creare un sottomodulo?] (Http://stackoverflow.com/questions/920165/howto-extract-a-git-subdirectory-and-make-a- submodule-out-of-it) –
possibile duplicato di [Separa sottodirectory in repository Git separato] (http: // stackoverflow.it/questions/359424/detach-subdirectory-into-separate-git-repository) –