błąd: RPC nie powiodło się; transfer curl zamknięty, pozostały zaległe dane do odczytu

130

Napotykam ten błąd, gdy próbuję sklonować repozytorium z GitLab (GitLab 6.6.2 4ef8369):

wprowadź opis obrazu tutaj

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

Klon jest następnie przerywany. Jak mogę tego uniknąć?

Do Nhu Vy
źródło

Odpowiedzi:

223

Zdarza się to częściej niż nie, mam wolne połączenie internetowe i muszę sklonować przyzwoicie duże repozytorium git. Najczęstszym problemem jest to, że połączenie zostaje zamknięte, a cały klon zostaje anulowany.

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

Po wielu próbach i błędach oraz wielu „zdalnych końcach niespodziewanie się rozłączyło” mam sposób, który działa dla mnie. Chodzi o to, aby najpierw wykonać płytki klon, a następnie zaktualizować repozytorium o jego historię.

$ git clone http://github.com/large-repository --depth 1
$ cd large-repository
$ git fetch --unshallow
Khader MA
źródło
10
To jedyna odpowiedź, która opisuje obejście problemu bez przełączania się na SSH. To zadziałało dla mnie, dzięki!
garie
14
Kluczem tutaj jest --depth 1i --unshallow. Działa to również w przypadku pobierania istniejącego repozytorium przy wolnym połączeniu: git fetch --depth 1wtedy git fetch --unshallow.
Andrew T.
1
Dla jasności @AndrewT., git fetch --unshallowPolecenie radzi sobie z utratą połączenia w bardziej wybaczający sposób niż git clone? I to właśnie tutaj robi różnicę?
Lowell
2
Teraz git fetch --unshallowpolecenie daje RPC failed;błąd
ms_27
1
Nie działa dla mnie. Niepowodzenie na git fetch --unshallow. Chyba moje repozytorium jest zbyt duże, nawet dla tego podejścia. Działa tylko SSH.
Jonathan Cabrera
60

Po kilku dniach właśnie dziś rozwiązałem ten problem. Wygeneruj klucz ssh, postępuj zgodnie z tym artykułem:

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

Zadeklaruj to

  1. Dostawca Git (GitLab czego używam, GitHub).
  2. Dodaj to do tożsamości lokalnej.

Następnie klonuj za pomocą polecenia:

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

I żaden błąd się nie dzieje.

Powyższy problem

błąd: RPC nie powiodło się; curl 18 transfer zamknięty, pozostały zaległe dane do odczytu

ponieważ mają błąd podczas klonowania przez protokół HTTP ( curlpolecenie).

I powinieneś zwiększyć rozmiar bufora:

git config --global http.postBuffer 524288000
Do Nhu Vy
źródło
7
Zmiana z HTTP na SSH działa dla mnie. Konfiguracja http.postBuffernie działała.
thangdc94
jeśli błąd nadal występuje, powinieneś edytować swój plik konfiguracyjny ssh vi /users/username/.ssh/config i dodać serverAliveInterval 120 i wyjść z vi używając wq (aby zapisać i wyjść). To faktycznie zapobiegnie błędom przekroczenia limitu czasu i przerwania połączenia na serwerze.
Tanvir Singh,
to miłe, ale ktoś wie, dlaczego tak się dzieje w przypadku 100% klonowania?
workplaylifecycle
Zmiana http.postBufferzadziałała dla mnie - dzięki!
Negar Zamiri
Dziękuję, u mnie działa, to rozwiązanie powinno głosować więcej :)
Sadmi
17

Kiedy próbowałem klonować z pilota, wielokrotnie występował ten sam problem:

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

W końcu to zadziałało dla mnie:

git clone https://[email protected]/repositoryName.git --depth 1
Purushottam Padhya
źródło
3
co - głębia 1 robi
Wahdat Kashmiri
Pracował dobrze dla mnie.
vijay junupalli
Jeśli repozytorium źródłowe jest kompletne, przekonwertuj płytkie repozytorium na kompletne, usuwając wszystkie ograniczenia nałożone przez płytkie repozytoria. Jeśli repozytorium źródłowe jest płytkie, pobierz jak najwięcej, aby bieżące repozytorium miało taką samą historię jak repozytorium źródłowe.
RahmanRezaee
6

musisz wyłączyć kompresję:

git config --global core.compression 0

wtedy musisz użyć płytkiego klonu

git clone --depth=1 <url>

wtedy najważniejszym krokiem jest włożenie płyty CD do sklonowanego projektu

cd <shallow cloned project dir>

teraz otwórz klon, krok po kroku

git fetch --depth=N, with increasing N

na przykład.

git fetch --depth=4

następnie,

git fetch --depth=100

następnie,

git fetch --depth=500

możesz wybrać, ile kroków chcesz, zastępując to N,

i na koniec pobierz wszystkie pozostałe wersje za pomocą,

git fetch --unshallow 

zagłosuj za, jeśli ci to pomoże :)

NikhilP
źródło
5

Proste rozwiązanie: Zamiast klonować przez https, sklonuj go przez ssh.

Na przykład:

git clone https://github.com/vaibhavjain2/xxx.git - Avoid
git clone [email protected]:vaibhavjain2/xxx.git - Correct
Vaibhav Jain
źródło
Tak. Jestem użytkownikiem systemu Windows.
Vaibhav Jain
5

Problemy z połączeniem sieciowym.
Może z powodu trwałego limitu czasu połączenia.
Najlepszym sposobem jest przejście do innej sieci.

Yang
źródło
5

Te kroki zadziałały dla mnie: używanie git://zamiasthttps://

Jinwawa
źródło
3
Witamy w Stack Overflow. Spróbuj podać nieco bardziej szczegółową odpowiedź, aby każdy, kto chce wypróbować Twoje rozwiązanie, mógł to łatwo zrobić.
McMutton,
właściwie, ta odpowiedź jest bardziej szczegółowa niż następne w tym wątku ..
xxxvodnikxxx
4

Jak wspomniano powyżej, najpierw uruchom polecenie git z basha dodając na początku rozszerzone dyrektywy dziennika: GIT_TRACE=1 GIT_CURL_VERBOSE=1 git ...

np. GIT_CURL_VERBOSE=1 GIT_TRACE=1 git -c diff.mnemonicprefix=false -c core.quotepath=false fetch origin Spowoduje to wyświetlenie szczegółowych informacji o błędzie.

Sergey Gindin
źródło
2

U mnie ten problem wystąpił, ponieważ konfiguracja proxy. Dodałem serwer ip git w wyjątku proxy. Serwer git był lokalny, ale zmienna środowiskowa no_proxy nie została poprawnie ustawiona.

Użyłem tego polecenia, aby zidentyfikować problem:

#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

W zamian pojawiła się "Proxy-Authorization", ponieważ serwer git nie powinien przechodzić przez proxy. Ale prawdziwym problemem był rozmiar plików zdefiniowany przez reguły proxy

Francisco Eduardo
źródło
2

Dla mnie problem polegał na tym, że połączenie zostaje zamknięte przed ukończeniem całego klonu. Użyłem sieci Ethernet zamiast połączenia Wi-Fi. Wtedy to rozwiązuje za mnie

Yuresh Karunanayake
źródło
1

Ten błąd wydaje się występować częściej w przypadku wolnego lub problematycznego połączenia internetowego. Połączyłem się z dobrą prędkością internetu, a następnie działa idealnie.

Jitendra Rathor
źródło
1

Ten problem pojawia się, gdy występuje problem z serwerem proxy lub wolna sieć. Możesz wybrać rozwiązanie głębokości lub

git fetch --all  or git clone 

    

Jeśli to da błąd curl 56 Błąd Recv, pobierz plik za pomocą zip lub podaj nazwę oddziału zamiast --all

git fetch origin BranchName 
Gajender Singh
źródło
-1

Zmiana protokołu klonowania git, aby spróbować.

na przykład ten błąd wystąpił, gdy „git clone https: // xxxxxxxxxxxxxxx

możesz spróbować z "git clone git: // xxxxxxxxxxxxxx", wtedy może ok.

Bingnan
źródło
-6

Te kroki działają dla mnie:

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

Mam nadzieję, że to też działa dla Ciebie.

wen jiang
źródło