2017-10-03 3 views
3

Wenn ich einen git clone von einem nackten Repository meines Projekts, auf einem lokalen Server ausführen, bekomme ich folgende Fehlermeldung:git clone nicht mit „fatal: Nicht genügend Arbeitsspeicher, malloc failed“ Fehler

fatal: Nicht genügend Speicher, malloc fehlgeschlagen (versucht, 2251896833 Bytes zuzuweisen) Warnung: Clone erfolgreich, aber Kasse fehlgeschlagen. Sie können untersuchen, was mit ‚git status‘ ausgecheckt und die Kasse mit ‚git checkout -f HEAD‘

Ich habe versucht, zu aktualisieren meine ~/.gitconfig Datei wie unter this question bei Antwort angegeben, schloss die git bash wiederholen, neu gestartet und ohne Ergebnisse versucht.

landete ich folgende Konfiguration versucht, aber immer noch dieselben Ergebnisse:

$ cat .gitconfig 
[core] 
     packedGitLimit = 1024m 
     packedGitWindowSize = 1024m 
[pack] 
     deltaCacheSize = 1024m 
     packSizeLimit = 1024m 
     windowMemory = 1024m 
[http] 
     postBuffer = 157286400 

ich sogar mit git gc auf einer anderen Maschine versucht, aber nicht sicher, wie die nackten Repository Müll und sammeln zu bekommen.

Ich verwende git version 2.14.2.windows.1 unter einer 32 bits Maschine mit Windows 7 mit 4 GB RAM.

Wie dieser schwerwiegende Fehler auf Git Klon zu beheben?

+0

Wo befindet sich das leere Repo? Auf einem Cloud-Dienst (wie Github) oder einem Dienst im lokalen Netzwerk (oder sogar nur in einem lokalen Server/Datei)? – LightCC

+0

Das leere Repo befindet sich auf einem lokalen Server. Ich habe ein Windows-Laufwerk, das mit dem freigegebenen Ordner verbindet. –

+0

'versucht, 2251896833 Bytes zuzuweisen'; Was ist 2,147 MB, und Sie haben ein Limit von 1024 MB festgelegt? Verfügen Sie über 2 GB verfügbaren Arbeitsspeicher? –

Antwort

2

Mit der Tatsache, dass ein Git Repo in sich abgeschlossen ist und einfach kopiert werden kann, brauchen wir nur eine Möglichkeit, eine Kopie zu machen und von bloßen zu nicht-bare für unsere ersten Versuche zu konvertieren.

Klonen ist immer noch die beste Form des anfänglichen Kopierens, wenn diese Option möglich ist (siehe Arbeitsumgebungen 1 und 2). Wenn nicht, können wir einfach vom Server kopieren, wenn der Zugriff verfügbar ist, und es manuell konvertieren (siehe # 3). Wenn dies nicht gelingt, funktioniert vielleicht das Kopieren/Klonen eines kleineren Teils des Repos?

Work-around 1 - Klon auf USB vom Server

auf dem Server (wenn Sie Zugriff haben), Klon in einen Ordner USB-Laufwerk (als nicht-bare Repo), USB in Ziel Maschine kleben, und verschiebe/kopiere es einfach an den endgültigen Ort, an dem du das Repo haben möchtest. Git Befehl sollte sein:

git clone /path/to/bare/repo /local/repo/folder 

Ich denke dies nicht kopieren jede Waise verpflichtet (diejenigen, die schließlich Garbage Collection wird).

Work-around 2 - Clone auf einen anderen PC kopieren Sie dann

Clone Repo auf einen anderen PC, Kopieren/Verschieben Ordner irgendwie PC zum Ziel (USB, Netzwerkverbindung, etc.). Ähnlich wie # 1

Work-around 3 - Kopieren von Server, konvertieren von nackten

Dies setzt voraus, Zugriff auf den Server, vielleicht durch eine Netzwerkfreigabe statt direkt (sonst # 1 verwenden). Kopieren Sie das leere Repo lokal, und machen Sie dann etwas like this, um es in ein nicht leeres Repo umzuwandeln.

Work-around 4a - Clone nur einen Zweig zu einer Zeit

It appears you can clone only a single branch at a time, die sich unter den Grenzen passen kann Ihr Gedächtnis Problem verursacht:

git clone [url/folder] -b master --single-branch [local repo folder] 

Hinweis Sie neue Filialen auf dem Server erstellen können, dass sind ein bisschen zurück in der Geschichte, um weniger auf einmal zu ziehen, aber basierend auf der Antwort in dem obigen Link, müssen Sie möglicherweise durch einige Reifen springen, um die "Einfach-Verzweigung" Ihres neuen Repos zu entfernen.

Work-around 4b - Shallow Repo

Verwendung --depth <depth> und/oder anderen flachen Tags eine lokale Repo mit einer begrenzten commit Geschichte Tiefe zu machen. Von git clone --help Manpage:

--depth erstellen flachen Klon mit einer Geschichte auf die angegebene Anzahl von Commits abgeschnitten. Impliziert --single-branch wenn nicht --no-single-branch angegeben wird, um die Historien in der Nähe der Spitzen aller Zweige abzurufen. Wenn Sie Submodule flach klonen möchten, übergeben Sie auch --shallow-submodules.

--shallow-since = Erstellen Sie einen flachen Klon mit einem Verlauf nach der angegebenen Zeit.

--shallow-exclude = Erstellen Sie einen flachen Klon mit einem Verlauf, mit Ausnahme von Commits, die von einer bestimmten Remote-Verzweigung oder einem Remote-Tag erreichbar sind. Diese Option kann mehrmals angegeben werden.

- [no-] single-branch Klonen Sie nur den Verlauf, der zur Spitze eines einzelnen Zweigs führt, der entweder durch die Option --branch oder die HEAD-Punkte des primären Zweigs angegeben wird. Weitere Abrufe in das resultierende Repository aktualisieren nur den Remote-Tracking-Zweig für den Zweig, für den diese Option beim ersten Klonen verwendet wurde. Wenn der HEAD auf der Fernbedienung bei der Erstellung eines einzelnen Zweigclons nicht auf eine Verzweigung zeigte, wird keine Remoteverfolgungsverzweigung erstellt.

Work-around 4c - Clone/Checkout nur einige Dateien zu einer Zeit

Siehe this answer und es ist Link für Anweisungen, wie zu einem Zeitpunkt nur einen Teil eines Repo nach unten zu ziehen. Hässlich, aber könnte arbeiten, um Teil zu einer Zeit zu klonen.

+0

Ich konnte diese Lösung nicht testen, da der PC schließlich von einem anderen geändert wurde. Aber ich halte Workaruond 1 für eine gute Lösung. –

Verwandte Themen