662 Stimmen

Wie verschiebt man einige Dateien von einem Git-Repository in ein anderes (kein Klon), wobei die Historie erhalten bleibt?

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X