Как переместить файлы из одного git-репо в другой (не клон), сохраняя историю

Наши Git-репозитории начинались как части одного монстра SVN-репозитория, где у каждого проекта было свое дерево, например:

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

Очевидно, что было довольно легко перемещать файлы из одного в другой сsvn mv, Но в Git каждый проект находится в своем собственном репозитории, и сегодня меня попросили переместить подкаталог изproject2 вproject1, Я сделал что-то вроде этого:

$ 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

Но это кажется довольно запутанным. Есть ли лучший способ сделать такое вообще? Или я принял правильный подход?

Обратите внимание, что это включает в себя объединение истории в существующее хранилище, а не просто создание нового отдельного хранилища из части другого (как и в предыдущем вопросе).

Ответы на вопрос(13)

Ваш ответ на вопрос