Git fallisce quando si spinge commit in github


130

Ho clonato un repository git che ho ospitato su github sul mio laptop. Sono stato in grado di spingere con successo un paio di commit a github senza problemi. Tuttavia, ora ricevo il seguente errore:

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)

Da qui si blocca e finalmente devo CTRL+ Ctornare al terminale.


Perché c'è un errore HTTP? Non spingi a github attraverso SSH?
Cascabel,

Per chiarire: l'URL nella originsezione di .git/confignon dice http, vero?
Cascabel,

@Jefromi Ho clonato il mio repository privato usando il link http di lettura / scrittura.
Stephen Melvin,

No, dice https. Questo è strano perché sono stato in grado di fare due spinte prima del fallimento.
Stephen Melvin,

Risposte:


292

Ho avuto lo stesso problema e credo che abbia a che fare con le dimensioni del repository (modificato o con le dimensioni di un determinato file) che si sta tentando di inviare.

Fondamentalmente sono stato in grado di creare nuovi repository e spingerli su Github. Ma uno esistente non funzionerebbe.

Il codice di errore HTTP sembra supportarmi, è un errore "Lunghezza richiesta". Quindi forse è troppo grande per calc o ottimizzato che il max. Chissà.

MODIFICARE

Ho scoperto che il problema potrebbe essere costituito da file di grandi dimensioni. Ho avuto un aggiornamento che non avrebbe funzionato nonostante avessi eseguito con successo i push fino a quel punto. C'era un solo file nel commit ma era 1.6M

Quindi ho aggiunto la seguente modifica alla configurazione

git config http.postBuffer 524288000

Per consentire fino alla dimensione del file 500M e quindi la mia spinta ha funzionato. Potrebbe essere stato che questo era il problema inizialmente con l'invio di un grosso repository sul protocollo http.

MODIFICA FINE

il modo in cui sono riuscito a farlo funzionare (EDIT prima di modificare postBuffer) è stato quello di caricare il mio repository, copiarlo su una macchina che può fare git su ssh e spingerlo su github. Quindi, quando si tenta di eseguire un push / pull dal server originale, dovrebbe funzionare su https. (dal momento che è una quantità di dati molto più piccola di una spinta originale).

Spero che questo ti aiuti.


Ha funzionato anche per me, anche se ho riscontrato un errore HTTP 501 anziché il 411. Grazie!
Emaad Ahmed Manzoor,

Grazie! ha funzionato e persino accelerare il caricamento. Stava cercando di inviare un sito Web ai nuovi siti Web di Windows Azure e continuava a non riuscire.
Jake,

23
C'è un aspetto negativo nel settare questo valore molto alto?
snogglethorpe,

@snogglethorpe Potenzialmente: "Transfer-Encoding: chunked è usato per evitare di creare localmente un grosso file pack". Se si imposta il valore su qualcosa di enorme, si può finire per generare file di pacchetti di grandi dimensioni quando si tenta di inviare. Non tutti i filesystem gestiscono bene file di grandi dimensioni e potrebbero non potarsi in modo efficiente. Puoi vedere questi file in .git / objects / pack.
canapa

La modifica di http.postBufferpiù è superflua che dannosa, ma ha un effetto collaterale negativo: aumentarla al di sopra del valore predefinito può aumentare la latenza per push più grandi (poiché il client memorizzerà la richiesta HTTP in blocchi più grandi).
Swatantra Kumar,

8

Se questo comando non aiuta

config git http.postBuffer 524288000

Prova a cambiare il metodo ssh in https

git remote -v
git remote rm origin 
git remote add origin https://github.com/username/project.git

4

Sembra un problema del server (ovvero un problema "GitHub").
Se guardi questo thread , può succedere quando git-http-backendviene visualizzato un heap corrotto (e dal momento che hanno appena creato un supporto http intelligente ...)
Ma qualunque sia la vera causa, potrebbe anche essere correlato a recenti interruzioni sporadiche in uno dei file server GitHub .

Vedi ancora questo messaggio di errore? Perché se lo fai:

  • controlla la tua versione Git locale (e passa alla versione più recente)
  • segnalalo come un bug di GitHub .

Nota: il supporto Smart HTTP è un grosso problema per quelli di noi dietro un proxy firewall aziendale basato su autenticazione!

D'ora in poi, se clonerai un repository http://sull'URL e stai utilizzando un client Git versione 1.6.6 o successiva, Git utilizzerà automaticamente il nuovo meccanismo di trasporto migliore.
Ancora più sorprendente, tuttavia, è che ora puoi trasferire quel protocollo e clonare anche i repository privati. Se accedi a un repository privato o sei un collaboratore e desideri l'accesso push, puoi inserire il tuo nome utente nell'URL e Git ti chiederà la password quando tenti di accedervi.

I clienti più vecchi torneranno anche al modo più vecchio e meno efficiente, quindi nulla dovrebbe rompersi - solo i nuovi clienti dovrebbero funzionare meglio.

Quindi, assicurati di aggiornare prima il tuo client Git.


Ho avuto problemi simili dietro un router wireless ADSL (French Orange Livebox): impossibile pubblicare la mia chiave SSH su github.com , spingere bloccato su https ... finché non utilizzo un accesso a Internet alternativo.
Yves Martin,

Il supporto Smart HTTP è riuscito a farmi passare attraverso il nostro proxy firewall quando stavo ottenendo "errore: errore RPC; risultato = 22, codice HTTP = 0" quando ho provato a inviare.
Boggin,

@Boggin Sì, confermo che smart http è generalmente la scelta preferita quando si è dietro un proxy. Le porte http / https standard sono (quasi) sempre aperte.
VonC,


0

Ho provato a spingere sul mio server bonobo-git ospitato e non mi sono reso conto che http.postbuffer significava la directory del progetto ...

quindi solo per altri confusi:

perché? Nel mio caso, avevo file zip di grandi dimensioni con risorse e anche alcuni PSD spinti - al massimo per il buffer immagino.

Come fare questo http.postbuffer: eseguire quel comando nella directory src del progetto, accanto alla cartella .git, non sul server.

attenzione, verranno creati file di grandi dimensioni (blocco) di quella dimensione del buffer.

Nota: basta controllare i file più grandi, quindi impostare il buffer.


-2

Il problema da inviare principalmente è dovuto alle dimensioni dei file che devono essere inviati. Stavo cercando di spingere alcune librerie di appena 2 mb, quindi anche il push stava dando errore di RPC con il risultato 7. La linea è di 4 mbps e funziona bene. Alcuni tentativi successivi alla spinta mi hanno procurato il successo. Se si verifica un errore del genere, attendere qualche minuto e continuare a provare.

Ho anche scoperto che ci sono alcuni errori RPC se il github è inattivo o sta ottenendo una rete instabile al loro fianco.

Quindi continuare a provare dopo alcuni intervalli è l'unica opzione!


-2

in questi casi puoi provare ssh se https è bloccato.

Inoltre, puoi provare ad aumentare le dimensioni del buffer a una cifra astronomica in modo da non doverti più preoccupare delle dimensioni del buffer. Git config http.postBuffer 100000000

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.