web-dev-qa-db-fra.com

git clone échoue avec "index-pack" échoué?

J'ai donc créé un repo distant qui est pas bare (car j’ai besoin de redmine pour pouvoir le lire), Et il est configuré pour être partagé avec le groupe (donc git init --shared = groupe). J'ai été capable de pousser au repo distant et maintenant j'essaye de le cloner. 

Si je le clone sur le net, je reçois ceci:

remote: Counting objects: 4648, done.
remote: Compressing objects: 100% (2837/2837), done.
error: git-upload-pack: git-pack-objects died with error.B/s  
fatal: git-upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOF
fatal: index-pack failed

Je suis capable de le cloner localement sans problème et j'ai lancé "git fsck", qui ne rapporte que quelques arbres/blobs pendantes, ce qui, je le comprends bien, ne pose pas de problème. Qu'est-ce qui peut causer cela? Je peux toujours en tirer, mais pas cloner. Je dois noter que la version distante de Git est 1.5.6.5, tandis que la version locale est 1.6.0.4.

J'ai essayé de cloner ma copie locale du référentiel, en supprimant le dossier .git, en le déplaçant vers un nouveau référentiel, puis en le clonant et en obtenant la même erreur. git-upload-pack pour échouer ... 

Edit: J'ai un certain nombre de fichiers binaires Windows dans le référentiel, car je viens de construire les modules python, puis de les y insérer, afin que tout le monde n’ait pas à les construire également. Si je supprime les fichiers binaires de Windows et que j'appuie sur un nouveau dépôt, je peux cloner à nouveau, ce qui peut donner un indice. Essayer de préciser le fichier qui cause le problème maintenant.

47
Sean McAllister

La façon dont j'ai résolu ce problème est la suivante: mon démon git s'exécute sous Windows et les clients sur d'autres ordinateurs.

J'ai trouvé une solution de contournement (mais cela ne fonctionnera que sous Windows).

Démarrez le démon git avec la version détaillée de cmd.exe:

"C:\Program Files\Git\bin\sh.exe" --login -i -c 'git.exe daemon --verbose  '

Non testé, si cela fonctionne directement dans git bash. Peut-être que ça va.

Puis (avant de commencer un clone, tirez, récupérez, ...) sélectionnez du texte dans la fenêtre (note: "Mode Édition Rapide" doit être activé (peut être trouvé dans: cmd.exe -> Propriétés (cliquez en haut à gauche coin de votre fenêtre cmd) -> Options d’édition)) dans lequel le démon git est exécuté. Cela l'empêchera d'imprimer d'autres messages dans cette fenêtre.

Lorsque le thread de sortie du démon git est bloqué de cette façon, l'erreur ne se produit pas

21
Martin

J'ai le même problème que vous; le message d'erreur quand je clone i:

Cloning into test...
remote: Counting objects: 6503, done.
remote: Compressing objects: 100% (4519/4519), done.
Connection to git.myhost.im closed by remote Host.| 350 KiB/s
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

Dans mon cas, la raison en est que la taille de mon référentiel (200 Mo) est supérieure à la mémoire de mon serveur git (128 Mo). Lorsque je clone à partir du serveur git, j'utilise la commande top sur mon serveur, ce qui indique que l'utilisation de la mémoire dépasse bientôt 128 Mo.

Lorsque j'utilise un autre serveur doté de 4G de mémoire, le git clone est correct. Vous pouvez également essayer d'ajouter plus d'espace d'échange à votre serveur.

14
andywu

"Git gc" se plaint-il?

12
Yann Ramin

J'avais le même problème ... Je pensais aussi que c'était dû au fait que j'utilisais le mode texte/CRLF pour les fichiers créés ... et en effet, après le passage de CygWin au mode UNIX/binary newline, tout fonctionne bien.

Voir:

En passant, le moyen le plus simple pour moi de changer de mode de fichier était de modifier /etc/fstabto basculer de

aucun/cygdrive texte cygdrive, posix = 0, utilisateur 0 0

à

none/cygdrive cygdrive binary, posix = 0, utilisateur 0 0

4
Nicolai Josuttis

J'ai aussi eu des problèmes avec cygwin git, l'erreur: fatal: index-pack failed,

J'ai pu résoudre ce problème en créant un montage pour mes projets et en le mettant en mode binaire. puisque mon /c est réglé en mode texte.

Ajoutez les cygwin à /etc/fstab:

c:/work/Projects /projects some_fs binary 0 0

lancez mount -a pour monter tous les lecteurs.

Vous devez être dans /projects pour pouvoir utiliser cygwin git, /c/work/Projects échouera.

Je ne sais pas si cela fonctionnera pour vous.

3
mpmeyer

Utilisez la variable d'environnement GIT_TRACE pour obtenir une sortie de débogage. Définissez-le sur "1" pour tracer vers stderr ou un chemin absolu pour tracer vers un fichier.

3
ivan_pozdeev

J'ai eu ce problème ou presque, mais je n'ai pas vu la solution à mon cas dans aucun de ces fils.

Dans mon cas, le problème était le pare-feu. Le clonage de petits référentiels a néanmoins fonctionné, mais les plus grands ont échoué. Donc, si rien n’aide, les paramètres du pare-feu méritent d’être vérifiés.

0
Lasse Lindqvist

J'ai mis à niveau la source git de mon ordinateur client vers la même version que le serveur et cela a résolu le problème pour moi. 

0
Jim Geurts

Le problème de git-daemon semble avoir été résolu dans v2.17.0 (vérifié avec une version v2.16.2.1 non opérationnelle) . I.e. La solution de contournement consistant à sélectionner du texte dans la console pour "verrouiller le tampon de sortie" ne devrait plus être nécessaire.

De https://github.com/git/git/blob/v2.17.0/Documentation/RelNotes/2.17.0.txt :

  • Assortiment de correctifs pour "git daemon" . (fusionnez ed15e58efe jk/daemon-correctifs plus tard avec maint).
0
GreenMoose

J'ai le même problème et je changerais ma configuration en git et cela fonctionne bien:

git config --global pack.packSizeLimit 50m
git config --global pack.windowMemory 50m
git config --global core.compression 9

0
Flávio H. Ferreira