39 votes

Git pull erreur: impossible de créer temporaire sha1 nom de fichier

J'ai un petit repo git d'installation dans le seul but d'être en mesure de développer localement sur plusieurs machines (travail, maison, ordinateur portable). Ainsi, j'ai une branche et je commit/push une fois que je laisse un ordinateur, tirez une fois que je m'assieds à la prochaine. A bien fonctionné, jusqu'à maintenant que c'est. Maintenant, quand je tire sur ma "live test" de la machine, j'obtiens le suivant:

remote: Counting objects: 38, done.
remote: Compressiremote: ng objects: 100% (20/20), done.
remote: Total 20 (delta 17), reused 0 (delta 0)
error: unable to create temporary sha1 filename .git/objects/ed: File exists

fatal: failed to write object
fatal: unpack-objects failed

La recherche sur le net la seule vraie réponse que j'ai pu trouver a été le suivant: http://marc.info/?l=git&m=122720741928774&w=2 qui dit en substance que c'est une erreur de faux qui est sur le dessus de la pile et donc ne dit rien sur ce qu'est vraiment mauvais.

Où dois-je aller d'ici, pour savoir quel est le problème?

Edit: suppression de la copie locale et re-cloné

33voto

aresnick Points 725

FWIW, quand j'ai eu ce problème, mais au moment de la validation. J'ai essayé git-repack et git-gc. Ni travaillé, mais j'ai une erreur permission denied. Je chowned l'ensemble des pensions de manière récursive à l'utilisateur que j'attendais, et que je ne puis commit/push/pull avec aucun problème.

33voto

VonC Points 414372

Il est mentionné dans "Re: Bug? git svn fetch: "impossible de créer temporaire sha1 nom de fichier /home/andres/git/public/cristal.g":

Après reconditionnement dans le référentiel le problème a disparu. Vraiment étrange.

Avez-vous essayé un repack ?

git-repack est utilisé pour combiner tous les objets qui ne réside pas actuellement dans un "pack", dans un pack. Il peut également être utilisé pour ré-organiser les emballages existants en un seul, plus efficace pack.
Un pack est une collection d'objets, individuellement compressé, avec un delta de compression appliquée, stockées dans un fichier unique, associé à un fichier d'index.
Les Packs sont utilisés pour réduire la charge sur les systèmes de miroirs, de sauvegarde des moteurs, disque de stockage, etc.

Et avez-vous essayez de mettre à niveau vers la dernière version de Git ?

Vous avez différentes commandes à exécuter dans le but de "nettoyer" votre référentiel, à partir de la plus sûre pour les plus agressifs:

$ git-prune
$ git-gc --aggressive
$ git-repack
$ git-repack -a
$ git-prune-packed

15voto

conny Points 4475

J'ai vu cette erreur lorsque plusieurs utilisateurs s'engagent à le même référentiel, résultant dans le groupe de l'autorisation d'écriture problèmes comme une conséquence de ssh et umask

Vous pouvez faire de nouveaux fichiers de conserver le g+w en mode de réglage sharedrepository=true dans [core] section de config:

cd /my/shared/repo.git
git repo-config core.sharedRepository true

# (might also need to "chmod -R g+wX ." for each 
# user that owns files in .git/objects)

EDIT:

Cette méthode ne s'applique qu'à déjà existant repos. Vous pouvez le faire à droite une fois sur la création du référentiel: git --bare init --shared.

12voto

Leigh Caldwell Points 4176

Nous avons eu le même problème lorsque l'utilisateur 1 a commis auparavant, après quoi les objets/ed répertoire a été créé et détenu par l'utilisateur 1. Parce que l'utilisateur 1 autorisations par défaut ne permet pas l'écriture par l'utilisateur 2, utilisateur 2 ne pouvait pas s'engager.

git crée ces répertoires comme hachage seaux de quelque sorte sur la demande, de sorte qu'il est tout à fait possible pour eux d'être possédé par plusieurs personnes différentes avec des autorisations différentes en fonction de leur umask.

Nous l'avons résolu en premier chgrping tous les répertoires doivent être détenus par le même groupe, alors chmodding tous avec g+w de sorte qu'ils étaient un groupe droits d'écriture, et enfin tout le monde est umask correctement de sorte que tous les nouveaux seaux seront également accessible en écriture.

C'est parce que nous sommes à l'aide de ssh:// Url à consulter à partir de git - je suppose que si nous étions à l'aide de git protocole de réseau il n'arriverait pas parce que le git daemon aurait cohérente de la propriété des fichiers.

6voto

Dieter_be Points 61

Dans mon cas, j'ai eu ce problème lorsque j'essaie de pousser.

dieter@dieter-dellD620-arch sugarcrmclient [master] git push origin
Counting objects: 16, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (12/12), 3.91 KiB, done.
Total 12 (delta 1), reused 11 (delta 1)
error: unable to create temporary sha1 filename ./objects/7a: File exists

fatal: failed to write object
error: unpack failed: unpacker exited with error code
To gitosis@tiktak.kangaroot.net:sugarcrmclient.git
 ! [remote rejected] master -> master (n/a (unpacker error))
 ! [remote rejected] web -> web (n/a (unpacker error))
error: failed to push some refs to 'gitosis@tiktak.kangaroot.net:sugarcrmclient.git'

il n'était pas un problème de permission. git gc, git gc --agrressive, git repack ou git pruneau localement n'ont pas d'aide. Notez comment le message d'erreur indique "unpacker erreur", je pense que c'est la clé, car elle implique qu'il est de l'autre côté. Je suis donc allé à l' (nu) référentiel et fait un git gc-il. Ensuite, j'ai pu pousser bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X