2017-02-14 3 views
0

I haben Svn in einem großen Projekt zu verwenden. Ich kann problemlos den Stamm des Projekts auschecken. Es dauert zwischen 30 Minuten/1 Stunde. Ich mache es wie folgt aus:git svn dauert ewig, svn dauert eine Stunde

svn checkout https://myrepo.com:port/svn/trunk/ 

aber wenn ich versuche, git zu verwenden, es dauert ewig. Ich habe git svn fetch für wie zwei Tage gemacht, nachdem ich Fehler beim Auschecken bekommen habe, da ich einige Antworten auf ähnliche Fragen gelesen habe, aber nichts. Der Befehl, den ich verwenden ist

git svn clone https://myrepo.com:port/svn/trunk/ 

Die Frage (glaube ich) ist, dass git ALLES (alle Filialen) und andere Sachen zu klonen versucht, das will ich nicht. Im Verzeichnis svn gibt es Trunk und Branches, aber auch andere Verzeichnisse, die ich nicht brauche. Ich will nur den Kofferraum.

Ist das das normale Verhalten?

Antwort

2

Mit Ihrem Befehl klont es nur Stamm, wie Sie die Stamm-URL angegeben haben. Aber es klont immer noch seine ganze Geschichte, indem es alle Überarbeitungen nacheinander macht und dann ein Git-Commit daraus macht. Dies erfordert ein hohes Alter, besonders wenn Sie es nicht auf dem Server tun, auf dem sich das SVN-Repository im Dateisystem befindet. Dies ist einer der vielen Gründe, warum ich davon Abstand nehme, die auf git-svn oder git-svn basierenden Tools für einmalige Migrationen zu verwenden.

Sie könnten den --revision Parameter zu git svn clone verwenden, um nur einen Teil des Verlaufs zu importieren, z. G. die letzten 10 Commits.

+0

'git svn init' kennt auch die '--ignore-paths'-Befehlszeilenoption, die helfen könnte. – kostix

1

git svn clone ist wesentlich langsamer, hauptsächlich weil es kein bare Repository ist.

Hinweis: Denken Sie daran, die Authors-Datei für die Migration zu generieren.

Diese zusätzlichen Schritte werden den Prozess der SVN → git Migration beschleunigen:

  1. git svn clone https://myrepo.com:port/svn/ --stdlayout <deleteMe.git> mit allen zusätzlichen Parametern wie --ignore-paths und was nicht.
  2. Dann brechen Sie die git svn clone Operation in Schritt 1 ab, nur um später die Datei .git/config zu verwenden.
  3. git init --bare <useMe.git>
  4. ersetzen <useMe.git>/config von mit <deleteMe.git>.git/config aus Schritt 1 (da es ein nackten Repo ist)
  5. bearbeiten <useMe.git>/configbare = falsebare = true
  6. cd <useMe.git>
  7. Jetzt zu ändern, gehen Sie git svn fetch und beachten Sie die verbesserte Geschwindigkeit. die
  8. Wenn holen getan wird, entweder git clone es mit git clone <useMe.git> <newNonBare.git>
  9. Oder ein git remote In den <useMe.git> und schieben, um es, sagen Sie zu Ihrem lokalen Gitlab Server-Projekt.

Hinweis: Um die bestmögliche git svn clone/fetch Geschwindigkeit zu erreichen, kopieren Sie die SVN-Repository lokal und svnserve es dann git svn clone von ihm.Bei dieser Methode müssen Sie jedoch den Parameter --rewrite-root verwenden, damit das geklonte Git-Repository die ursprüngliche svn-URL im Kommentar enthält.

Hoffe, dass hilft.

Verwandte Themen