2010-04-20 15 views
105

Ich begann Klonen eines SVN-Repository mit der Klon-Operation git-svn. Nach ungefähr 6 Stunden des Imports (es ist ein großer Repo), ging mein Computer und schlief auf mir. Gibt es eine Möglichkeit, den Vorgang fortzusetzen, ohne die gesamte anfängliche Arbeit wiederholen zu müssen?Fortsetzen git-svn Klon

Antwort

140

Der git svn fetch Befehl ein git svn clone wieder aufnehmen wird von mehreren Quellen bestätigt:

(Übrigens, wenn während des ersten Klon Schritt die Verbindung stirbt oder Sie müssen Stoppen Sie dann, um den Klon wieder aufzunehmen, müssen Sie nur den obigen Befehl ausführen, um den Download des Verlaufs fortzusetzen.

Es scheint in git-svn ein Speicherverlust zu sein. Die Größe des git-svn Prozesses wuchs langsam und nach ungefähr zwei Wochen war es bei 1,2 GB Einwohnergröße, zu welchem ​​Zeitpunkt das OS sich weigerte, es sich zu überlassen.
Die Sache ist, das war ein Segen in Verkleidung.
Ich konnte den unterbrochenen Klon mit einem einfachen "git svn fetch" fortsetzen, und es lief viel schneller mit dem jetzt radikal kleineren Haufen.
Das funktionierte in der Tat so gut, dass ich mich daran gewöhnte, den Prozess jeden Abend und jeden Morgen zu unterbrechen und neu zu starten. Ein paar Tage später war es soweit.

Sie Ihre Abenteuer beginnen mit git-svn durch eine bestehende Subversion-Repository klonen:

git svn clone url://path/to/repo -s 

Die -s Fahne geht davon aus, dass y Unser Repository verwendet die Konvention "trunk, branches, tags". Wenn nicht, müssen Sie manuell angeben, welche Verzeichnisse Zweige und Tags darstellen, wenn Git davon erfahren soll.

Dies wird eine lange Zeit dauern, da es jede einzelne Revision von SVN holen und lokal committen wird. Wenn es aus irgendeinem Grund stoppt, können Sie mit git svn fetch fortfahren.

+1

Ich denke, einige der Befehlszeilenoptionen, die für 'git svn clone' bereitgestellt werden, müssen ebenfalls (wie anwendbar) für' git svn fetch' bereitgestellt werden. Z. B. hatte ich "-r HEAD" für "git svn clone" eingestellt, um nur die HEAD SVN-Revision zu erhalten. Um fortzufahren, habe ich 'git svn fetch' ausgeführt, der mit dem Import aller Revisionen begonnen hat. – amolbk

+0

Dies begann alles von der ersten Revision .... Ich habe 10.000 Commits! Irgendwelche Gedanken darüber, wie man * von wo weitermachen soll? –

+0

@ NathanJ.Brauer nicht auf dem Kopf. Du könntest eine neue Frage stellen (mit dem verwendeten Betriebssystem, der git-Version und svn-Version und einem Link zurück zu dieser Antwort für den Kontext). – VonC

14

Ich fand a blog post, die zur Verfügung gestellt, was (ich hoffe) ist eine richtige Antwort.

Anscheinend wird der Klonvorgang durch Ausführung von git svn fetch effektiv beendet. Hier ist Hoffnung!

+7

Sie verwenden müssen 'git svn rebase' nach dem Fetch, um den Vorgang abzuschließen und den Master-Zweig, der den Stamm widerspiegelt, anzuzeigen. –

+0

Könnten Sie einen Link zum Blogpost für zukünftige Referenz bereitstellen? – jmanning2k

5

Als VonC, CaptainAwesomePants und Archi sagten alle git svn fetch macht den Trick. Ich machte eine git svn clone url... --authors-file=path/to/file und der Klon schlug fehl, weil einer der Autoren nicht in der Autoren-Datei war.Ich fügte den Autor der Datei hinzu und lief git svn fetch und es ging weiter, wo es aufgehört hat und git log später zu schauen, es scheint, dass es den neu hinzugefügten Autor verwendete, um den Namen des Commitautors zu ersetzen, also war alles süß.

+0

gleichen hier! Danke für deinen Beitrag! –

3

Von mindestens git 2.1.0 Sie nur Neuausstellung git svn clone

jedoch wieder aufnehmen kann, dann werden einige Einträge in Ihrer .git/config duplizieren diejenigen entfernen, und alles wird gut

+0

'Von mindestens Git 2.1.0 ...' Eine Idee, ob diese Funktion bei Git 1.9.1 existierte? – CivFan

+0

Entschuldigung, ich habe keine Svn-Repositories mehr, um das zu versuchen. –

+0

'git svn fetch' verursachte einen Prüfsummen-Mismatch für mich - und konnte nicht zurückgesetzt werden, da anscheinend kein HEAD:/- aber das funktioniert gut, musste nur' svn-remote.fetch' aus '.git/config entfernen ' – OLL