error: error de RPC; transferencia de rizo cerrada con datos de lectura pendientes restantes

130

Me enfrento a este error cuando intento clonar un repositorio de GitLab (GitLab 6.6.2 4ef8369):

ingrese la descripción de la imagen aquí

remote: Counting objects: 66352, done.
remote: Compressing objects: 100% (10417/10417), done.
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

El clon es entonces abortado. ¿Cómo puedo evitar esto?

Do Nhu Vy
fuente

Respuestas:

223

Sucede la mayoría de las veces, estoy en una conexión a Internet lenta y tengo que clonar un repositorio git decentemente enorme. El problema más común es que la conexión se cierra y se cancela todo el clon.

Cloning into 'large-repository'...
remote: Counting objects: 20248, done.
remote: Compressing objects: 100% (10204/10204), done.
error: RPC failed; curl 18 transfer closed with outstanding read data remaining 
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

Después de una gran cantidad de pruebas y errores y muchos "extremos remotos colgados inesperadamente", tengo una manera que funciona para mí. La idea es hacer primero un clon superficial y luego actualizar el repositorio con su historial.

$ git clone http://github.com/large-repository --depth 1
$ cd large-repository
$ git fetch --unshallow
Khader MA
fuente
10
Esta es la única respuesta que describe una solución para el problema sin cambiar a SSH. Esto funcionó para mí, gracias!
garie
14
La clave aquí es --depth 1y --unshallow. Esto también funciona para recuperar un repositorio existente en una conexión lenta: git fetch --depth 1entonces git fetch --unshallow.
Andrew T.
1
Para mayor claridad @AndrewT., El git fetch --unshallowcomando trata con la pérdida de conexión de una manera más indulgente que el git clone? ¿Y eso es lo que hace la diferencia aquí?
Lowell
2
Ahora, el git fetch --unshallowcomando da RPC failed;error
ms_27
1
No funciono para mi. Falló en el git fetch --unshallow. Supongo que mi repositorio es demasiado grande incluso para este enfoque. Solo SSH funcionó.
Jonathan Cabrera
59

Después de unos días, hoy acabo de resolver este problema. Genere la clave ssh, siga este artículo:

https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/

Declararlo a

  1. Proveedor de Git (GitLab lo que estoy usando, GitHub).
  2. Agregue esto a la identidad local.

Luego clone por comando:

git clone [email protected]:my_group/my_repository.git

Y no ocurre ningún error.

El problema anterior

error: error de RPC; transferencia curl 18 cerrada con datos de lectura pendientes restantes

porque tiene un error al clonar por el protocolo HTTP ( curlcomando).

Y, debe aumentar el tamaño del búfer:

git config --global http.postBuffer 524288000
Do Nhu Vy
fuente
77
Cambiar de HTTP a SSH funciona para mí. Config http.postBufferno funcionó.
thangdc94
Si el error persiste, debe editar su archivo de configuración ssh vi /users/username/.ssh/config y agregar serverAliveInterval 120 y salir de vi usando wq (para guardar y salir). En realidad, esto evitará que el servidor agote el tiempo de espera y se produzcan errores de conexión.
Tanvir Singh
eso es bueno, pero ¿alguien sabe por qué sucede eso al 100% clonado?
workplaylifecycle
El cambio http.postBufferfuncionó para mí, ¡gracias!
Negar Zamiri
Gracias, funciona para mí, esta solución debería haber votado más :)
Sadmi
17

Cuando intenté clonar desde el control remoto, tuve el mismo problema repetidamente:

remote: Counting objects: 182, done.
remote: Compressing objects: 100% (149/149), done.
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

Finalmente esto funcionó para mí:

git clone https://[email protected]/repositoryName.git --depth 1
Purushottam Padhya
fuente
3
lo que hace la profundidad 1
Wahdat Kashmiri
Funcionó bien para mí.
vijay junupalli
Si el repositorio de origen está completo, convierta un repositorio superficial en uno completo, eliminando todas las limitaciones impuestas por los repositorios superficiales. Si el repositorio de origen es poco profundo, busque tanto como sea posible para que el repositorio actual tenga el mismo historial que el repositorio de origen.
RahmanRezaee
5

Solución simple: en lugar de clonar a través de https, clonarlo a través de ssh.

Por ejemplo:

git clone https://github.com/vaibhavjain2/xxx.git - Avoid
git clone [email protected]:vaibhavjain2/xxx.git - Correct
Vaibhav Jain
fuente
Si. Soy usuario de windows.
Vaibhav Jain
5

Problemas de conexión de red.
Quizás debido al tiempo de espera de conexión persistente.
La mejor manera es cambiar a otra red.

Yang
fuente
5

Estos pasos me funcionaron: usar en git://lugar dehttps://

Jinwawa
fuente
3
Bienvenido a Stack Overflow. Intente proporcionar una respuesta un poco más detallada para que cualquiera que quiera probar su solución pueda hacerlo fácilmente.
McMutton
En realidad, esta respuesta es más específico que los próximos en este tema ..
xxxvodnikxxx
5

necesitas apagar la compresión:

git config --global core.compression 0

entonces necesitas usar clon superficial

git clone --depth=1 <url>

entonces el paso más importante es crear un CD en tu proyecto clonado

cd <shallow cloned project dir>

ahora abre el clon, paso a paso

git fetch --depth=N, with increasing N

p.ej.

git fetch --depth=4

luego,

git fetch --depth=100

luego,

git fetch --depth=500

puedes elegir cuántos pasos quieres reemplazando esta N,

y finalmente descargue todas las revisiones restantes usando,

git fetch --unshallow 

votar si te ayuda :)

NikhilP
fuente
4

Como se mencionó anteriormente, en primer lugar, ejecute su comando git desde bash agregando las directivas de registro mejoradas al principio: GIT_TRACE=1 GIT_CURL_VERBOSE=1 git ...

Por ejemplo, GIT_CURL_VERBOSE=1 GIT_TRACE=1 git -c diff.mnemonicprefix=false -c core.quotepath=false fetch origin esto le mostrará información de error detallada.

Sergey Gindin
fuente
2

Conmigo este problema se produjo debido a la configuración del proxy. Agregué el servidor ip git en la excepción de proxy. El servidor git era local, pero la variable de entorno no_proxy no estaba configurada correctamente.

Usé este comando para identificar el problema:

#Linux:
export GIT_TRACE_PACKET=1
export GIT_TRACE=1
export GIT_CURL_VERBOSE=1

#Windows
set GIT_TRACE_PACKET=1
set GIT_TRACE=1
set GIT_CURL_VERBOSE=1

A cambio, existía la "Autorización de proxy", ya que el servidor git estaba en su lugar, no debería pasar por el proxy. Pero el verdadero problema era el tamaño de los archivos definidos por las reglas de proxy

Francisco Eduardo
fuente
2

Para mí, el problema era que la conexión se cierra antes de que se complete todo el clon. Usé ethernet en lugar de conexión wifi. Entonces me resuelve

Yuresh Karunanayake
fuente
1

Este error parece ocurrir más comúnmente con una conexión a Internet lenta o con problemas. Me he conectado con buena velocidad de internet y luego funcionó perfectamente.

Jitendra Rathor
fuente
1

Este problema llega cuando tienes un problema de proxy o una red lenta. Puedes ir con la solución de profundidad o

git fetch --all  or git clone 

    

Si esto da un error de falla de Recv curl 56 , descargue el archivo a través de zip o especifique el nombre de la rama en lugar de --todos

git fetch origin BranchName 
Gajender Singh
fuente
-1

Cambiando el protocolo git clone para probar.

por ejemplo, este error ocurrió cuando "git clone https: // xxxxxxxxxxxxxxx "

puedes probar con "git clone git: // xxxxxxxxxxxxxx", tal vez está bien entonces.

Bingnan
fuente
-6

Estos pasos me están funcionando:

cd [dir]
git init
git clone [your Repository Url]

Espero que eso también funcione para ti.

Wen Jiang
fuente