Git Repository umziehen

Manchmal möchte man ein Git Repository von Server A auf Server B umziehen (in diesem Fall von Google Code zu Github). Das ganze ist dabei relativ unproblematisch. Zuerst wird das bestehende Repository geklont:

git clone https://code.google.com/p/cscl/

In der GitHub Oberfläche erstellen wir nun ein neues Repository (in diesem Fall mit dem Namen „CSCL“). Danach entfernen wir den alten Remote und weisen einen neuen hinzu:

git remote rm origin
git remote add origin :seeseekey/CSCL.git

Mittels „git remote -v“ kann man sich die bestehenden „Remotes“ anschauen. Nachdem der neue Remote gesetzt wurden laden wir das Repository (mittels „push“) bei GitHub hoch:

git push -u origin master

Damit ist der Umzug abgeschlossen.

Weitere Informationen gibt es unter:
https://help.github.com/articles/removing-a-remote

Gesetze in Git

Manchmal gibt es seltsame Ideen, wie z.B. sämtliche Gesetze in ein Git Repository zu packen. Was auf den ersten Blick skurril klingt, hat aber durchaus einen interessanten Nebenaspekt. So kann man bereits heute die Gesetze im Internet einsehen. Das Git Repository hat allerdings den Vorteil, dass man nun auch die Änderungen der Gesetzte verfolgen kann. Wer sich das ganze anschauen möchte findet das Repository unter https://github.com/bundestag/gesetze.

Weitere Informationen gibt es unter:
http://www.golem.de/news/bundesgit-ein-git-repository-fuer-deutsche-gesetze-1208-93709.html

git ready

Eine schöne Seite über Git ist sicherlich http://gitready.com/ bzw. deren deutsches Äquivalent welches unter http://de.gitready.com/ zu finden ist. Dort gibt es Tipps rund um Git in kleinen handlichen und leicht verständlichen Artikeln. Die Tipps sind dabei in Kategorien (Anfänger, Fortgeschrittene Anfänger und Fortgeschrittene) unterteilt, so das man sich zuerst an die einfacheren Themen herantasten kann und so Stück für Stück sein Wissen über Git erweitern kann.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/Git

git add rückgängig machen

Unter Git kann man mittels:

git add test.txt

eine Datei dem Repository hinzufügen. Beim nächsten:

git commit

befinden sich die entsprechenden Dateien dann im Repository. Möchte man nun aber eine bestimmte Datei im Commit doch nicht hinzufügen, so geschieht dies mittels:

git reset test.txt

Beim anschließenden Commit wird diese Datei dann nicht mehr berücksichtigt.

Weitere Informationen gibt es unter:
http://stackoverflow.com/questions/348170/undo-git-add-before-commit

Dateien von einem in ein anderes Git Repostory überführen

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