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
- https://git-scm.com/book/de/v2/Git-und-andere-Systeme-Migration-zu-Git
- Migrate from Subversion (SVN) to Git - Azure Repos | Microsoft Learn
- How to sync svn to git · GitHub
- Git Subversion - Dash Cheat Sheets - 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.gitdas Git-Remote setzen (siehe Anleitung) -
git push origin --allund ggf. nochgit push origin --tagsaufrufen 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 maineingeben.git push -u origin maineingeben.- 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“).