fatal: EOF temprano fatal: falló el paquete de índice


271

Busqué en Google y encontré muchas soluciones, pero ninguna me funciona.

Estoy intentando clonar desde una máquina conectándome al servidor remoto que está en la red LAN.
Ejecutar este comando desde otra máquina causa un error.
Pero ejecutar el mismo comando de clonación usando git: //192.168.8.5 ... en el servidor está bien y es exitoso.

Algunas ideas ?

user@USER ~
$ git clone  -v git://192.168.8.5/butterfly025.git
Cloning into 'butterfly025'...
remote: Counting objects: 4846, done.
remote: Compressing objects: 100% (3256/3256), done.
fatal: read error: Invalid argument, 255.05 MiB | 1.35 MiB/s
fatal: early EOF
fatal: index-pack failed

He agregado esta configuración .gitconfigpero tampoco ayuda.
Usando la versión git 1.8.5.2.msysgit.0

[core]
    compression = -1

8
Enfrenté este problema durante 2-3 días cuando intentaba clonar desde VPN. en mi caso el problema era el ancho de banda de la red. Lo arreglé clonando en una red de alta velocidad.
Avijit Nagare

1
También he notado que está relacionado con la red.
pregunto el

1
¡Obtuve este error porque mis amigos no conocen muy bien git y empujan muchas imágenes al repositorio! =))
Clite Tailor

También he notado que está relacionado con la red. También lo solucioné clonando en una red de alta velocidad.
shashaDenovo

Respuestas:


506

Primero, apague la compresión:

git config --global core.compression 0

A continuación, hagamos un clon parcial para truncar la cantidad de información que se reduce:

git clone --depth 1 <repo_URI>

Cuando eso funcione, vaya al nuevo directorio y recupere el resto del clon:

git fetch --unshallow 

o, alternativamente,

git fetch --depth=2147483647

Ahora, haz un tirón regular:

git pull --all

Creo que hay un error con msysgit en las versiones 1.8.x que exacerba estos síntomas, por lo que otra opción es probar con una versión anterior de git (<= 1.8.3, creo).


66
Gracias, esto funcionó muy bien. Intenté cambiar el http.postbuffer que no funcionó, pero después de hacer lo que se indica en esta respuesta, funcionó muy bien. No utilicé la línea "git fetch --depth = 2147483647", pero utilicé el resto.
Nick Benedict

2
@ EthenA.Wilson Luego, debe pasar la URL remota del repositorio. Por ej git clone --depth 1 git@host:user/my_project.git.
Nathan Gould

66
@Jose A. - Experimenté este problema cuando estaba en una versión más nueva de msysgit. Si está en msysgit, pruebe una versión anterior (<= 1.8.3). De lo contrario, intente git fetch --depth 1000 (luego 2000, etc., aumentando gradualmente hasta que se extraigan todos los archivos).
ingyhere

2
@Jose A. - Además, eche un vistazo a esto: stackoverflow.com/questions/4826639/…
ingyhere

2
Hola querido amigo. Gracias por tu gran solución. Pero el último git pull --allno funciona. Debido git clone --depth 1a establecerá el rango de recuperación solo una rama. Entonces tenemos que editar .git / config primero.
pjincz

93

Este error puede ocurrir para las necesidades de memoria de git. Puede agregar estas líneas a su archivo de configuración global de git, que está .gitconfigen $USER_HOME, para solucionar ese problema.

[core] 
packedGitLimit = 512m 
packedGitWindowSize = 512m 
[pack] 
deltaCacheSize = 2047m 
packSizeLimit = 2047m 
windowMemory = 2047m

Esto funcionó para mí, aunque todavía necesitaba varios intentos, pero sin este cambio, el aborto llegó al 30%, luego al 75% ... y una vez subió al 100% y funcionó. :)
peschü

Debe ser la respuesta seleccionada
Asim Qasımzade

En windows, con git 2.19, esto lo solucionó. Específicamente agregando los parámetros relacionados con el paquete.
Καrτhικ

¡Trabajó! ¡Gracias!
Guille Acosta

todavía no funciona para mí remote: Enumerating objects: 43, done. remote: Counting objects: 100% (43/43), done. remote: Compressing objects: 100% (24/24), done. error: inflate returned -55/26) fatal: unpack-objects failed
Jeevan Chaitanya

26

finalmente resuelto por git config --global core.compression 9

De un hilo de problema de BitBucket:

Lo intenté casi cinco veces, y todavía sucede.

Luego intenté usar una mejor compresión y funcionó.

git config --global core.compression 9

De la documentación de Git:

core.compression
Un entero -1..9, que indica un nivel de compresión predeterminado. -1 es el valor predeterminado de zlib.
0 significa que no hay compresión, y 1..9 son varias compensaciones de velocidad / tamaño, siendo 9 el más lento.
Si se establece, esto proporciona un valor predeterminado para otras variables de compresión, como core.looseCompression y pack.compression.


3
Necesitaba ejecutarse git repacken combinación con esta solución y luego funcionó.
erikH

Eso funcionó, ni siquiera probé otras soluciones porque esta es la más corta y elegante. Se debe aceptar la respuesta!
metablaster

Esto también funciona para mí, a través de VPN y proxy corporativo. --compression 0no funcionó ni todos los .gitconfigcambios sugeridos anteriormente.
Terrence Brannon

20

Como @ingyhere dijo:

Clon superficial

Primero, apague la compresión:

git config --global core.compression 0

A continuación, hagamos un clon parcial para truncar la cantidad de información que se reduce:

git clone --depth 1 <repo_URI>

Cuando eso funcione, vaya al nuevo directorio y recupere el resto del clon:

git fetch --unshallow

o, alternativamente,

git fetch --depth=2147483647

Ahora, haz un tirón:

git pull --all

Luego, para resolver el problema de su sucursal local solo maestro de seguimiento

abra su archivo de configuración de git ( .git/config) en el editor de su elección

En donde dice:

[remote "origin"]
    url=<git repo url>
    fetch = +refs/heads/master:refs/remotes/origin/master

cambiar la linea

fetch = +refs/heads/master:refs/remotes/origin/master

a

fetch = +refs/heads/*:refs/remotes/origin/*

Haga una búsqueda de git y git extraerá todas sus ramas remotas ahora


Funciona, pero dejé la compresión a 9, no a 0, que falló.
metablaster

9

En mi caso esto fue bastante útil:

git clone --depth 1 --branch $BRANCH $URL

Esto limitará el pago solo a la rama mencionada, por lo tanto, acelerará el proceso.

Espero que esto ayude.


6

Intenté todos esos comandos y ninguno funciona para mí, pero lo que funcionó fue cambiar el git_url a http en lugar de ssh

si es el comando clone do:

git clone <your_http_or_https_repo_url> 

de lo contrario, si está utilizando un repositorio existente, hágalo con

git remote set-url origin <your_http_or_https_repo_url>

Espero que esto ayude a alguien!


1
Esta pregunta es realmente sobre el mensaje de error en la salida anterior cuando hay un problema al sincronizar fragmentos gigantes de archivos desde un repositorio conectado. ¿Estás diciendo que cortar a https desde ssh permitió que el clon terminara?
ingyhere

¡Si! Eso funciona para mí, tengo un repositorio de 4 gb + y la única solución que obtuve fue ese trabajo.
elin3t

2
A mí me funciona, gracias! Clone httpsy luego vuelva a configurar el control remoto ssh.
Tuan

1
Realmente me gustaría saber por qué funcionó esto. ¿Hay algo en el protocolo SSH que se ahoga en objetos grandes que HTTPS no tiene? ¿Es este un problema de la capa de transporte?
bdetweiler

6

Recibí este error cuando git se quedó sin memoria.

Liberar algo de memoria (en este caso: dejar que termine un trabajo de compilación) y volver a intentarlo funcionó para mí.


Para mí, no había mucha memoria disponible, liberar un poco y volver a intentarlo lo resolvió.
Martin Cassidy

4

En mi caso fue un problema de conexión. Estaba conectado a una red wifi interna, en la que tenía acceso limitado a recursos. Eso estaba dejando que Git hiciera la búsqueda, pero en un momento dado se estrelló. Esto significa que puede ser un problema de conexión de red. Compruebe si todo funciona correctamente: antivirus, firewall, etc.

Por lo tanto, la respuesta de elin3t es importante porque ssh mejora el rendimiento de la descarga para evitar problemas de red.


4

Establecer la configuración de abajo no funciona para mí.

[core] 
packedGitLimit = 512m 
packedGitWindowSize = 512m 
[pack] 
deltaCacheSize = 2047m 
packSizeLimit = 2047m 
windowMemory = 2047m

Como comentario anterior, podría ser el problema de memoria de git. Por lo tanto, trato de reducir los hilos de trabajo (de 32 a 8). Para que no obtenga muchos datos del servidor al mismo tiempo. Luego también agrego "-f" para forzar la sincronización de otros proyectos.

-f: Proceed with syncing other projects even if a project fails to sync.

Entonces funciona bien ahora.

repo sync -f -j8

2

Una respuesta anterior recomienda configurar a 512m. Diría que hay razones para pensar que es contraproducente en una arquitectura de 64 bits. La documentación para core.packedGitLimit dice:

El valor predeterminado es 256 MiB en plataformas de 32 bits y 32 TiB (efectivamente ilimitado) en plataformas de 64 bits. Esto debería ser razonable para todos los usuarios / sistemas operativos, excepto en los proyectos más grandes. Probablemente no necesite ajustar este valor.

Si desea probarlo, verifique si lo tiene configurado y luego elimine la configuración:

git config --show-origin core.packedGitLimit
git config --unset --global core.packedGitLimit

1

Tenga en cuenta que Git 2.13.x / 2.14 (Q3 2017) eleva el valor predeterminado core.packedGitLimitque influye git fetch:
El valor límite predeterminado de paquete-git se ha elevado en plataformas más grandes ( de 8 GiB a 32 GiB ) para salvar " git fetch" de una falla (recuperable) mientras " gc" se ejecuta en paralelo.

Ver commit be4ca29 (20 abr 2017) por David Turner ( csusbdt) .
Ayudado por: Jeff King ( peff) .
(Fusionada por Junio ​​C Hamano - gitster- en commit d97141b , 16 de mayo de 2017)

Incrementar core.packedGitLimit

Cuando core.packedGitLimitse excede, git cerrará los paquetes.
Si hay una operación de reempaquetado en paralelo con una recuperación, la recuperación puede abrir un paquete y luego verse obligado a cerrarlo debido a que se ha alcanzado el paquete GitLimit.
El reempaque podría eliminar el paquete de debajo de la recuperación, lo que provocaría que la recuperación fallara.

Aumente core.packedGitLimitel valor predeterminado para evitar esto.

En las máquinas actuales de 64 bits x86_64, hay 48 bits de espacio de direcciones disponibles.
Parece que las máquinas ARM de 64 bits no tienen una cantidad estándar de espacio de direcciones (es decir, varía según el fabricante), y las máquinas IA64 y POWER tienen los 64 bits completos.
Entonces 48 bits es el único límite que razonablemente nos puede interesar. Reservamos algunos bits del espacio de direcciones de 48 bits para el uso del kernel (esto no es estrictamente necesario, pero es mejor estar seguro), y utilizamos hasta los 45 restantes.
Ningún repositorio git estará cerca de este tamaño en cualquier momento pronto, por lo que esto debería evitar la falla.



1

En mi caso, el problema no era ninguno de los parámetros de configuración de git sino el hecho de que mi repositorio tenía un archivo que excedía el tamaño máximo permitido en mi sistema. Pude comprobarlo intentando descargar un archivo grande y obteniendo un "Límite de tamaño de archivo excedido" en Debian.

Después de eso edité mi archivo /etc/security/limits.conf agregando y al final las siguientes líneas: * hard fsize 1000000 * soft fsize 1000000

Para realmente "aplicar" los nuevos valores límite, debe volver a iniciar sesión


1

Tangencialmente relacionado y solo útil en caso de que no tenga acceso a la raíz y extraiga manualmente Git de un RPM (con rpm2cpio) u otro paquete (.deb, ..) en una subcarpeta. Caso de uso típico: intenta utilizar una versión más nueva de Git sobre la obsoleta en un servidor corporativo.

Si falla el clon de git fatal: index-pack failed sin una mención inicial de EOF, sino un mensaje de ayuda usage: git index-pack, hay una discrepancia de versión y debe ejecutar git con el --exec-pathparámetro:

git --exec-path=path/to/subfoldered/git/usr/bin/git clone <repo>

Para que esto suceda automáticamente, especifique en su ~/.bashrc:

export GIT_EXEC_PATH=path/to/subfoldered/git/usr/libexec

1

Tuve los mismos registros de error, usando git (v2.17.1) sobre ssh. En mi caso la solución es:

  1. Ingrese al repositorio git bare de mi servidor.
  2. Llamar git gc.

Consulte la documentación de git-gc: https://git-scm.com/docs/git-gc .

P.ej:

ssh admin@my_server_url.com
sudo su git
cd /home/git/my_repo_name # where my server's bare repository exists.
git gc

Ahora puedo clonar este repositorio sin errores, por ejemplo, en el lado del cliente:

git clone git@my_server_url.com:my_repo_name

El comando git gcpuede ayudar llamado en el lado del cliente git para evitar un git pushproblema similar .


Otra solución (pirateo) es descargar el último maestro sin historial:

git clone --single-branch --depth=1 git@my_server_url.com:my_repo_name

Existe la posibilidad de que no se produzca un desbordamiento del búfer.


0

En mi caso, nada funcionó cuando el protocolo era https, luego cambié a ssh y me aseguré de sacar el repositorio de la última confirmación y no toda la historia, y también una rama específica. Esto me ayudó:

git clone --depth 1 "ssh: .git" --branch "specific_branch”


0

Mientras tanto, apagué todas las descargas que estaba haciendo, lo que probablemente liberó algo de espacio y eliminó el ancho de banda.



0

Tengo el mismo problema. Siguiendo el primer paso anterior pude clonar, pero no puedo hacer nada más. No se pueden recuperar, extraer o retirar ramas viejas.

Cada comando se ejecuta mucho más lento de lo habitual, luego muere después de comprimir los objetos.

I:\dev [master +0 ~6 -0]> git fetch --unshallow
remote: Counting objects: 645483, done.
remote: Compressing objects: 100% (136865/136865), done.

error: RPC failed; result=18, HTTP code = 20082 MiB | 6.26 MiB/s

fatal: early EOF

fatal: The remote end hung up unexpectedly

fatal: index-pack failed

Esto también sucede cuando tus árbitros están usando demasiada memoria. Podar la memoria me arregló esto. Simplemente agregue un límite a lo que busca así ->

git fetch --depth=100

Esto buscará los archivos pero con las últimas 100 ediciones en sus historiales. Después de esto, puede hacer cualquier comando bien y a velocidad normal.


¿Qué quieres decir con TED?
Vishav Premlall

esta "respuesta" debería haber sido un comentario sobre la respuesta de @ingyhere.
mc0e

0

Intenté la mayoría de las respuestas aquí, recibí el error con el cliente PUTTY SSH con todas las constelaciones posibles.

Una vez que cambié a OpenSSH, el error desapareció (elimine la variable de entorno GIT_SSH y reinicie git bash).

Estaba usando una máquina nueva y las versiones más nuevas de git. En muchas otras máquinas / antiguas (también AWS) funcionó como se esperaba con PUTTY también sin ninguna configuración de git.


0

He experimentado el mismo problema. El REPO era demasiado grande para ser descargado a través de SSH. Al igual que @ elin3t recomienda, he clonado sobre HTTP / HTTPS y cambio la URL REMOTA en .git / config para usar el SSH REPO.


0

Tengo el mismo problema que a continuación cuando ejecuto git pull

remote: Counting objects: 149, done.
Connection to git-codecommit.us-east-1.amazonaws.com closed by remote host.
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

Luego verifiqué git status, Hubo tantos cambios no confirmados que arreglé el problema al confirmar y presionar todos los cambios no confirmados.


0

Ninguna de las soluciones anteriores funcionó para mí.

La solución que finalmente funcionó para mí fue cambiar el cliente SSH. La variable de entorno GIT_SSH se configuró en OpenSSH proporcionado por Windows Server 2019. Versión 7.7.2.1

C:\Windows\System32\OpenSSH\ssh.exe

Simplemente instalé masilla, 0.72

choco install putty

Y cambió GIT_SSH a

C:\ProgramData\chocolatey\lib\putty.portable\tools\PLINK.EXE


0

Intenté casi todas las sugerencias hechas aquí, pero ninguna funcionó. Para nosotros, el problema era temperamental y empeoraba cada vez más a medida que los repositorios se volvían más grandes (en nuestro esclavo de compilación Jenkins Windows).

Terminó siendo la versión de ssh utilizada por git. Git se configuró para usar alguna versión de Open SSH, especificada en el archivo .gitconfig de los usuarios a través de la variable core.sshCommand. Quitar esa línea lo arregló. Creo que esto se debe a que Windows ahora viene con una versión más confiable / compatible de SSH que se usa por defecto.


-1

Esto funcionó para mí, configurando el servidor de nombres de Google porque no se especificó ningún servidor de nombres estándar, seguido de reiniciar la red:

sudo echo "dns-nameservers 8.8.8.8" >> /etc/network/interfaces && sudo ifdown venet0:0 && sudo ifup venet0:0

-1

De un clon de git, estaba obteniendo:

error: inflate: data stream error (unknown compression method)
fatal: serious inflate inconsistency
fatal: index-pack failed

Después de reiniciar mi máquina, pude clonar el repositorio bien.


La primera vez, no puedo creer que solo reiniciar tu máquina pueda solucionar este problema, pero intenté todo lo que recibí, mensajes que no pueden funcionar. así que decidí reiniciar mi máquina es mi última solución para mí. Por suerte para mí, cuando la máquina arranca intento clonar nuevamente. No me lo puedo creer. Eso funciona !!!!!!!
Thxopen

-1

Si está en Windows, ¿es posible que desee comprobar que git clone falla con "index-pack"? .

Básicamente, después de ejecutar su git.exe daemon ...comando, seleccione un texto de la ventana de esa consola. Vuelva a intentar la extracción / clonación, ¡podría funcionar ahora!

Vea esta respuesta para más información.



Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.