Intelligente Lösungen
in neuer Dimension

Von Github zu Subversion

Den Prototypen unserer Webseite habe ich erstmal von “unterwegs” auf GitHub angelegt. Dieser Artikel beschreibt, wie die Quelltexte inklusive Versionshistorie umgezogen werden können in ein privates Subversion-Repository.

Leeres Subversion-Repository anlegen

Zunächst muß ein leeres Subversion-Repository angelegt werden, welches nur die Verzeichnisse

  • trunk
  • branches
  • tags

enthält.

Lokal kann man ein Subversion-Repository so anlegen:

Lokales Subversion-Repository anlegen
1
2
3
4
5
6
7
8
9
10
11
12
13
# Repository anlegen
svnadmin create /tmp/dp-octopress.svn

# Grundstruktur anlegen
cd /tmp
svn checkout file:///tmp/dp-octopress.svn dp-octopress
cd dp-octopress
svn mkdir tags branches trunk
svn commit -m "Grundstruktur angelegt"

# Aufraeumen
cd ..
rm -rf dp-octopress

Danach kann man das Repository mit

  • svn checkout file:///tmp/dp-octopress.svn/trunk dp-octopress

auschecken.

Wie dieses Anlegen auf unserem Subversion-Server genau funktioniert beschreibe ich hier nicht näher. Am Ende hat man ein Subversion-Repository, das man beispielsweise mit

  • svn checkout https://83.236.132.107/svn/dp-octopress/trunk dp-octopress

auschecken kann.

Neues Git-Repository einrichten

Neues Git-Repository einrichten
1
2
3
cd ~/git
git svn clone --stdlayout https://83.236.132.107/svn/dp-octopress dp-octopress
#git svn clone --stdlayout file:///tmp/dp-octopress.svn dp-octopress

Altes Git-Repository übernehmen

Altes Git-Repository übernehmen
1
2
3
cd ~/git/dp-octopress
git pull --no-commit ~/git/octopress     # Pfad zum alten Git-Repository
git commit -m "Pull von ~/git/octopress"

Verschmelzen mit dem Subversion-Repository

Verschmelzen mit dem Subversion-Repository
1
2
3
4
cd ~/git/dp-octopress
git svn fetch
git rebase trunk master
while [ $? -ne 0 ]; do git checkout --theirs .; git add .; git rebase --continue; done

Git-Historie in SVN speichern

Git-Historie in Subversion speichern
1
2
cd ~/git/dp-octopress
git svn dcommit

Leider bricht dies ab, weil bei einem Git-Commit wohl die Verzeichnisse “source” und “sass” wohl gelöscht und gleich wieder neu angelegt wurden.

Zunächst muß ermittelt werden, bei welchem Commit der Abbruch erfolgte:

  • git log
  • Suchen nach “svn”
  • Commit: 44722bcf55a05200ea7821a60da0749650fd3953 … hat geklappt
  • Commit: 0e154718cdb11eb29b3a6cc91572de365dfece35 … hat nicht geklappt

Dieser Commit muß nun aufgesplittet werden:

  • git rebase -i 44722bcf55a05200ea7821a60da0749650fd3953
  • 0e15471 mit “edit” markieren, dann abspeichern und Editor beenden
  • Commit-Kommentar speichern mit git log -1 --pretty=%B >commit.txt
  • git reset HEAD^
  • git rm -r source
  • git commit -m "Deleted source" source
  • git rm -r sass
  • git commit -m "Deleted sass" sass
  • git commit -F commit.txt .
  • rm commit.txt
  • git rebase --continue
  • Bei der Fehlermeldung bzgl. ‘source’: rm -rf source und nochmal git rebase --continue
  • Bei der Fehlermeldung bzgl. “regex”: git checkout --theirs . git add . ** git rebase --continue
  • Bei der Fehlermeldung bzgl. “allow-empty”: git commit --allow-empty git rebase --continue

… und danach die Übertragung Richtung Subversion neu starten mit

  • git svn dcommit

Diesmal läuft’s durch!