Cómo mover archivos de un repositorio de git a otro (no un clon), conservando el historial

Nuestros repositorios de Git empezaron como partes de un único repositorio SVN de monstruos donde los proyectos individuales tenían cada uno su propio árbol así:

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

Obviamente, fue bastante fácil mover archivos de uno a otro consvn mv. Pero en Git, cada proyecto está en su propio repositorio, y hoy me pidieron que mueva un subdirectorio deproject2 aproject1. Hice algo como esto:

$ 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

Pero eso parece bastante complicado. ¿Hay una mejor manera de hacer este tipo de cosas en general? ¿O he adoptado el enfoque correcto?

Tenga en cuenta que esto implica fusionar el historial en un repositorio existente, en lugar de simplemente crear un nuevo repositorio independiente de parte de otro (como en una pregunta anterior).

Respuestas a la pregunta(13)

Su respuesta a la pregunta