2011-01-17 5 views
7

Ich bin an der Einwahl in miesen Ort (ja, es passiert immer noch im Jahr 2011) und versuchen, ein riesiges Repository zu klonen. Es startet ohne Problem, aber jedes Mal, wenn die Verbindung getrennt wird (was unvermeidlich ist, scheint es), rollt die! #% $ * Hg alles zurück und ich bin wieder mit einem leeren Verzeichnis.Gibt es eine Möglichkeit, ein Repository inkrementell vom Web zu klonen?

Gibt es eine andere Lösung als auf einem entfernten PC und dann das ganze Ding per FTP oder etwas herunterzuladen?

+1

Es hängt von der Art des Zugriffs auf das Repo ab, aber in einigen Fällen wäre 'rsync' eine Option. – miku

+0

'rsync' ist definitiv der Weg, hier zu gehen. Sie erhalten ein Minimum an redundanten Dateiübertragungen und garantierten Ergebnissen, unabhängig von der Anzahl der Neustarts. –

Antwort

8

In einem Bash-Shell wie man so etwas tun könnte:

$ hg init myclone 
$ cd myclone 
$ for REV in `seq 10 10 100` ; do hg pull -r $REV <REMOTEREPO>; done 

bei 10 starten, die jeweils Downloads die nächsten 10 Revisionen ziehen, bis zu 100. Im Fall einer verlorenen Verbindung, stellen Sie die erste Argument zu seq zu entsprechen, was Sie bereits gezogen haben.

+4

Oder an der Windows-Eingabeaufforderung: 'FÜR/L% A IN (10,10,100) tun hg Pull -r% A ' –

+0

Obwohl Sie beachten müssen, dass die Changeset-Nummerierung von der Upstream-Repository abweichen kann, wenn Sie dies tun es auf diese Weise. – Ringding

+0

Ich habe versucht, es weiter zu treiben und derzeit ein (neues) Repo zu unterhalten, falls mehrere von uns das gleiche Problem haben: Bitte versuchen Sie etwas beizutragen? : D https://github.com/nootanghimire/hg-clone-bash – cipher

1

Je nachdem, wie schuppig Ihre Verbindung ist, gibt es zwei Möglichkeiten, erste Klone auszuführen.

Zuerst können Sie so genannte "Streaming-Klone" versuchen. Diese minimieren Time To First Byte, erfordern jedoch in der Regel ein bisschen mehr Daten übertragen werden.

Hier ist, wie ein Streaming-Klon zu tun:

$ hg clone --uncompressed https://~~~~ 

Die zweite Möglichkeit wird eine Operation --rev hg clone, durch eine Reihe von inkrementalen zieht gefolgt. Dies verhält sich ähnlich wie das Klonen eines Repository in einer entfernten Vergangenheit und gelegentliche Updates.

$ hg clone --rev 5 https://~~~~ 
0

Auf der Grundlage der Vorschläge hier,

habe ich ein Repo, der das tat.

https://github.com/nootanghimire/hg-clone-bash 

Es für einen einzelnen Repo-optimiert ist, aber ich denke, man kann auf sie gabeln und Arbeit! :)