Von Subversion zu Git

4. Juli 2014 von Dirk Dittmar [permalink]

Wir haben hier vor einiger Zeit auf Git umgeschwenkt. Das heißt alle neuen Projekte werden mit Git verwaltet und “long runner” sind auf Git migriert worden. Von Subversion zu Git zu migrieren ist nicht mal eben so getan und es hat mich einiges an Recherche gekostet um ein Shell-Script zu schreiben.

Hier das Script das normalerweise kaum angepasst werden muss (bis auf die Pfade und Projektnamen):

#!/bin/bash

##
## Allgemeiner Logging Output
##
function logging {
        echo `date +"[%H:%M:%S] "`$@
}

logging "git svn clone"
git svn clone --stdlayout --prefix 'svn/' -A users.txt https://svn.foobar.test/bla/laber/projekt/ projekt
cd projekt

logging "svn branches to git branches"
git for-each-ref refs/remotes/svn --format="%(refname:short)" | sed 's#svn/##' | grep -v '^tags' | while read aBranch; do git branch $aBranch svn/$aBranch; done

logging "remove git branch 'trunk'"
git branch -d trunk 

logging "svn tags to git tags"
git for-each-ref refs/remotes/svn/tags --format="%(refname:short)" | sed 's#svn/tags/##' | while read aTag; do git tag $aTag svn/tags/$aTag; done

logging "Hurray! -> push this!"
git remote add origin ssh://foobar@git.foobar.test/projekt.git
git push -u --all origin
git push --tags origin

Das Script migriert die gesamte Historie des Projekt inkl. aller Zweige und Tags in das Git-Repo. Hier noch die users.txt:

dirk = Dirk Dittmar <d.dittmar@wortzwei.de>
svn-user-name = Real Username <email.adr@host.test>

Die Benutzer zu finden war etwas schwieriger. Das hier sollte euch eine Liste der Subversion-User auswerfen damit man die user.txt leichter erstellen kann:

svn log --quiet | grep "^r" | awk '{print $3}' | sort | uniq

Ich hoffe das hilft euch weiter. Zumindest hätte mir so ein Artikel geholfen ;)

Tags: , ,
Kategorie: Linux/Unix, Softwareentwicklung | keine Kommentare »