Jak przenieść pliki z jednego repozytorium git na inny (nie klon), zachowując historię

Nasze repozytoria Git zaczęły się jako części pojedynczego repozytorium SVN, w którym poszczególne projekty miały swoje własne drzewo w taki sposób:

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

Oczywiście przeniesienie plików z jednego do drugiego było całkiem łatwesvn mv. Ale w Git każdy projekt jest w swoim własnym repozytorium, a dzisiaj zostałem poproszony o przeniesienie podkatalogu zproject2 doproject1. Zrobiłem coś takiego:

$ 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

Ale to wydaje się dość zawiłe. Czy jest lepszy sposób na robienie tego rodzaju rzeczy w ogóle? A może zastosowałem odpowiednie podejście?

Należy zauważyć, że wymaga to scalenia historii z istniejącym repozytorium, zamiast tworzenia nowego autonomicznego repozytorium z części innego repozytorium (jak we wcześniejszym pytaniu).

questionAnswers(13)

yourAnswerToTheQuestion