SVN -> Git

Roin

Freier Denker
Registriert
22 Juli 2013
Beiträge
581
Hallo Leute,

ich habe eine ganze Menge gestackoverflowed und habe nur halbgute Lösungen für eines meiner Probleme gefunden.

Undzwar:
Ich habe ein Subversion-Repo mit ~ 3000 Revisionen.
Struktur:
+ trunk
|--- Tests
|------ Foo
|------ Foo2
|--- Main
|------ Bar
|------ Bar2
+ branch
|--- Branch1
|------ Tests
|--------- Foo
|--------- Foo2
|------ Main
|--------- Bar
|--------- Bar2
|--- Branch2
|------ Tests
|--------- Foo
|--------- Foo2
|------ Main
|--------- Bar
|--------- Bar2

...
Nun möchte ich ein Git-Repo daraus bauen. Inklusive der Historie von trunk und allen Branches. Dazu versuche ich gerade .
Ich möchte in den git-Repo aber als master nur entsprechend Main verfolgen. Tests ist sozusagen ein anderes Repo und gehört da gar nicht rein.
Nun habe ich entsprechend den Befehl zu Beginn so abgeändert das ich diesen nutze:
[src=bash]git svn init SVN_URL -T trunk/Main -b branch --prefix=svn/[/src]
Das folgende [src=bash]git svn fetch[/src] dauert eine wahrliche Ewigkeit.
Danach würde ich das entsprechend nach dem Tutorial zuende Übersetzen und dann vielleicht noch sowas machen, dass ich in allen Commits die Tests-Ordner entferne.


Ich hoffe das klappt soweit auch. Sicher bin ich mir dabei nicht. Mal abgesehen davon, dass ich nicht verstehe, wieso das alles so dermaßen lange dauert... Weder die Internetverbindung noch die CPU oder Festplatte(SSD) ist nennenswert ausgelastet bei dem fetch-Befehl.

Nun habe ich aber ein weiteres Problem, das ich so nicht lösen / finden konnte.
Ich besitze bereits ein Git repo, dass auf den Stand aus dem SVN-Repo basiert und darauf Commits inklusive Branches usw. gemacht wurden.
Wie kann ich diese Commits später auf mein jetzt generierendes Repo wieder draufpacken?

Leider ist git und besonders diese Feinheiten noch recht neu für mich.
Kann mir da jemand einen Tipp geben?
 
Hi,
ich habe mal für eine Firma alle CVS und SVN-Repositories nach Git umgezogen, habe mich also ein bisschen mit dem Thema beschäftigt. :)

Bezüglich der langen Migrationszeit: Git bietet zwar den import von SVN an, dennoch ist dies eine aufwändige Sache bei dieser Anzahl an Commits. Im Gegensatz zu SVN ist Git ein verteiltes VCS, d.h. du speicherst/kopierst dir immer das *komplette* Repository auf deinen eigenen Rechner, samt aller 3000 Revisionen. Je nachdem, was dort dann commited wurde, kann dies auch einen sehr viel höheren Speicherverbrauch als bei SVN zur Folge haben.
Beispiel: Commit 1 fügt Datei A (500MB) hinzu, Commit 2 löscht Datei A, Commit 3 fügt Datei B (100MB) hinzu ==> dann ist dein Repository schon mal 600MB groß, obwohl die Datei A in der aktuellen Revision gar nicht mehr vorhanden ist. Git hält trotzdem alles lokal vor, was wiederum zum Vorteil hat, dass du sehr schnell zwischen Revisionen/Branches/.. springen kannst.

  • Ich würde mir bei mehreren Branches in deinem Repository die Frage stellen ob du wirklich immer die Historie brauchst. Oft reicht ein einzelner (ggf. manueller) Stand für einige Branches aus.
  • machst du die Migration auf Windows? Ich empfehle auf jeden Fall das ganze auf Linux zu machen, siehe
  • alternativ kannst du dir auch mal anschauen, das soll bei der Migration scheinbar schneller sein (nie selbst benutzt)

Bezüglich des anderen/neueren Git Repos: Das sollte mit Git ansich kein Problem sein. Du kannst mehrere Remote-Endpunkte in deinem migrierten Git Repository eintragen und diese dann synchronisieren. Siehe . Wenn du verschiedene lokale Branches erstellst, kannst du die stände anschließend (oder ).
 
Windows hat auch git bash und .

Den Umzug würde ich aber direkt aufm Git-Server machen. Subgit ist ein ganz guter Tipp.

Außerdem würde ich nicht "nacktes" Git verwenden, sondern einen self-hosted service wie oder .

dauert eine wahrliche Ewigkeit.
Joah, so ist das :D
 
  • Thread Starter Thread Starter
  • #4
ich habe mal für eine Firma alle CVS und SVN-Repositories nach Git umgezogen, habe mich also ein bisschen mit dem Thema beschäftigt. :)
Wieso hast du dich nicht früher gemeldet? :(

Ich würde mir bei mehreren Branches in deinem Repository die Frage stellen ob du wirklich immer die Historie brauchst. Oft reicht ein einzelner (ggf. manueller) Stand für einige Branches aus.
Das stimmt. Daher wollte ich auch nur die meisten Branches irgendwie vorhanden haben, mit dem entsprechend aktuellen Stand. Allerdings ist es bei mehr als dem master-branch notwendig die Historie ebenfalls zu erhalten - das habe ich wie in meinem Eingangspost umgesetzt. Es hat EWIG gedauert und war auch nicht hübsch. Da die Historie aber nur selten verwendet wird, geht es aber noch irgendwie.

alternativ kannst du dir auch mal anschauen
Diesen Tipp hätte ich auch früher gebraucht :D Vielleicht kommt das ja irgendwann in Zukunft mal zum Einsatz. Danke.
 
Zurück
Oben