seeseekey.net - Invictus Deus Ex Machina

Man nehme die Git Repositories A und B:

A
|_.git
|_file01.txt
|_file02.txt
|_file03.txt

B
|_.git
|_Zeugs
|_image01.txt
|_image02.txt
|_image03.txt

Im Verzeichnisbaum sieht das ganze dabei so aus:

*
|_A
|_B

Nun soll der Inhalt des Repositories B im Repository A landen. Wichtig hierbei ist das die History erhalten bleiben soll. Dazu legen wir in Repository A einen Branch an und laden das Repository B in diesen. Im Repository A öffnen wir eine Konsole und geben dort folgendes ein:

git remote add other ../B
git fetch other
git checkout -b tmpBranch other/master
git checkout master
git merge tmpBranch
git branch -d tmpBranch
git remote rm other
git push                           

Sollte es nach dem “merge tmpBranch” zu Konflikten kommen, so müssen diese gelöst werden und das ganze dann mittels “git commit” bzw. “git commit -a” fixiert werden. Danach sieht das Repository dann so aus:

A
|_.git
|_Zeugs
|_file01.txt
|_file02.txt
|_file03.txt
|_image01.txt
|_image02.txt
|_image03.txt

Für Git Neulinge das ganze nochmal ein wenig genauer. Mittels “git remote add other ../B” wird dem Repository A ein neuer Remote hinzugefügt. Die Daten aus diesem werden dann mittels “git fetch other” geladen und anschließend werden diese “git checkout -b tmpBranch other/master” in einen neuen Branch namens “tmpBranch” gepackt.

Nun machen wir mit “git checkout master” den Masterbranch wieder zum aktiven Branch und mergen den “tmpBranch” mittels “git merge tmpBranch” in den Masterbranch. Danach wird der “tmpBranch” mittels “git branch -d tmpBranch” gelöscht und der nicht mehr benötige Remote mittels “git remote rm other” entfernt.

Nun wird das ganze noch mit “git push” auf den Remote des Repositories gepusht und fertig ist die Überführung.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/Git
http://progit.org/book/de/ch3-4.html
http://de.gitready.com/beginner/2009/01/25/branching-and-merging.html
http://stackoverflow.com/questions/1683531/how-to-import-existing-git-repository-into-another

5 Kommentare

  1. Nun soll der Inhalt des Repositories A im Repository B landen.
    Du beschreibst es aber andersrum, was etwas verwirrend ist.

    Antworten

  2. Ich würde den Satz mit dem furchtbaren Wort “pullen” ändern oder zumindest weiter unten erklären, dass damit die zwei Schritte “fetch + checkout” gemeint sind.

    Antworten

  3. Thorbjørn Lindeijer

    Why the “tmpBranch”? This should have been enough to merge B into A:

    git remote add other -f ../B
    git merge other/master

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.