Git

SVN-zu-Git Migration

Dieser Artikel beschreibt, wie ein SVN-Repository (bzw. darin enthaltene Ordnerstrukturen) in ein Git-Repository umgewandelt werden können.

Dazu muss zunächst mit dem git-svn-Kommando ein SVN-Zweig „getrackt“ werden. Anschließend wird jede Revision des angegebenen SVN-Zweigs in eine Git-kompatible Struktur überführt. Während des Auscheckens der SVN-Sourcen müssen alle SVN-Autoren-Namen auf Git-Autoren-Namen „gemappt“ werden. Anschließend kann diese konvertierte, mit korrekten Autoren-Namen versehene Struktur als Git-Repository committed werden.

Dieser Artikel beschreibt, wie ein SVN-Repository mittels Git-Kommandozeilenbefehlen in ein Git-Repository umgewandelt werden kann.

Konvertieren eines SVN-Zweigs

Um ein SVN-Repo zu Git zu konvertieren, muss zunächst ein entsprechendes leeres Repository auf dem Git-Server angelegt und dann die SVN-Sourcen in das zugehörige lokale Git-Repository ge“fetch“t werden:

# Erstelle leeren Ordner
mkdir svn-to-git-konvertierung
cd svn-to-git-konvertierung

# Clone Admin-Repository und füge der gitolite.conf-Datei ein neues Repository names "GIT_REPO_NAME" hinzu.
git clone git@gitserver:gitolite-admin
cd gitolite-admin
nano conf/gitolite.conf
git commit -a -m "Repository hinzugefügt"
cd ..

# Erzeuge ein lokales Git-Repository, basierend auf den per URL identifizierten SVN-Sourcen, mit dem Namen GIT_REPO_NAME.
mkdir GIT_REPO_NAME
cd GIT_REPO_NAME
git svn init svn://svnserver/pfad/zur/svn/ordner/struktur

# Wandle während der Konvertierung alle SVN-Authorennamen in Git-Authorennamen um.
git config svn.authorsfile ../gitolite-admin/svn-authors.txt
git svn fetch

# Sende das konvertierte SVN-Git-Repository an den Git-Server.
git remote add origin git@gitserver:GIT_REPO_NAME
git push origin master

Autoren-Mapping

Mit folgendem Befehl kann eine Liste aller SVN-Autoren erstellt werden, welche in einen bestimmten SVN-Zweig committed haben:

svn log svn://svnserver/pfad/zur/svn/ordner/struktur --xml | grep -P "^(.*?)<\/author>/$1 = /'

Eine Datei „svn-authors.txt“ kann wie oben beschrieben die bereits bekannten SVN-Autoren des Zweigs svn://svnserver/pfad/zur/svn/ordner/struktur auf Git-Autoren mappen. Es ist praktisch Sie auf die Grundebene des „gitolite-admin“-Repositories einzuchecken, um Sie für spätere Vorgänge wiederzuverwenden.

Diese wird für das Konvertieren eines alten Standes im SVN-Zweig benötigt und sollte deshalb vor der Konvertierung ausgecheckt werden.

Nützliche Links

  • http://git-scm.com/book/en/Git-and-Other-Systems-Migrating-to-Git
  • http://treyhunner.com/2011/11/migrating-from-subversion-to-git
  • http://stackoverflow.com/questions/2337281/how-do-i-do-an-initial-push-to-a-remote-repository-with-git
  • Standard
    Git

    Git Server mit Gitolite auf einen Ubuntu Server installieren

    Dies wird eine kleine Anleitung wie man die Gitolite Benutzerverwaltung für Git Repositories in Betrieb nimmt.

    SERVER:

    Als erstes müssen wir Git und Gitolite auf dem Server installieren.

    $ sudo apt-get update
    $ sudo apt-get install git-core gitolite
    $ sudo adduser --system --group --shell /bin/bash --disabled-password git
    

    ADMIN CLIENT:

    Dann müssen wir Public/Private SSH Keys auf einen Client generieren mit den wir das Repo verwalten möchten.

    $ ssh-keygen -t rsa
    $ scp ~/.ssh/id_rsa.pub regular_username@git_server_IP_address:/tmp/git-admin.pub
    
    $ mkdir ~/git-admin-keys
    $ cp ~/.ssh/id_rsa ~/git-admin-keys
    $ cp ~/.ssh/id_rsa.pub ~/git-admin-keys
    

    SERVER:

    Dieser Key wird nun auf den Server installiert.

    $ sudo su - git
    $ gl-setup /tmp/git-admin.pub
    

    ADMIN CLIENT:

    Gitolite wird auch via einem eigenen Repository konfiguriert und eingestellt. Dieses kann man mit folgenden Befehl klonen.

    $ git clone git@git_server_IP_address:gitolite-admin ~/gitolite-admin
    

    Mit folgenden Befehl können wir Nutzer im Gitolite Repo anlegen

    $ cp /path/to/john's/public/key.pub ~/gitolite-admin/keydir/john.pub
    $ git add ~/gitolite-admin/keydir/john.pub
    $ git commit -a -m "New user John added"
    

    Nun könnnen wir die Hauptkonfigurationsdatei erstellen.

    $ nano ~/gitolite-admin/conf/gitolite.conf
    

    Folgende Standard Datei von mir ist sinnvoll und sollte selbsterklärend sein.

    	gitolite.conf:
    
    		################################################################################
    		# Gruppen-Makros:                                                              #
    		# Per Leerzeichen getrennte Usernamen; es dürfen nur solche User eingetragen   #
    		# werden, die mittels ihrer im 'keydir'-Verzeichnis abgelegten public ssh keys #
    		# eingerichtet worden sind.                                                    #
    		#                                                                              #
    		#    z.B.: @group_name = user1 user2 user3                                     #
    		#                                                                              #
    		################################################################################
    
    		@magunait-admins       = user1
    		@magunait-engineers    = user4 user5
    		@magunait-tools        = usertoolchain
    
    
    		###############################################################################
    		# Admin Repository:                                                           #
    		# Mit diesem Repository werden Benutzer und Repositories verwaltet.           #
    		###############################################################################
    
    		# Admin-Repository
    		repo gitolite-admin
    		    RW     = @magunait-admins
    		    R      = @magunait-engineers
    
    		###############################################################################
    		# MagunaIT-Repositories:                                                      #
    		# Diese Repositories werden vom MagunaIT-Team verwaltet.                      #
    		###############################################################################
    
    		# Masterbrain-Repositories
    		repo repo1
    		    RW = @magunait-engineers @magunait-tools
    
    		repo repo2 repo3
    		    RW = @magunait-engineers @magunait-tools
    

    Nun kann man die Änderungen mit folgenden Befehlen auf den Git Server hochladen.

    $ git commit -a -m "Add user credentials"
    
    $ git push
    

    DEVELOPER CLIENT:

    Folgende Befehle um den Client Standard Werte des Benutzer(s) zu übermitteln ist ratsam.

  • Unix (Linux, Mac OS X etc.)
  •   $ git config --global core.editor your_editor_choice
      $ git config --global user.name "your_name_here"
      $ git config --global user.email "your_email@address.com"
    

    Dies ist eine kleine Anleitung wie ich bei einigen Kunden Git einfach und schnell installiert habe.

    Standard