web-dev-qa-db-fra.com

Git fetch / pull / clone se bloque sur la réception d'objets

Lors de la récupération ou de l'extraction à partir de référentiels git, ou du clonage d'un référentiel, j'arrive à ce point:

remote: Counting objects: 6666, done.
remote: Compressing objects: 100% (5941/5941), done.
Receiving objects:  23% (1534/6460), 11.68 MiB | 23 KiB/s  

Et ça se bloque. Le 23%/nombre d'objets n'est pas une donnée, il va des chiffres simples aux années 60, semble-t-il. De plus, la vitesse de téléchargement est bloquée - ce n'est pas comme si elle descend lentement vers zéro.

Le gars avec qui je m'assois n'a aucun problème, donc ce n'est pas un problème de routeur. Nous utilisons beanstalk pour nos référentiels de travail, mais j'ai le problème avec beanstalk et github (bien qu'il semble occasionnellement qu'un github se termine).

Le problème ne semble surgir que depuis la mise à niveau vers Mountain Lion et la mise à jour de Xcode. J'ai effacé git (y compris XCode) et j'ai essayé de l'installer avec homebrew. Cela n'a pas fonctionné, donc je l'ai supprimé et j'ai essayé avec leur package d'installation Mac fourni qui n'a pas non plus résolu le problème.

Beanstalk fournit des URL SSH pour le référentiel git, mais je n'ai eu aucun problème de connexion via SCP ou SSH aux serveurs sur lesquels j'ai travaillé.

Cela tue mon flux de travail, donc toute aide serait très appréciée!

42
gabeb

VMware sur NAT a eu ce problème pour moi. Le changer en Bridged (répliquer l'état) a résolu le problème.

20
Anand Rockzz

Essayez de vérifier votre connexion réseau. Il y a peut-être une poubelle dans la table de routage. Peut-être un port cassé sur votre routeur ou un problème d'interface réseau de votre ordinateur. Essayez d'envoyer une requête ping au serveur à partir duquel vous clonez git repo, peut-être que le lien entre votre ordinateur et ce serveur est instable.

8
cjayho

Ressemble au problème du mien. Git semblait accrocher à chercher ou pousser après un certain temps. Je peux vous conseiller de mettre ~/.ssh/config:

Host *

ServerAliveInterval 60

J'ai un MBP avec aussi Mountain Lion. J'espère que ce délai est la cause de votre problème. (Après trente ou quarante minutes environ, j'ai remarqué que cela continuait.)

7
driek

Sur Mac, git fetch devrait être plus résistant à ce type de problème, avec Git 2.22 (Q2 2019): Sur les plateformes où "git fetch" est tué avec SIGPIPE (par exemple OSX), le upload-pack Qui s'exécute sur le une autre extrémité qui raccroche après avoir détecté une erreur peut entraîner la mort de "git fetch" avec un signal, ce qui a conduit à un test floconneux.
"git fetch" Ignore maintenant SIGPIPE pendant la partie réseau de son fonctionnement (ce n'est pas un problème car nous vérifions l'état de retour de nos write (2) s).

Voir commit 1435889 (03 mars 2019), et commit 37c8001 (05 mars 2019) par Jeff King (peff) .
(Fusionné par Junio ​​C Hamano - gitster - in commit 27cdbdd , 20 mars 2019)

fetch: ignorer SIGPIPE pendant le fonctionnement du réseau

Le comportement par défaut SIGPIPE peut être utile pour une commande qui génère beaucoup de sortie: si le récepteur de notre sortie disparaît, nous serons avertis de manière asynchrone d'arrêter de la générer (généralement en tuant le programme).

Mais pour une commande comme fetch, qui vise principalement à recevoir des données et à les écrire sur le disque, un SIGPIPE inattendu peut être gênant. Nous vérifions déjà la valeur de retour de tous nos appels write(), et mourir à cause du signal nous enlève notre chance de gérer avec élégance l'erreur.

Sous Linux, nous ne verrions généralement pas SIGPIPE du tout pendant l'extraction. Si l'autre côté de la connexion réseau raccroche, nous verrons ECONNRESET.
Mais sous OS X, nous obtenons un SIGPIPE, et le processus est tué.

Ignorons SIGPIPE pendant la partie réseau de l'extraction, ce qui entraînera le retour de notre write()EPIPE, nous donnant un comportement cohérent sur toutes les plateformes.

2
VonC