web-dev-qa-db-fra.com

Tube cassé lors du transfert vers un dépôt git

J'essaie de pousser pour la première fois un code dans mon référentiel git mais j'obtiens l'erreur suivante:

Counting objects: 222026, done. 
Compressing objects: 100% (208850/208850), done. 
Write failed: Broken pipe222026) 
error: pack-objects died of signal 13 
fatal: The remote end hung up unexpectedly error: failed to Push some refs to 'ssh://[email protected]/<...>'

J'ai essayé d'augmenter la taille du tampon http (git config http.postBuffer 524288000), j'ai essayé de git repack, mais cela n'a pas fonctionné.

J'ai pu envoyer un code de taille très similaire dans un autre référentiel (il ne fonctionnait pas comme celui-ci, mais après le git repack, cela fonctionnait). J'essaie de le pousser à bitbucket.

Des idées?

26
Deadlock

La solution simple consiste à augmenter la taille de la mémoire tampon de publication HTTP afin de permettre à de plus gros morceaux d'être déplacés vers le référentiel distant. Pour cela, tapez simplement:

git config http.postBuffer 52428800

Le nombre est en octets, donc dans ce cas, je l’ai réglé sur 50 Mo. La valeur par défaut est 1 Mo.

24
Milan Saha

J'ai eu ce problème lorsque vous travaillez avec une distribution Arch sur VMWare.

Ajouter

IPQoS=throughput

à ma config ssh (~/.ssh/config) a fait l'affaire pour moi.

1
TsTiX

J'ai eu le même problème, et cela a fonctionné pour moi:

git gc --aggressive --Prune

Cela a pris un certain temps, mais après cela, toutes les opérations git ont commencé à fonctionner plus rapidement.
L’opération Push qui a échoué auparavant a ensuite abouti, probablement parce qu’elle est devenue assez rapide pour éviter un problème lié au délai d’attente.

0
Joe

J'ai rencontré le même problème lors du téléchargement de mes gigaoctets de données dans le référentiel github. L'augmentation de la taille de la mémoire tampon HTTP ne fonctionnait pas pour cette taille de données. Je ne suis pas sûr que ce soit un problème de git lui-même ou de serveur github. Quoi qu'il en soit, j'ai créé un script Shell pour gérer ce problème, qui télécharge pas à pas des fichiers du répertoire en cours, à chaque étape, moins de 100 Mo de données. Cela fonctionne bien pour moi. Cela prend du temps mais je peux simplement détacher l'écran et attendre la nuit.

Voici le script Shell: https://Gist.github.com/sekika/570495bd0627acff6c836de18e78f6fd

0
seki

Notez qu'un Push peut toujours geler (même avec postBuffer augmenté) lorsque ses fichiers de pack sont corrompus (c'est-à-dire que les objets de pack échouent)

Cela sera corrigé dans git 2.9 (juin 2016)

Voir commit c4b2751 , commit df85757 , commit 3e8b06d , commit c792d7b , commit 739cf49 (19 avril 2016) de Jeff King (peff) .
(Fusion de Junio ​​C Hamano - gitster - dans commit d689301 , 29 avril 2016)

"git Push" à partir d'un référentiel corrompu qui tente de pousser un grand nombre de références bloquées; le thread pour relayer les notifications de rejet de ces mises à jour de réf est bloqué lors de l'écriture dans le thread principal, après que le thread principal du destinataire a constaté l'échec du Push et a décidé de ne pas lire ces notifications et de renvoyer un échec.

Commit 739cf49 contient tous les détails.

send-pack: ferme le canal de démultiplication avant de terminer le processus asynchrone

Cela corrige un blocage du côté client lors de l'insertion d'un grand nombre de références à partir d'un référentiel corrompu. 

0
VonC