Git und SVN

Seit kurzer Zeit nutze ich Git (zusammen mit SVN). Der Vorteil ist, dass ich lokale Commits sammeln kann, und diese gebündelt ins SVN übertragen kann. Die Schritte zur Einrichtung habe ich hier mal zusammen getragen.

1. Vorarbeiten: Git konfigurieren

1.1. Eigenen Nutzer in globaler Konfiguration angeben

Zuerst sollte man in der globalen Git-Konfiguration sich selbst als Nutzer eintragen.

git config --global -e

[user]
  name = Ronny Friedland
  email =

1.2. Authors Datei erstellen

Im SVN werden alle Commits dem Login-Namen zugeordnet, mit dem man sich mit dem SVN verbunden hat. Zur besseren Lesbarkeit kann man aber die Logins richtigen Namen zuordnen.
In meinem Beispiel liegt die Datei im Home-Verzeichnis des Nutzers.

/home/gituser/fooproject-authors.txt

h.mustermann = Hans Mustermann
f.musterfrau = Frieda Musterfrau

Wenn man sich für ein authors-file entscheidet, muss diese immer aktuell gehalten und neue Logins nachgetragen werden.

1.3. Projekt auschecken

Die bisherigen Schritte sollten genügen, um das Projekt aus dem SVN auszuchecken. Der folgende Befehl checkt den trunk vom Repository unter http://localhost/svn/fooproject in das Verzeichnis /home/gituser/fooproject/checkout aus. Zusätzlich wird das eben erstellte authors-file angegeben.

git svn clone http://localhost/svn/fooproject/ --authors-file=/home/gituser/fooproject-authors.txt /home/gituser/fooproject/checkout --stdlayout

Dies kann je nach Größe des Repositories eine Weile dauern.

1.4. Projektspezifische Konfiguration anpassen

Sofern projektspezifische Anpassungen für Git notwednig sind, können diese in der lokalen Konfiguration gemacht werden.

git config -e

[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
  ignorecase = true
  whitespace =
[svn-remote "svn"]
  url = http://localhost/svn/fooproject/trunk
  fetch = src/trunk:refs/remotes/trunk
  branches = src/branches/*:refs/remotes/*
  tags = src/tags/*:refs/remotes/tags/*
[svn]
  authorsfile = /home/gituser/fooproject-authors.txt
[gui]
  wmstate = normal
  geometry = 811x377+132+449 166 169

2. Mit Git arbeiten

2.1. Ins SVN committen

Nach einer Menge lokaler Git-Commits kann man das Ganze ins SVN übertragen. Der Befehl dafür ist git svn dcommit

2.2. Aktuellen SVN Stand holen

Die aktuellen Quellen aus dem SVN können mit Hilfe von git svn rebase geholt werden.

Git beschwert sich z.B. beim Aktualisieren der Sourcen, wenn es lokale Änderungen gibt, die noch nicht eingecheckt wurden. Abhilfe schafft hier git-stash.

Zuerst müssen die Änderungen weggespeichert werden. Damit haben wir den eingecheckten Arbeitsstand.
Dann kann z.B. die aktuelle Revision aus dem SVN geholt werden. Die weggespeicherten Änderungen werden mit git stash pop wieder zurück geholt. Gleichzeitig wird der Stash-Eintrag entfernt. Soll der Eintrag beibehalten werden, können die Änderungen auf mit git stash apply geholt werden.
git stash

git svn rebase

git stash pop