Ein Repository von SVN nach Git migrieren

,

Zurzeit bin ich dabei, mich tiefer in Git einzuarbeiten. Dazu versuche ich einzelne Projekte aus unserem SVN-Server in unseren GitLab-Server zu verschieben.

Nachfolgend Ressourcen und Informationen, die mir dabei so auffielen.

Ressourcen

Vorgehensweise

  1. Mit TortoiseGit geht es per GUI, aus SVN auszuchecken in ein Git-Repository. Ansonsten per Befehlszeile. Beispiel:

    git.exe svn clone "https://svn.example.org/svn/MyCompany/ZetaResourceEditor" 
        "C:\Ablage\ZetaResourceEditor" -T / 
        --authors-file=c:\ablage\users.txt
    

    (Umbrüche nur zwecks besserer Lesbarkeit)

  2. Falls der Master-Branch nicht in „Trunk“ liegt, dies extra angeben in der GUI. Bei mir hängt er z. B. meist direkt im Root, also / angeben.

  3. Auf der Befehlszeile in den Root-Ordner des lokalen, gerade erstellten Repository wechseln.

  4. Falls es Branches gibt, diese mit nachfolgendem PowerShell-Befehl migrieren:

    git for-each-ref --format='%(refname)' refs/remotes | 
    % { $_.Replace('refs/remotes/','') } | 
    % { git branch "$_" "refs/remotes/$_"; git branch -r -d "$_"; }
    

    (Umbrüche nur zwecks besserer Lesbarkeit)

  5. Auf dem Git-Server ein neues, leeres Repository anlegen.

  6. Anschließend dann noch im lokalen Root-Ordner des Repository mit git remote add origin https://my.git-server.com/mygroup/myrepository.git das Git-Remote setzen (siehe Anleitung)

  7. git push origin --all und ggf. noch git push origin --tags aufrufen im lokalen Root-Ordner des Repository, um ins Remote zu committen.

  8. Meistens lösche ich dann lokal den ganzen Ordner und checke nochmals neu aus Git aus.

  9. Falls im SVN der Branch „Master“ heißt und im Git der normale Branch „Main“ heißt, jetzt noch einen Merge-Request stellen und mergen, bzw. „master“ nach „main“ umbenennen:

    1. git branch -m master main eingeben.
    2. git push -u origin main eingeben.
    3. In GitLab-UI den main-Branch als Default-Branch setzen.
    4. In GitLab-UI den master-Branch unprotecten.
    5. In GitLab-UI den main-Branch protecten.
    6. In GitLab-UI den master-Branch löschen.
  10. Meistens lösche ich dann lokal den ganzen Ordner nochmals und checke nochmals neu aus Git aus. Ansonsten unbedingt lokal auf den neuen Branch (meistens „main“) wechseln.

Die „users.txt“-Datei hat folgenden Aufbau:

mmueller = Max Müller <mmueller@example.com>
tschmid = Tanja Schmid <tschmid@example.com>

(Bei mir heißt die Datei „git-authors-file.txt“ anstatt „users.txt“).