So verschieben Sie Dateien von einem Git-Repo zu einem anderen (nicht zu einem Klon), wobei der Verlauf beibehalten wird

Unsere Git-Repositorys begannen als Teile eines einzelnen Monster-SVN-Repositorys, in dem die einzelnen Projekte jeweils einen eigenen Baum hatten:

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

Offensichtlich war es ziemlich einfach, Dateien mit zu verschiebensvn mv. Aber in Git befindet sich jedes Projekt in einem eigenen Repository, und heute wurde ich gebeten, ein Unterverzeichnis von zu verschiebenproject2 zuproject1. Ich habe so etwas gemacht:

$ 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

Aber das scheint ziemlich verworren zu sein. Gibt es einen besseren Weg, um solche Dinge im Allgemeinen zu tun? Oder habe ich den richtigen Ansatz gewählt?

Beachten Sie, dass dies das Zusammenführen des Verlaufs in ein vorhandenes Repository umfasst, anstatt einfach ein neues eigenständiges Repository aus einem Teil eines anderen zu erstellen (wie in einer früheren frage).

Antworten auf die Frage(13)

Ihre Antwort auf die Frage