SVN zu Git: Unterschied zwischen den Versionen

Aus ARTECO Wiki
Zur Navigation springen Zur Suche springen
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 5: Zeile 5:
 
Im Folgenden muß der Text <code><repo></code> durch den Namen des Repos ersetzt werden.
 
Im Folgenden muß der Text <code><repo></code> durch den Namen des Repos ersetzt werden.
  
==== 1. Checkout des SVN-Repositorys ====
+
==== Checkout des SVN-Repositorys ====
  
 
  $ svn co svn://svn.arteco.de/<repo>
 
  $ svn co svn://svn.arteco.de/<repo>
  
==== 2. Sammeln der Commit-Autoren ====
+
==== Sammeln der Commit-Autoren ====
  
 
  $ cd <repo>
 
  $ cd <repo>
Zeile 20: Zeile 20:
 
  dideldei = Didel Dei <dideldei@arteco.gmbh>
 
  dideldei = Didel Dei <dideldei@arteco.gmbh>
  
==== 3. Erzeugen eines lokalen Git-Repos aus dem SVN-Repo ====
+
==== Erzeugen eines lokalen Git-Repos aus dem SVN-Repo ====
  
 
  $ cd ..
 
  $ cd ..
 
  $ git svn clone --trunk trunk --no-follow-parent -A <repo>/users.txt --ignore-paths='^(?:branches|tags)' --ignore-refs='^refs/remotes/origin/(?!trunk).*$' svn://svn.arteco.de/<repo> <repo>.git
 
  $ git svn clone --trunk trunk --no-follow-parent -A <repo>/users.txt --ignore-paths='^(?:branches|tags)' --ignore-refs='^refs/remotes/origin/(?!trunk).*$' svn://svn.arteco.de/<repo> <repo>.git
 +
 +
Beispielhaft kann dieser Befehl dann so aussehen
 +
$ git svn clone --ignore-paths='^(?:branches|tags)' --ignore-refs='^refs/remotes/origin/(?!trunk).*$' svn://svn.arteco.de/Privattaster --authors-file=Privattaster/users.txt --prefix "" Privattaster.git
  
 
''Hinweis:'' Mit den <code>--ignore-paths</code>- und <code>--ignore-refs</code>-Parametern werden alle Branches und Tags ignoriert. Wenn diese in das neue Git-Repo übernommen werden sollen, dann können diese Parameter weggelassen werden.
 
''Hinweis:'' Mit den <code>--ignore-paths</code>- und <code>--ignore-refs</code>-Parametern werden alle Branches und Tags ignoriert. Wenn diese in das neue Git-Repo übernommen werden sollen, dann können diese Parameter weggelassen werden.
Zeile 29: Zeile 32:
 
Mit einem <code>git log</code> im <repo>.git-Verzeichnis sollten nun schon die Commits zu sehen sein.
 
Mit einem <code>git log</code> im <repo>.git-Verzeichnis sollten nun schon die Commits zu sehen sein.
  
==== 4. Erzeugen eines GitLab-Repos ====
+
==== Erzeugen eines GitLab-Repos ====
  
 
* Öffnen von GitLab im Browser und anmelden.
 
* Öffnen von GitLab im Browser und anmelden.
Zeile 35: Zeile 38:
 
* "Create blank project" auswählen.
 
* "Create blank project" auswählen.
 
* Namen und Besitzer (z.B. Gruppe "arteco") setzen.
 
* Namen und Besitzer (z.B. Gruppe "arteco") setzen.
* Der Default-Branch soll "master" heißen.
+
* Der Default-Branch soll "master" heißen. Dazu muss das Häkchen bei "mit README initialisieren [...]" weggenommen werden.
  
==== 5. Zuordnen des GitLab-Repos zum lokalen Git-Repo ====
+
==== Zuordnen des GitLab-Repos zum lokalen Git-Repo ====
  
 
  $ cd <repo>.git
 
  $ cd <repo>.git
 
  $ git remote add origin https://git.arteco.de:617/arteco/<repo>.git
 
  $ git remote add origin https://git.arteco.de:617/arteco/<repo>.git
  
==== 6. Übertragen aller Commits aus dem lokalen Git-Repo zu GitLab ====
+
==== Übertragen aller Commits aus dem lokalen Git-Repo zu GitLab ====
  
 
  $ git push -u origin --all
 
  $ git push -u origin --all

Aktuelle Version vom 18. Dezember 2024, 13:37 Uhr

Migration von SVN-Repos zu GitLab

Eine weitere (allgemeine) Anleitung ist hier zu finden: https://git-scm.com/book/en/v2/Git-and-Other-Systems-Migrating-to-Git

Im Folgenden muß der Text <repo> durch den Namen des Repos ersetzt werden.

Checkout des SVN-Repositorys

$ svn co svn://svn.arteco.de/<repo>

Sammeln der Commit-Autoren

$ cd <repo>
$ svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > users.txt

Anschließend die Datei users.txt editieren und den SVN-Nutzern ihren Namen und die E-Mail-Adresse (so wie sie im Git-Repo heißen sollen) zuordnen:

$ cat users.txt
dideldum = Didel Dum <dideldum@arteco.gmbh>
dideldei = Didel Dei <dideldei@arteco.gmbh>

Erzeugen eines lokalen Git-Repos aus dem SVN-Repo

$ cd ..
$ git svn clone --trunk trunk --no-follow-parent -A <repo>/users.txt --ignore-paths='^(?:branches|tags)' --ignore-refs='^refs/remotes/origin/(?!trunk).*$' svn://svn.arteco.de/<repo> <repo>.git

Beispielhaft kann dieser Befehl dann so aussehen

$ git svn clone --ignore-paths='^(?:branches|tags)' --ignore-refs='^refs/remotes/origin/(?!trunk).*$' svn://svn.arteco.de/Privattaster --authors-file=Privattaster/users.txt --prefix "" Privattaster.git

Hinweis: Mit den --ignore-paths- und --ignore-refs-Parametern werden alle Branches und Tags ignoriert. Wenn diese in das neue Git-Repo übernommen werden sollen, dann können diese Parameter weggelassen werden.

Mit einem git log im <repo>.git-Verzeichnis sollten nun schon die Commits zu sehen sein.

Erzeugen eines GitLab-Repos

  • Öffnen von GitLab im Browser und anmelden.
  • Button "New project" drücken.
  • "Create blank project" auswählen.
  • Namen und Besitzer (z.B. Gruppe "arteco") setzen.
  • Der Default-Branch soll "master" heißen. Dazu muss das Häkchen bei "mit README initialisieren [...]" weggenommen werden.

Zuordnen des GitLab-Repos zum lokalen Git-Repo

$ cd <repo>.git
$ git remote add origin https://git.arteco.de:617/arteco/<repo>.git

Übertragen aller Commits aus dem lokalen Git-Repo zu GitLab

$ git push -u origin --all

SVN-Repo auf "read only" setzen

Optional: Anschließend kann das SVN-Repo auf dem Server read-only gesetzt werden:

Anmelden auf space.arteco.de und root werden.

# cd /srv/svnserve/repos/<repo>/hooks
# ln -s ../../read-only-hook pre-commit