it-swarm.com.de

Wie kann ich einen Git-Klon für ein großes Projekt mit einer instabilen Verbindung abschließen?

Ich versuche, die LibreOffice-Codebase zu klonen, aber im Moment habe ich eine Internetverbindung von etwa 300 kbps und es ist alles andere als stabil. Ich kann die Verbindung jederzeit wieder herstellen, aber dann hat der Git-Klon-Prozess bereits aufgehört zu arbeiten und es gibt keine Möglichkeit, die Verbindung wieder herzustellen. Gibt es eine Möglichkeit, einen ausfallsichereren Git-Klon-Download durchzuführen?

Eine Option, die ich mir überlegt habe, ist das .git-Verzeichnis eines anderen Benutzers herunterzuladen, aber das ist zu stark von anderen abhängig und scheint mir nicht die bestmögliche Lösung zu sein.

168
LaPingvino

Ich denke nicht, dass das noch nicht fertig ist. Es gibt eine alte GSoC-Seite , die die gewünschte Funktion implementieren wollte. Meine beste Wette ist, wie Sie es als Verzeichnis empfohlen haben. Ich gehe davon aus, dass Sie Downloads über andere Protokolle fortsetzen können.

Neustartfähiger Klon

Beim Klonen eines großen Repositorys (z. B. KDE, Open Office, Linux-Kernel) Es gibt derzeit keine Möglichkeit, .__ neu zu starten. ein unterbrochener Klon. Es braucht vielleicht beträchtliche Zeit für einen Benutzer auf der Ende einer kleinen Pfeife zum Herunterladen der Daten, und wenn der Klon unterbrochen ist in der Mitte benötigt der Benutzer aktuell von vorne beginnen und versuchen Sie es nochmal. Für einige Benutzer kann dies machen es unmöglich, ein großes zu klonen Repository.

Ziel: Lassen Sie git-clone automatisch Einen zuvor fehlgeschlagenen Download fortsetzen über das native git: // Protokoll . Sprache: C Pate: Shawn Pearce Vorgeschlagen von: Shawn Pearce auf Gmane


Aktualisieren

Zusammen mit dem flachen Klonen (git clone --depth=1) in einer der anderen Antworten kann es hilfreich sein, wenn jemand ein reines Repository für Sie erstellen kann, wenn Sie mit dem Anbieter kommunizieren können. Sie können das bloße Repository problemlos in ein vollständiges Repository convert konvertieren. Lesen Sie auch die Kommentare in dieser Antwort, da ein flacher Klon nicht immer hilfreich ist.

63
Jungle Hunter

Zwei Lösungen (oder eher Problemumgehungen), die mir einfallen, sind:

  • Verwenden Sie shallow clone, d. H. git clone --depth=1, dann deepen diesen Klon mithilfe von git fetch --depth=N mit zunehmendem N. Sie können git fetch --unshallow (seit 1.8.0.3) verwenden, um alle verbleibenden Versionen herunterzuladen.

  • Bitten Sie jemanden, bundle bis zu einem bestimmten Tag zu veröffentlichen (siehe git-bundle (1) manpage). Das Bundle selbst ist eine gewöhnliche Datei, die Sie auf beliebige Weise herunterladen können, über HTTP/FTP mit Unterstützung für den Lebenslauf, über BitTorrent, über Rsync usw. Sie können Klonen aus dem Bundle erstellen, die Konfiguration korrigieren und weitere Abfragen aus dem offiziellen LibreOffice-Repository durchführen .

107
Jakub Narębski

Diese Methode verwendet einen Drittanbieter-Server. 

Machen Sie zuerst git clone --bare, dann rsync -v -P -e ssh [email protected]:repo.git .Sie können msys unter Windows verwenden. 

11
Rafal Rusin

Sie können "das .git-Verzeichnis eines anderen Benutzers herunterladen", wobei dieses andere jedoch das offizielle Repository selbst ist. Die LibreOffice-Repositories sind über http verfügbar. Ihr build.git befindet sich beispielsweise unter http://anongit.freedesktop.org/git/libreoffice/build.git/ (siehe http://cgit.freedesktop.org/ libreoffice/ Für die vollständige Liste befindet sich die http-URL unten auf der Seite jedes Repositorys.

Was Sie unter diesen http-URLs sehen, ist nichts anderes als ein .git-Verzeichnis (eigentlich ein "nacktes" Repository, das nur das enthält, was Sie im .git-Verzeichnis finden würden). Es ist das gleiche Verzeichnis, das der Server für das git://-Protokoll (git daemon) lesen würde. Wenn Sie eine Kopie dieser Verzeichnisse mit einem Web-Downloader (z. B. wget -m -np) erstellen, können Sie sie von Ihrer Kopie klonen. Sie funktioniert genauso wie wenn Sie direkt aus dem http-Repository geklont wurden.

Sie können also Folgendes tun: Für jedes Repository erhalten Sie eine Kopie davon mit Ihrem bevorzugten Web-Downloader (der sich mit allen Problemen beim Wiederherstellen unterbrochener Downloads beschäftigt), und aus dieser Kopie klonen. Wenn Sie ein Update durchführen möchten, verwenden Sie erneut Ihren bevorzugten Web-Downloader, um Ihre Kopie zu aktualisieren, und ziehen Sie sie aus dieser Kopie heraus. Jetzt sind Ihre Klone und Updates genauso unempfindlich gegen schlechte Verbindungen wie Ihr bevorzugter Web-Downloader.

9
CesarB

" Unterschätze niemals die Bandbreite einer Brieftaube und eines Bündels SD-Karten " wäre die moderne Form dieser Antwort. Mach es einfach, einfach alt, cp -a, was auch immer, und schick das verdammte Ding. Finden Sie jemanden, der bereit ist, sich zwei Minuten Zeit zu nehmen, um einen Daumenantrieb in eine SASE fallen zu lassen. Finden Sie einen Kontakt, dort können sie es sogar für Sie tun.

8
jthill

Wenn Sie Zugriff auf einen Drittanbieter-Server haben, können Sie dort klonen und dann kopieren.

4
Amber
git clone --depth <Number> <repository> --branch <branch name> --single-branch

Dieser Befehl hilft mir (Danke an Nicola Paolucci )

zum Beispiel 

git clone --depth 1 https://github.com/gokhanmoral/siyahkernel3 --branch ics  --single-branch
3
Ahed Eid

Dieses Problem hat mich auch gebissen. In meinem Fall gibt es eine Problemumgehung. Es kann in Ihrem Fall zutreffen oder nicht.

Ich benutze manchmal ein Mobiltelefon, um Git-Operationen auf einem Remote-System auszulösen. Wenn meine Wi-Fi-Verbindung unterbrochen wird, endet die Sitzung und der gesamte Klonvorgang wird abgebrochen, ohne dass der Vorgang wiederhergestellt wird. Da die Internetverbindung von meinem Remote-System zum Git-Master solide ist, muss der Klon nicht angehalten werden. Alles, was ich brauche, ist der gesunde Menschenverstand, um den Klon von der Terminalsitzung zu trennen. Dies kann mit screen/tmux oder Nohup/daemon erfolgen. Es ist also eine Liveware-Fehlfunktion in meinem Fall.

3
Tony Sidaway

Lassen Sie uns git clone in seine Bestandteile unterteilen und verwenden Sie git reset, um das erneute Herunterladen von Dateien zu verhindern.

Wenn git clone ausgeführt wird, sind die ersten Dinge gleichwertig 

git init
git remote add Origin <repo_url>
git fetch Origin <branch>

Wenn Sie die obigen Schritte manuell ausführen und davon ausgehen, dass sie ordnungsgemäß ausgeführt wurden, können Sie die folgenden Schritte jetzt so oft wie nötig ausführen:

git checkout --force <branch>

Beachten Sie, dass bei jeder Ausführung alle Dateien ausgecheckt werden, aber Sie müssen die Dateien nicht erneut herunterladen, wodurch Sie eine Menge Zeit sparen.

3
cowlinator

Verwenden Sie CNTRL Z, um das Klonen zu stoppen. Schließen Sie das Terminal nicht, versetzen Sie das System/den Laptop in den Ruhezustand und fahren Sie später mit dem Befehl fg .. fort. Ich hatte heute das gleiche Problem, als ich versuchte, ein Repo von Github zu klonen. Dies war für mich eine Zeitersparnis.

2
Jicksy John

Aufbauend auf Klonen/Tiefen basierten Antworten - ein paar Zeilen bash erledigen dies leicht.

git clone --depth=1 [email protected]:/var/git/whatever.git <directory> cd <directory> for m in `seq 1 100`;do git fetch --depth=$m;done

1
Stephen

Verwenden Sie einen git-Proxy wie ngitcached oder git-proxy .

1
Amr Mostafa

der beste Workaround, der für mich funktioniert hat:

ich hatte das gleiche Problem mit einer schlechten Internetverbindung. Also habe ich mir folgende Lösung ausgedacht:

Erstellt eine kleine PHP-Datei auf meinem Server, um das Paket als Zip-Datei herunterzuladen:

<?php
$url = "https://codeload.github.com/CocoaPods/Specs/Zip/master";
file_put_contents("coco.Zip", fopen($url, 'r'));
?>  

<a href="coco.Zip">coco.Zip</a>

laden Sie dann die Zip-Datei mit einem Download-Manager herunter, der Resume unterstützt

0
Zorox

Sie können versuchen, Mercurial mit der hg-git-Erweiterung zu verwenden.

Wenn dies nicht funktioniert, können Sie git fetch <commit-id> verwenden, um nur Teile eines Remote-Git-Repositorys abzurufen (Sie können ein leeres Git-Repository abrufen, es ist nicht erforderlich, es mit clone zu erstellen). Sie können jedoch die Zweigkonfiguration korrigieren (= lokale und entfernte Nachverfolgungszweige erstellen), wenn Sie diesen Ansatz verwenden.

0
Rudi

Ich möchte meine 5 Cent hier setzen. Dies hat mir geholfen, dieses Problem zu lösen

  • komprimierung ausschalten
  • erhöhen Sie http.postBuffer
  • mache einen partiellen Klon
  • navigieren Sie zum geklonten Verzeichnis und rufen Sie den Rest des Klons ab
  • den Rest ziehen
git config --global core.compression 0
git config --global https.postBuffer 524288000
git clone  <your_git_http_url_here> --depth 1
git fetch --unshallow 
git pull --all

Dies hat mir geholfen, ~ 3 GB Repo über die 8-Mbit/s-ADSL-Verbindung zu klonen. Natürlich musste ich das Abrufen und Ziehen einige Male durchführen, aber trotzdem ...

0
matson kepson

wenn wir davon ausgehen, dass Server gute Bandbreiten haben (und Sie einen Server haben), lautet eine andere Antwort:

  1. erstellen Sie Ihren eigenen Server mit Server-Side Git Wrapper
  2. klonen Sie es auf Ihrem Server
  3. Zip mit Server-Side Zip Archiver 's
  4. laden Sie es von und mit Server-Side Resume-Unterstützung herunter

dies funktioniert jedoch nur mit sehr grundlegender Web-Entwicklungserfahrung;) und außerdem benötigen Sie git.exe in Ihrem Server

0
Top-Master

Das gleiche Problem hier - ich habe eine wirklich flockige Internetverbindung mit oft nicht mehr als 10-15 kb/s :-P

Für mich hat der Wget-Weg sehr gut funktioniert. Gehen Sie zu der Repository-Site, wo der grüne Button "Klonen oder Download" ist, klicken Sie darauf und kopieren Sie den Link der Zip-Download-Option.

Fügen Sie dann den Link zum Befehl wget ein:
wget -c -m -np https://github.com/ihr/repository/archive/master.Zip

Klappt wunderbar...

0
X-File