Von Subversion zu Git umziehen

Aus Tutorials
Zur Navigation springen Zur Suche springen

Noch in Bearbeitung


Voraussetzungen

Es wird ein Case-Sensitives-Dateisystem benötigt, weshalb Linux (auch in VM) notwendig ist.

Folgender Check

java -jar svn-migration-scripts.jar verify

liefert unter Windows nämlich folgende Warnung:

You appear to be running on a case-insensitive file-system. This is unsupported, and can result in data loss.

Siehe dazu auch https://bitbucket.org/atlassian/svn-migration-scripts/issues/1/case-insensitive-warning-on-windows-ntfs

Installation benötigter Tools

Java (OpenJDK 9)

sudo apt-get install openjdk-9-jdk openjdk-9-demo openjdk-9-doc openjdk-9-jre-headless openjdk-9-source 

Git

PPA-Repository

sudo add-apt-repository ppa:git-core/ppa

Pakete installieren

sudo apt-get update && sudo apt-get install git git-svn

Subversion

sudo apt-get install subversion

svn-migration-scripts

Download

https://bitbucket.org/atlassian/svn-migration-scripts/downloads/

Validation

Damit Subversion richtig erkannt wurde, war noch eine Änderung in ~/.bashrc notwendig:

vi ~/.bashrc

Und am Ende der Datei dann folgende Zeile hinzufügen:

export LANG=C

Danach sollte der Aufruf des folgenden Befehles

java -jar ~/GitMigration/svn-migration-scripts.jar verify

eine Ausgabe wie

svn-migration-scripts: using version 0.1.56bbc7f
Git: using version 2.16.2
Subversion: using version 1.9.7
git-svn: using version 2.16.2

erzeugen.

Autorendatei erstellen

java -jar ~/svn-migration-scripts.jar authors https://<svn-repo>/<project> <user> <password> > authors.txt

SVN Repository klonen

Möglichkeit 1 über clone

Standard Layout

git svn clone --username <svn user> --stdlayout --authors-file=../authors.txt https://<svn-repo>/<project> <git-repo-name>

Non Standard Layout

git svn clone --username <svn user> \
--trunk=/trunk \
--branches=/release/*/* \
--branches=/refactoring/* \
--tags=/tags \
--authors-file=authors.txt https://<svn-repo>/<project> <git-repo-name>

Möglichkeit 2 über fetch

git svn init --username <svn user> \
--trunk=/trunk \
--branches=/release/*/* \
--branches=/refactoring/* \
--tags=/tags \
https://<svn-repo>/<project> <git-repo-name>
cd <git-repo-name>
git config svn.authorsfile ../../authors.txt 
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[svn-remote "svn"]
	url = https://<svn-repo>/<project>/<git-repo-name>
	fetch = trunk:refs/remotes/origin/trunk
	branches = release/*/*:refs/remotes/origin/release/*/*
	branches = refactoring/*:refs/remotes/origin/refactoring/*
	tags = tags/*:refs/remotes/origin/tags/*
[svn]
	authorsfile = ../../authors.txt
git svn fetch

Checks

Danach in das Verzeichnis <git-repo-name> wechseln und mit

git branch -r 

überprüfen, ob alle Branches übernommen wurden.

Branches konvertieren

Im Projektverzeichnis kann mit folgendem Befehl angezeigt werden, welche Änderungen vorgenommen werden würden (Trockenlauf):

cd <git-repo-name>
java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git --no-delete

Erst durch Anhängen von --force werden die Änderungen tatsächlich ausgeführt:

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git --force --no-delete

Lokales Repository nach Bitbucket pushen

git remote add origin https://<user>@bitbucket.org/<user>/<repo>.git
git push -u origin --all
git push --tags

Git Befehle

Dateien eines Branches auflisten

git ls-tree -r --name-only <branch>

Links

https://git-scm.com/book/de/v1/Git-und-andere-Versionsverwaltungen-Zu-Git-umziehen

https://blog.seibert-media.net/blog/2014/05/15/migration-von-subversion-zu-git-ueberblick/

http://blog.seibert-media.net/blog/2014/05/16/migration-von-subversion-zu-git-vorbereitungen/

http://blog.seibert-media.net/blog/2014/07/07/migration-von-subversion-zu-git-die-konvertierung/

http://blog.seibert-media.net/blog/2014/07/09/migration-von-subversion-zu-git-die-synchronisation/

https://blog.seibert-media.net/blog/2014/08/22/migration-von-subversion-zu-git-das-git-repository-teilen/


Zurück zu Git Server