Aquí hay una solución que di aquí :
Primero haga una copia de seguridad completa de su directorio de doctorado: ¡no quiero ser responsable de sus años perdidos de trabajo duro! ;-)
$ cp -r phd phd-backup
Mueva el contenido de phd/codea phd/code/codey corrija el historial para que parezca que siempre ha estado allí (esto usa el comando filter-branch de git ):
$ cd phd/code
$ git filter-branch --index-filter \
'git ls-files -s | sed "s#\t#&code/#" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
git update-index --index-info &&
mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
Lo mismo para el contenido de phd/figuresy phd/thesis(solo reemplace codecon figuresy thesis).
Ahora su estructura de directorio debería verse así:
phd
|_code
| |_.git
| |_code
| |_(your code...)
|_figures
| |_.git
| |_figures
| |_(your figures...)
|_thesis
|_.git
|_thesis
|_(your thesis...)
Luego cree un repositorio git en el directorio raíz, extraiga todo y elimine los repositorios antiguos:
$ cd phd
$ git init
$ git pull code
$ rm -rf code/code
$ rm -rf code/.git
$ git pull figures --allow-unrelated-histories
$ rm -rf figures/figures
$ rm -rf figures/.git
$ git pull thesis --allow-unrelated-histories
$ rm -rf thesis/thesis
$ rm -rf thesis/.git
Finalmente, ahora deberías tener lo que querías:
phd
|_.git
|_code
| |_(your code...)
|_figures
| |_(your figures...)
|_thesis
|_(your thesis...)
Un lado bueno de este procedimiento es que dejará en su lugar archivos y directorios no versionados .
Espero que esto ayude.
Sin embargo, solo una palabra de advertencia: si su codedirectorio ya tiene un codesubdirectorio o archivo, las cosas podrían salir muy mal (lo mismo para figuresy thesispor supuesto). Si ese es el caso, simplemente cambie el nombre de ese directorio o archivo antes de realizar todo este procedimiento:
$ cd phd/code
$ git mv code code-repository-migration
$ git commit -m "preparing the code directory for migration"
Y cuando finalice el procedimiento, agregue este paso final:
$ cd phd
$ git mv code/code-repository-migration code/code
$ git commit -m "final step for code directory migration"
Por supuesto, si el codesubdirectorio o el archivo no está versionado, simplemente use en mvlugar de git mvy olvide el git commits.