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
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 stipule essentiellement 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é
Vous devez vous connecter pour publier un commentaire.
Pour ce que ça vaut, quand j'ai eu ce problème mais au moment de la validation—j'ai essayé
git-repack
etgit-gc
, mais ni travaillé. J'ai obtenu une permission denied erreur, qui m'a conduit àchown
l'ensemble des pensions de manière récursive à l'utilisateur que j'attendais, et que je ne puis commit/push/pull sans problème.Il est mentionné dans "Re: Bug? git svn fetch: "impossible de créer temporaire sha1 nom de fichier /home/andres/git/public/cristal.g":
Avez-vous essayer un repack ?
Et avez-vous essayez de mettre à niveau vers la dernière version de Git ?
Vous ont différentes commandes à exécuter dans le but de "nettoyer" votre référentiel, à partir de la plus sûre pour les plus agressives:
Comme mentionné dans "Git la collecte des Ordures ne semble pas fonctionner totalement", un
git gc --agressifs
n'est ni suffisante, ni même assez sur son propre.La combinaison la plus efficace serait l'ajout de
git repack
, mais aussigit prune
:git gc
a fonctionné pour moi (non agressifs).git repack -a
juste doublé mon pensions de taille T^T .. dieu merci, l'exécution degit gc
après qui a restauré la taille précédente.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 de
sharedrepository=true
dans [core] section de config: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
.git config --global --add core.sharedRepository all
depuisrepo-config
était obsolète et ensuite retiré dans les nouvelles versions git. Cette question est d'abord apparue après j'ai travaillé sur le même repo par les différents gits: l'un était GitBash et un autre installé par Cygwin.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.
Dans mon cas, j'ai eu ce problème lorsque j'essaie de pousser.
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.
Je vais avoir ce problème et se sentir comme j'ai essayé toutes les choses ci-dessus. J'avais vu ça avant, et c'était dû à des autorisations entre les différents utilisateurs en poussant à la mise en pension, mais dans ce cas tout le monde pousse sous le même utilisateur, et, pour faire bonne mesure, j'ai (sur le repo) chowned tout à la droite de l'utilisateur, le groupe et chmodded u+w et g+w pour faire bonne mesure. Je suis encore en train
error: unable to create temporary sha1 filename ./objects/9a
.Je viens de faire un peu plus de l'enquête et il ne semble pas être quelque chose qui se passe avec les autorisations: avant la poussée, sur les pensions de titres (qui est un nu repo hébergé sur un serveur), tous les fichiers dans les objets ont des autorisations de
-rw-rw-r--
ensemble, qui est ce que vous attendez. Ils sont tous détenus par le même utilisateur et de groupe. Après l'échec de pousser, je peux grep pour les fichiers avec les autorisations définies pour-r--r--r--
, c'est à dire pas accessible en écriture par tout le monde, et affichent leurs emplacements à la commande bashfind . -perm 444 | xargs ls -l
. Faire que me donne la suivante:Ce sont toutes récemment changé de fichiers (au moment de la publication, c'est le 4 Novembre, 15:08). Ainsi, il ressemble à git est mise à jour/remplacer les fichiers (en leur donnant une nouvelle timestamp), de modifier les autorisations dans le processus, puis se plaindre sur les autorisations. Je suis totalement perplexe quant à ce qui se passe ici 🙁
J'ai rencontré ce problème lors de l'utilisation de
git push
Puis-je exécuter
git gc
, il fonctionne.À partir de git-gc(1) Page de Manuel:
git-gc - Nettoyage des fichiers inutiles et d'optimiser le référentiel local
git gc
était la seule chose qu'il fixe pour moi. Merci Wen.Mon problème était un problème de permission
Je suis allé jusqu'répertoire cp-R repo repo_copy
puis tout a fonctionné à nouveau.
puis je suis allé à supprimer des pensions et le refus d'une autorisation, vérifié permanentes et permanentes avait été modifiée et que l'utilisateur je courais comme n'ont pas accès en écriture...
Personnellement, j'ai eu ce problème quand j'ai fait un git push origin master.
La solution pour moi a été:
Sur mon serveur, je me connecter avec root dans le répertoire qui contient mon référentiel et de le faire de manière récursive:
et tous fonctionne bien
Je n'ai qu'un git de l'utilisateur et d'autres se connecter par ssh par la publication de leur clé publique.
Si vous configurez plusieurs git utilisateurs que vous avez à faire la même chose pour chaque utilisateur.
Si quelqu'un d'autre obtient cette erreur, je suis venu à travers elle lorsque vous travaillez à travers le windows-linux diviser. Semble que si un saut de ligne formats converti à windows, vous pouvez toujours engager dans certaines circonstances, mais git puis convertit linux format.
Donc, si de nouvelles lignes ont été les seuls à changer, nous avons maintenant eu deux identiques s'engage dans une rangée. Depuis commettre les hachages sont générés à partir de commettre un fichier de données, et chacun avait les mêmes données, ils ont terminé avec le même hash. Au moins dans mon cas, c'est ce que le "le Fichier existe déjà" l'indique. Git suis tout confus.
Je l'ai corrigé en faisant
git reset --hard
localement et sur le centre des pensions.Essayé quelques solutions, mais finalement rendu compte que le disque dur de notre serveur git avait pas d'espace libre à gauche.
J'ai vu cette erreur une fois et suivis pour un problème d'autorisations. Je ne pouvais pas trouver comment il a été causé, mais de toute façon git avait couru comme un groupe qui n'avait pas l'autorisation d'écriture pour un objet d'annuaire.
Je ne vois pas de raison évidente dans le code et supposé que c'était un OS X les autorisations de problème, probablement à partir de certains bâclée faire ou installer.
J'ai eu une erreur similaire, et il n'était pas un problème d'autorisations (je suis le seul utilisateur du référentiel), et aucun de la gc/repack techniques travaillé. En fin de compte j'ai juste déplacé de côté les vieux dépôt distant et poussa un nouveau. Heureusement, il était assez petit.
Liam
Il convient de noter que vous avez besoin pour réparer les autorisations sur le référentiel que vous avez pousser à, non pas seulement pour votre travail.
De changer de groupe d'utilisateur + autorisation a fonctionné pour moi. J'ai remarqué que certains de l'utilisateur s'engage étaient sous groupe différent. Le changement de tous pour le même groupe a résolu ce problème.
J'ai des erreurs comme cela lorsque l'on travaille sur sshfs. Il répare lui-même après désinstallation et puis le montage de la partager à nouveau.
J'ai eu ce problème lorsque vous essayez de déployer sur heroku. S'avère que j'avais un joyau qui a écrit un fichier à l'tmp/répertoire et heroku n'aime pas ça. A pris le fichier et voila, le problème est résolu. Voir ceci: https://devcenter.heroku.com/articles/read-only-filesystem
J'ai eu ce problème récemment et j'ai tout essayé sur ce fil avec pas de chance. Il y avait beaucoup d'espace disque sur mon VPS, mais il s'est avéré qu'en raison de ne pas le nettoyage de la déploiements dossier que j'avais dépassé les inodes limite (probablement en raison de la libs JS, j'ai été y compris avec 100s de fichiers avant de les croquant).
J'ai supprimé une charge de vieux déploiements et tout a bien fonctionné.
Je sais que c'est un peu un cas limite, mais c'est quelque chose à garder à l'esprit que si tout le reste échoue.
De travail sur le serveur linux pour mac - j'ai essayé quelques-uns des suggestions ci-dessus à pas de chance. Redémarré et puis il a travaillé.
Son pas vraiment une bonne solution, mais j'ai pensé que cela pourrait aider quelqu'un là-bas.