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ąć?

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

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 username@mydomain.com: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

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://username@bitbucket.org/repositoryName.git --depth 1

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 :)


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 git@github.com:vaibhavjain2/xxx.git - Correct

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.


5

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


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.


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


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



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.


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 

-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.


-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.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.