when - Reenvasado del repositorio de Git falla
what is the command to delete a remote branch in git? (6)
Tengo un repositorio git que reside en un servidor con memoria limitada. Cuando trato de clonar un repositorio existente del servidor, aparece el siguiente error
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:$
Para manejar este error, he tratado de volver a empaquetar el repositorio original (según esta publicación en el foro ). Pero en lugar de volver a empaquetar el repositorio, describe cómo usar el comando "git pack-objects".
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á instalado en el servidor.
Esto no responde a la pregunta, pero alguien podría toparse con ella: el reempaquetado también puede fallar en el servidor cuando los pack-objects
terminan por algún tipo de asesino de memoria (como el que se usa en Dreamhost):
$ git clone project-url project-folder
Cloning into project-folder...
remote: Counting objects: 6606, done.
remote: Compressing objects: 100% (2903/2903), done.
error: pack-objects died of signal 9284.51 MiB | 2.15 MiB/s
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
En Dreamhost esto parece ser causado por mmap
. El código de reempaquetado usa mmap
para mapear el contenido de algunos archivos en la memoria, y como el eliminador de memoria no es lo suficientemente inteligente, cuenta los archivos mmapped como memoria utilizada, lo que elimina el proceso de Git cuando intenta mmap
un archivo grande.
La solución es compilar un binario personalizado de Git con soporte de mmap
desactivado ( configure NO_MMAP=1
).
Estoy usando git versión 1.7.0.4 y acepta este comando. Es posible que la versión 1.6 de git no acepte este comando.
Intenta crear un nuevo repositorio con algunas confirmaciones aleatorias. Luego vuelva a embalarlo con este comando.
Resolví el problema usando los siguientes pasos.
- Obtuve el repositorio revisado desde el servidor a mi máquina local (usando una copia sin procesar sobre ssh)
- Reempacado el repositorio local
git repack -a -d --window-memory 10m --max-pack-size 20m
- Creó un repositorio vacío en el servidor
git init --bare
- Empujó el repositorio local al servidor
- Comprobado que es posible clonar el repositorio del servidor
Sin acceso directo al repositorio y, por lo tanto, no pudiendo realizar un reempaquetado, realizar una clonación superficial y, luego, ir de un lado a otro mientras aumentaba la profundidad, me ayudó.
git clone YOUR_REPO --depth=1
git fetch --depth=10
...
git fetch --depth=100
git fetch --unshallow //Downloads all history allowing to push from repo
Espero que todavía pueda ayudar a alguien.
Su solución tiene una copia de trabajo local y remota, pero causará problemas nuevamente cuando el repositorio remoto decida volver a empaquetarse. Afortunadamente, puede establecer opciones de configuración que reduzcan la cantidad de memoria necesaria para reempaquetar en ambos repositorios; básicamente, estos parámetros de línea de comandos que agregó a las opciones predeterminadas al reempaquetar. Por lo tanto, debe iniciar sesión en el control remoto, cambiar al repositorio y hacer:
git config pack.windowMemory 10m
git config pack.packSizeLimit 20m
Es posible que desee hacer lo mismo en su repositorio local. (Por cierto, supongo que su repositorio es muy grande o son máquinas con poca memoria, estos valores me parecen muy bajos).
Por lo que vale, al obtener fallas de Malloc en reempaquetar repositorios muy grandes en el pasado, también he cambiado los valores de core.packedgitwindowsize
, core.packedgitlimit
, core.deltacachesize
, pack.deltacachesize
, pack.window
y pack.threads
pero suena como si no necesitaras más opciones :)
Tuve el mismo problema en ubuntu 14.10 con git 2.1.0 en un repositorio privado de github.com. (¡Se sospecha del enrutador empresarial! Funciona en diferentes redes wifi, excepto en el lugar de trabajo)
* GnuTLS recv error (-54): Error in the pull function.
* Closing connection 2jects: 31% (183/589)
error: RPC failed; result=56, HTTP code = 200
fatal: The remote end hung up unexpectedly
fatal: protocol error: bad pack header
Mi solución fue clonar git usando ssh (configuré las claves ssh * de antemano), así:
se convierte en:
git clone [email protected]: USERNAME / REPOSITORYNAME.git
*: (Generando una clave ssh)
ssh-keygen -t rsa -C "[email protected]"
Luego inicie sesión en github, en la configuración, importe las claves ssh e impórtelo desde ~ / .ssh / id_rsa.pub.