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).