Svn checkout mit Git

Wenn man einmal im GitFlow ist, dann möchte man es nicht mehr missen. Ab und zu gilt es jedoch weiterhin mit SVN Repositories zu arbeiten.

Vorbereitungen

Eine kleine Voreinstellung ist zu empfehlen. SVN versioniert auch Ordner, somit können sie auch leer sein. Damit sich der Commit auch mehr wie einer verhält sollte folgende Option aktiviert sein, welche auch leere Ordner löscht:
$ git config --global svn.rmdir true

Desweiteren setzen wir auch gleich:
$ git config --global svn-remote.svn.automkdirs false

um Problemen mit leeren Ordnern beim SVN branchen/mergen zu entgehen.

OSX Yosemite

Solltet ihr bei dem Befehl $ git svn im Terminal folgenden Fehler erhalten:

Can't locate SVN/Core.pm in @INC (you may need to install the SVN::Core module) (@INC contains: /usr/local/git/lib/perl5/site_perl/5.18.2/darwin-thread-multi-2level [...]

dann müsst ihr folgende Befehle im Terminal ausführen um ihn zu beheben:

$ sudo ln -s /Applications/Xcode.app/Contents/Developer/Library/Perl/5.18/darwin-thread-multi-2level/SVN/ /System/Library/Perl/Extras/5.18/SVN
$ sudo ln -s /Applications/Xcode.app/Contents/Developer/Library/Perl/5.18/darwin-thread-multi-2level/auto/SVN/ /System/Library/Perl/Extras/5.18/auto/SVN

Clone

Wie der gute Kai bereits erwähnt, lässt sich der Checkout auf die angegeben Revisionen eingrenzen (shallow clone):

$ git svn clone -s -r 1394:HEAD https://repository.url/name

Der Parameter -s bedeutet Standard Layout und sollte unbedingt angegeben werden, wenn euer Repository die entsprechende Struktur aufweist:

├─┬ /
  ├── branches/
  ├── releases/
  ├── tags/
  ├── trunk/

Die gewünschte Revision für den -r Parameter muss man leider selbst raus suchen.

Pfade ausschließen

Der eigentlich nützlichste Teil ist es Pfade beim checkout zu ignorieren wie z.B. für große Grafiken oder allgemeine Assets die ein Entwickler gegebenfalls nicht benötigt.
$ git svn clone -s -r 123:HEAD --ignore-paths='(app/cache|resources)' repo-url

Checkout fortsetzen

Sollte der Checkout mit Git sehr lange dauern oder muss unterbrochen werden, kann man mit $ git svn fetch den git clone Vorgang im entsprechenden Ordner zu jeder Zeit weiterführen.

Branch erstellen & wechseln

Mit SourceTree ist es aktuell leider nicht möglich einen neuen Branch anzulegen bei dem zugleich der Remote-Tracker richtig gesetzt wird.
SourceTree wirft demnach folgende Fehlermeldung: cannot set up tracking information starting point is not a branch

Lösung ist einen neuen Branch mit svn direkt anzulegen und diesen anschließend auszuchecken.
$ svn cp https://repository.url/name/trunk@6019 https://repository.url/name/branches/yourfeaturebranch -m 'created yourfeature branch'

$ git checkout -b feature/yourfeaturebranch refs/remotes/feature_branch_123