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/code
a phd/code/code
y 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/figures
y phd/thesis
(solo reemplace code
con figures
y 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 code
directorio ya tiene un code
subdirectorio o archivo, las cosas podrían salir muy mal (lo mismo para figures
y thesis
por 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 code
subdirectorio o el archivo no está versionado, simplemente use en mv
lugar de git mv
y olvide el git commit
s.