Unsere Git-Repositories waren anfangs Teile eines einzigen SVN-Monster-Repositories, in dem die einzelnen Projekte jeweils ihren eigenen Baum hatten:
project1/branches
/tags
/trunk
project2/branches
/tags
/trunk
Offensichtlich war es ziemlich einfach, Dateien von einem zum anderen zu verschieben mit svn mv
. Aber in Git ist jedes Projekt in seinem eigenen Repository, und heute wurde ich gebeten, ein Unterverzeichnis von project2
a project1
. Ich habe etwas Ähnliches 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 overwrite 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 eine bessere Methode, um so etwas generell zu tun? Oder habe ich den richtigen Ansatz gewählt?
Beachten Sie, dass dabei die Historie in ein bestehendes Repository zusammengeführt wird und nicht einfach ein neues, eigenständiges Repository aus einem Teil eines anderen Repositorys erstellt wird ( wie in einer früheren Frage ).