Aqui está uma solução que eu dei aqui :
Primeiro, faça um backup completo do seu diretório phd: não quero ser responsabilizado pela perda de anos de trabalho duro! ;-)
$ cp -r phd phd-backup
Mova o conteúdo de phd/codepara phd/code/codee corrija o histórico para que pareça que ele sempre esteve lá (isso usa o comando filter-branch do 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
O mesmo para o conteúdo de phd/figurese phd/thesis(basta substituir codepor figurese thesis).
Agora sua estrutura de diretórios deve ficar assim:
phd
|_code
| |_.git
| |_code
| |_(your code...)
|_figures
| |_.git
| |_figures
| |_(your figures...)
|_thesis
|_.git
|_thesis
|_(your thesis...)
Em seguida, crie um repositório git no diretório raiz, coloque tudo nele e remova os repositórios antigos:
$ 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, agora você deve ter o que queria:
phd
|_.git
|_code
| |_(your code...)
|_figures
| |_(your figures...)
|_thesis
|_(your thesis...)
Um lado bom desse procedimento é que ele deixará arquivos e diretórios sem versão .
Espero que isto ajude.
Apenas uma palavra de aviso: se seu codediretório já possui um codesubdiretório ou arquivo, as coisas podem dar muito errado (o mesmo para figurese, é thesisclaro). Se for esse o caso, basta renomear esse diretório ou arquivo antes de executar todo este procedimento:
$ cd phd/code
$ git mv code code-repository-migration
$ git commit -m "preparing the code directory for migration"
E quando o procedimento for concluído, adicione esta etapa final:
$ cd phd
$ git mv code/code-repository-migration code/code
$ git commit -m "final step for code directory migration"
Obviamente, se o codesubdiretório ou arquivo não tiver versão, use em mvvez de git mve esqueça os git commits.