Warum?

Da ich intern bisher auf subversion entwickle, Code aber auf GitHub stellen möchte, brauche ich eine¹ Möglichkeit diese Projekte möglichst kompatibel nach git zu exportieren. git-svn erlaubt diese Nutzung und erhält die Versionshistorie. Eine Re-Integration nach subversion ist ebenfalls möglich.

Die Infos stammen zum Teil aus Tutorial zu git-svn unter http://viget.com/extend/effectively-using-git-with-subversion.

Eine kleine, nette Einführung zu git gibt es unter http://rogerdudler.github.io/git-guide/index.de.html

¹ Erm, ja. Github kann auch via subversion Repositories verwalten. Allerdings müsste man dann das Projekt komplett dort hosten. Die obige Lösung umgeht dies.

git-svn installieren

git-svn ist unter Debian im gleichnamigen Paket zu finden und mittels

aptitude install git-svn

zu installieren.

Es ist ratsam vor der ersten Verwendung im .bashrc den Suchpfad für git-svn zu hinterlegen, da Debian das Programm unter /usr/lib/git-core/ installiert.

Exportieren von subversion in git Arbeitsverzeichnis

Das jeweilige Projekt, welches exportiert werden soll, sollte vollständig auf dem Subversionserver vorliegen. Sinnvoll ist es über die URL des Projektes zu gehen. Im Beispiel wäre das https://localhost/svn/trunk/fixit/fixit_tiff, welches auf das fixit_tiff Repository zeigt.

Mit folgendem Kommando erzeugt man im /tmp Directory das neue Git-Arbeitsverzeichnis für fixit_tiff:

mkdir /tmp/git
cd /tmp/git
/usr/lib/git-core/git-svn clone https://localhost/svn/trunk/fixit/fixit_tiff ./fixit_tiff

Zur Überprüfung können wir mit git log anschauen, ob unsere History etc. korrekt übernommen wurde:

cd fixit_tiff
git log 
 	commit 92f8cf068d7bdf8e2a39aab8e3db31f3c055bcd4
 	Author: romeyke <romeyke@c63e1d0e-0205-4395-96c5-23d0ee883611>
 	Date:   Wed May 28 15:17:12 2014 +0000
 	
 	    - compiles with debugging code
 	    - added TIFFGetAllTagListCount () because TIFFGetTagListCount() only works w
 	    - added TIFFGetAllTagListEntry () because TIFFGetTagListEntry() only works w
 	    - added print_baseline_tags()
 	    - added print_required_tags()
 	    - added check_required()
 	    - check_*() opens tif-files only in read mode
 	    - improved logic, because we call check*() explicitely, also after repair
 	    
 	    git-svn-id: https://localhost/svn/trunk/
 	
 	commit dd30cfa15101c61111ce62f6e83b0bfee3cb10bb
 	…|

Übertragen auf github

Auf github sollte schon ein entsprechendes Repository angelegt sein. Zuerst müssen wir git nun mitteilen, daß wir auf einen anderen Master gehen:

export yourusername=maxmustermann
export yourreponame=fixit_tiff
git remote add origin https://github.com/${yourusername}/${yourreponame}.git

Mit folgendem Kommando vollführen wir dann den Export aus unserem obigen git-Arbeitsverzeichnis:

git push origin master

Bei Problemen schlage man unter http://stackoverflow.com/questions/12799719/how-to-upload-a-project-to-github nach (Lächeln)

Meine Repos sind unter https://github.com/art1pirat/ zu finden