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
- Git - Migration zu Git
- https://docs.microsoft.com/en-us/azure/devops/repos/git/perform-migration-from-svn-to-git
- How to sync svn to git · GitHub
- Git Subversion Cheat Sheet - Kapeli
Vorgehensweise
-
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)
-
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. -
Auf der Befehlszeile in den Root-Ordner des lokalen, gerade erstellten Repository wechseln.
-
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)
-
Auf dem Git-Server ein neues, leeres Repository anlegen.
-
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) -
git push origin --all
und ggf. nochgit push origin --tags
aufrufen im lokalen Root-Ordner des Repository, um ins Remote zu committen. -
Meistens lösche ich dann lokal den ganzen Ordner und checke nochmals neu aus Git aus.
-
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:
git branch -m master main
eingeben.git push -u origin main
eingeben.- In GitLab-UI den
main
-Branch als Default-Branch setzen. - In GitLab-UI den
master
-Branch unprotecten. - In GitLab-UI den
main
-Branch protecten. - In GitLab-UI den
master
-Branch löschen.
-
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“).