Git nie działa podczas wypychania zatwierdzenia do github

133

Sklonowałem repozytorium git, które hostowałem na githubie na moim laptopie. Udało mi się bez problemu przesłać kilka zatwierdzeń na github. Jednak teraz pojawia się następujący błąd:

Compressing objects: 100% (792/792), done.
error: RPC failed; result=22, HTTP code = 411
Writing objects: 100% (1148/1148), 18.79 MiB | 13.81 MiB/s, done.
Total 1148 (delta 356), reused 944 (delta 214)

Stąd po prostu się zawiesza i w końcu muszę CTRL+ Cwrócić do terminala.

Stephen Melvin
źródło
Dlaczego pojawia się błąd HTTP? Nie naciskasz na github przez SSH?
Cascabel
Dla wyjaśnienia: adres URL w originsekcji .git/confignie zawiera nazwy http, prawda?
Cascabel
@Jefromi Sklonowałem moje prywatne repozytorium za pomocą łącza http odczytu / zapisu.
Stephen Melvin
Nie, mówi https. To dziwne, ponieważ byłem w stanie wykonać dwa pchnięcia przed niepowodzeniem.
Stephen Melvin

Odpowiedzi:

294

Miałem ten sam problem i uważam, że ma on związek z rozmiarem repozytorium (edytowanym - lub rozmiarem konkretnego pliku), które próbujesz przesłać.

Zasadniczo udało mi się stworzyć nowe repozytoria i wypchnąć je na github. Ale istniejący nie zadziała.

Kod błędu HTTP wydaje mi się potwierdzać, że jest to błąd „Wymagana długość”. Więc może jest zbyt duży, aby obliczyć lub grecki, że maks. Kto wie.

EDYTOWAĆ

Odkryłem, że problemem mogą być duże pliki. Miałem jedną aktualizację, która nie nadawała się do przebicia, mimo że do tego momentu udało mi się przejść. W zatwierdzeniu był tylko jeden plik, ale był to 1,6 MB

Więc dodałem następującą zmianę konfiguracji

git config http.postBuffer 524288000

Aby umożliwić rozmiar pliku do 500M, a potem mój push zadziałał. Możliwe, że na początku był to problem z przepychaniem dużego repozytorium przez protokół http.

KONIEC EDYCJI

sposób, w jaki mogłem go uruchomić (EDYTUJ przed zmodyfikowaniem postBuffera) polegał na tarowaniu mojego repozytorium, skopiowaniu go na maszynę, która może wykonywać git przez ssh i wysłaniu go na github. Następnie, gdy spróbujesz wykonać push / pull z oryginalnego serwera, powinno to działać przez https. (ponieważ jest to znacznie mniejsza ilość danych niż oryginalne wypychanie).

Będzie
źródło
U mnie też zadziałało, chociaż miałem błąd HTTP 501 zamiast 411. Dzięki!
Emaad Ahmed Manzoor
Dzięki! to zadziałało, a nawet przyspieszyć przesyłanie. Próbowałem wypchnąć witrynę internetową do nowych witryn sieci Web Windows Azure i wciąż kończyło się to niepowodzeniem.
Jake,
23
Czy ustawienie tej wartości na bardzo wysokim poziomie ma jakąś wadę?
snogglethorpe
@snogglethorpe Potencjalnie: „Transfer-Encoding: chunked służy do unikania lokalnego tworzenia ogromnego pliku paczki”. Jeśli ustawisz wartość na coś dużego, możesz wygenerować ogromne pliki paczek podczas próby wypychania. Nie wszystkie systemy plików dobrze obsługują duże pliki i mogą nie być efektywnie przycinane. Możesz zobaczyć te pliki w .git / objects / pack.
konopie
Zmiana http.postBufferjest bardziej niepotrzebna niż szkodliwa, ale ma negatywny efekt uboczny: zwiększenie jej powyżej wartości domyślnej może zwiększyć opóźnienie w przypadku większych wypychań (ponieważ klient będzie buforować żądanie HTTP na większe fragmenty).
Swatantra Kumar
8

Jeśli to polecenie nie pomoże

git config http.postBuffer 524288000

Spróbuj zmienić metodę ssh na https

git remote -v
git remote rm origin 
git remote add origin https://github.com/username/project.git
Nikita Pushkar
źródło
4

Wygląda na problem z serwerem (np. „GitHub”).
Jeśli spojrzeć na tego wątku , może się zdarzyć, gdy git-http-backenddostaje uszkodzony sterty. (A ponieważ wystarczy umieścić w miejscu do inteligentnego wsparcia http ...)
Ale bez względu na rzeczywistą przyczyną jest, to może być również związane z niedawnym sporadycznych zakłóceń w jeden z serwerów plików GitHub .

Czy nadal widzisz ten komunikat o błędzie? Bo jeśli to zrobisz:

  • sprawdź lokalną wersję Git (i zaktualizuj do najnowszej)
  • zgłoś to jako błąd GitHub .

Uwaga: obsługa Smart HTTP to wielka sprawa dla tych z nas, którzy korzystają z uwierzytelnionego serwera proxy dla firmowej zapory!

Od teraz, jeśli sklonujesz repozytorium przez http://adres URL i używasz klienta Git w wersji 1.6.6 lub nowszej, Git automatycznie użyje nowszego, lepszego mechanizmu transportu.
Jeszcze bardziej zdumiewające jest jednak to, że możesz teraz przekazać ten protokół i sklonować również prywatne repozytoria. Jeśli uzyskujesz dostęp do prywatnego repozytorium lub jesteś współpracownikiem i chcesz uzyskać dostęp w trybie push, możesz umieścić swoją nazwę użytkownika w adresie URL, a Git poprosi o hasło, gdy spróbujesz uzyskać do niego dostęp.

Starsi klienci również powrócą do starszego, mniej wydajnego sposobu, więc nic nie powinno się zepsuć - tylko nowi klienci powinni działać lepiej.

Dlatego też pamiętaj, aby najpierw zaktualizować klienta Git.

VonC
źródło
Podobne problemy miałem za routerem bezprzewodowym ADSL (francuski Orange Livebox): niemożliwe do opublikowania mojego klucza SSH na github.com , utknąłem na https ... dopóki nie skorzystam z alternatywnego dostępu do Internetu.
Yves Martin,
Wsparcie Smart HTTP zdołało przeprowadzić mnie przez nasz firewall proxy, kiedy otrzymywałem „błąd: RPC nie powiodło się; wynik = 22, kod HTTP = 0”, kiedy próbowałem push.
Boggin
@Boggin Tak, potwierdzam, że smart http jest ogólnie preferowanym wyborem, gdy ktoś jest za proxy. Standardowy port http / https jest (prawie) zawsze otwarty.
VonC,
0

Próbowałem wypchnąć na mój własny hostowany serwer bonobo-git i nie zdawałem sobie sprawy, że http.postbuffer oznacza katalog projektu ...

więc tylko dla innych zdezorientowanych:

czemu? W moim przypadku miałem duże pliki zip z zasobami i kilka plików PSD - chyba za duże jak na bufor.

Jak to zrobić http.postbuffer: wykonaj to polecenie w katalogu src projektu, obok folderu .git, a nie na serwerze.

należy pamiętać, że duże pliki tymczasowe (porcje) zostaną utworzone z tego rozmiaru bufora.

Uwaga: po prostu sprawdź największe pliki, a następnie ustaw bufor.

BananaAcid
źródło
-1

U mnie działa push z Git GUI zamiast Bash.

Witalij Lesków
źródło
-2

Problem z wypychaniem wynika głównie z rozmiaru plików, które należy przekazać. Próbowałem wypchnąć kilka bibliotek o rozmiarze tylko 2 MB, ale także push dawał błąd RPC z wynikiem 7. Linia ma 4 Mb / si działa dobrze. Kilka kolejnych prób przyniosło mi sukces. Jeśli pojawi się taki błąd, odczekaj kilka minut i kontynuuj.

Dowiedziałem się również, że są pewne awarie RPC, jeśli github nie działa lub ma niestabilną sieć po ich stronie.

Więc kontynuowanie prób po pewnych odstępach czasu jest jedyną opcją!

Apurv Nerlekar
źródło
-3

w takich przypadkach możesz spróbować ssh, jeśli utknie https.

Możesz także spróbować zwiększyć rozmiar bufora do wartości astronomicznej, aby nie martwić się o rozmiar bufora. Git config http.postBuffer 100000000

RahulMohan Kolakandy
źródło
Liczba 100000000, którą zanotowałeś, wynosi w zasadzie 100 MB, co nie jest astronomiczne.
Acumenus