Repack de dépôt Git échoue
J'ai un dépôt git résidant sur un serveur avec une mémoire limitée.
Lorsque j'essaie de cloner un dépôt existant depuis le serveur, j'obtiens l'erreur suivante
hemi@ubuntu:$ git clone ssh://[email protected]/home/hemi/repos/articles
Initialized empty Git repository in /home/hemi/Skrivebord/articles/.git/
[email protected]'s password:
remote: Counting objects: 666, done.
remote: warning: suboptimal pack - out of memory
remote: fatal: Out of memory, malloc failed
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOF
fatal: index-pack failed
hemi@ubuntu:$
Pour gérer cette erreur, j'ai essayé de remettre le dépôt original (selon ce post sur le forum). Mais au lieu de les remballer le référentiel, il décrit comment utiliser le "git pack-objets de la commande".
hemi@servername:~/repos/articles$ git repack -a -d --window-memory 10m --max-pack-size 100m
usage: git pack-objects [{ -q | --progress | --all-progress }]
[--all-progress-implied]
[--max-pack-size=N] [--local] [--incremental]
[--window=N] [--window-memory=N] [--depth=N]
[--no-reuse-delta] [--no-reuse-object] [--delta-base-offset]
[--threads=N] [--non-empty] [--revs [--unpacked | --all]*]
[--reflog] [--stdout | base-name] [--include-tag]
[--keep-unreachable | --unpack-unreachable
[<ref-list | <object-list]
Git 1.6.5.7 est installé sur le serveur.
Vous devez vous connecter pour publier un commentaire.
Votre solution, a pris une copie de travail localement et à distance, mais il va causer des problèmes à nouveau lorsque le dépôt distant décide de remballer lui-même à nouveau. Heureusement, vous pouvez définir des options de configuration qui permettra de réduire la quantité de mémoire nécessaire pour le remplacement dans les deux référentiels, ces rendre essentiellement les paramètres de ligne de commande que vous avez ajouté dans les options par défaut lors de la réintégration. Ainsi, vous devez vous connecter à l'ordinateur distant, le changement dans le dépôt et à faire:
Vous voudrez peut-être faire la même chose sur votre dépôt local. (D'ailleurs, je suppose que votre dépôt est très grande ou de ce sont des machines avec peu de mémoire - ces valeurs semble très faible pour moi.)
Pour ce que ça vaut, lors de la prise en malloc échecs sur le remballage très grand des dépôts dans le passé, j'ai aussi changé les valeurs de
core.packedgitwindowsize
,core.packedgitlimit
,core.deltacachesize
,pack.deltacachesize
,pack.window
etpack.threads
mais il semble que si vous n'avez pas besoin d'autres options 🙂Ayant pas un accès direct au dépôt et d'être par conséquent dans l'impossibilité d'effectuer un repack, la réalisation d'un clone simple et puis, progressivement, l'extraction, tandis que l'augmentation de la profondeur aidé pour moi.
Espère que ça peut toujours aider quelqu'un.
git clone REPO --depth=1
toujours pas pour moi avec l'erreurremote: aborting due to possible repository corruption on the remote side.
J'ai résolu le problème en utilisant les étapes suivantes.
git repack -a -d --window-memory 10m --max-pack-size 20m
git init --bare
Cela ne répond pas à la question, mais quelqu'un pourrait l'utiliser: reconditionnement peut également échouer sur le serveur lorsque
pack-objects
est terminée par une sorte de mémoire du tueur (comme celui utilisé sur Dreamhost):Sur Dreamhost ce qui semble être causée par
mmap
. Le repack de code utilisemmap
à la carte de certains fichiers contenus dans la mémoire, et la mémoire du tueur n'est pas assez intelligent, il compte les mmapped fichiers comme de la mémoire utilisée, tuant le Git processus lorsqu'il essaie demmap
un gros fichier.La solution est une compilation personnalisée Git binaire avec
mmap
soutien éteint (configure NO_MMAP=1
).Je suis en utilisant la version git 1.7.0.4 et il accepte cette commande. Il est possible que git la version 1.6 n'accepte pas cette commande.
Essayez de créer un nouveau dépôt avec un hasard s'engage. Alors remballez-le avec cette commande.
git repack -a -d --window-memory 10m --max-pack-size 100m
J'ai eu le même problème sur ubuntu 14.10 avec git 2.1.0 sur un domaine privé de github.com référentiel.
(Entreprise routeur est soupçonné! Fonctionne sur les différents réseaux wifi, sauf sur le lieu de travail)
Ma solution a été, à git clone à l'aide de ssh (j'ai mis en place des clés ssh* à l'avance), comme ceci:
devient:
*: (Génération d'une clé ssh)
Alors ouvrir une session sur github, dans les paramètres, de l'importation de clés ssh, et de l'importer à partir de ~/.ssh/id_rsa.pub.