Como mover arquivos de um repositório do git para outro (não um clone), preservando o histórico

Nossos repositórios Git começaram como partes de um único repositório SVN de monstros onde cada um dos projetos individualmente possui sua própria árvore da seguinte forma:

project1/branches
        /tags
        /trunk
project2/branches
        /tags
        /trunk

Obviamente, era muito fácil mover arquivos de um para outro comsvn mv. Mas no Git, cada projeto está em seu próprio repositório, e hoje me pediram para mover um subdiretório deproject2 paraproject1. Eu fiz algo assim:

$ git clone project2 
$ cd project2
$ git filter-branch --subdirectory-filter deeply/buried/java/source/directory/A -- --all
$ git remote rm origin  # so I don't accidentally the repo ;-)
$ mkdir -p deeply/buried/different/java/source/directory/B
$ for f in *.java; do 
>  git mv $f deeply/buried/different/java/source/directory/B
>  done
$ git commit -m "moved files to new subdirectory"
$ cd ..
$
$ git clone project1
$ cd project1
$ git remote add p2 ../project2
$ git fetch p2
$ git branch p2 remotes/p2/master
$ git merge p2 # --allow-unrelated-histories for git 2.9
$ git remote rm p2
$ git push

Mas isso parece bastante complicado. Existe uma maneira melhor de fazer esse tipo de coisa em geral? Ou adotei a abordagem correta?

Observe que isso envolve mesclar o histórico em um repositório existente, em vez de simplesmente criar um novo repositório independente de parte de outro (como em uma pergunta anterior).

questionAnswers(13)

yourAnswerToTheQuestion