当前位置:  开发笔记 > 编程语言 > 正文

Git pull error:无法创建临时sha1文件名

如何解决《Gitpullerror:无法创建临时sha1文件名》经验,为你挑选了5个好方法。

我有一个小的git repo设置,唯一真正的目的是能够在几台机器(工作,家庭,笔记本电脑)上进行本地开发.因此,我有一个分支,一旦我离开计算机,我提交/推动,拉一下我坐下 工作得很好,到现在为止.现在当我拉上我的"实时测试"机器时,我得到以下信息:

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

在网上搜索我能找到的唯一真正的答案如下:http://marc.info/? l = git&m = 122720741928774&w = 2,它基本上表明这是一个虚假的错误,它在堆顶上,因此没有说什么关于什么是真的错了.

我从哪里可以找出问题所在?

编辑:删除本地副本并重新克隆



1> aresnick..:

对于它的价值,当我有这个问题,但承诺-我当试图git-repackgit-gc,但既不工作.我得到了一个权限被拒绝的错误,这导致我chown递归到我预期的用户的整个repo,然后我可以提交/推/拉没有问题.



2> VonC..:

在" Re:Bug?git svn fetch:"中提到了无法创建临时sha1文件名/home/andres/git/public/crystal.g ":

经过重新包装库中的问题已经一去不复返了.真的很奇怪.

你尝试重新包装吗?

git-repack用于将当前不在"包"中的所有对象组合成包.它还可用于将现有包重组为单个更高效的包.
包是一组对象,单独压缩,应用增量压缩,存储在单个文件中,带有相关的索引文件.
包用于减少镜像系统,备份引擎,磁盘存储等的负载.

您是否尝试升级到最新版本的Git?

您可以运行不同的命令来"清理"您的存储库,从最安全的存储库到更具侵略性的存储库:

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

正如" Git垃圾收集似乎没有完全发挥作用 "中提到的那样,a git gc --aggressive本身既不充分也不够.

最有效的组合是添加git repack,但也git prune:

git gc
git repack -Ad      # kills in-pack garbage
git prune           # kills loose garbage



3> conny..:

当多个用户提交到同一个存储库时,我看到了这个错误,导致ssh和umask导致的组写权限问题

您可以通过sharedrepository=true在config的[core]部分中进行设置,使新文件保持g + w模式:

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)

编辑:

此方法仅适用于已存在的repos.您可以在创建存储库时完成一次:git --bare init --shared.


这对我有帮助,因为我不赞成使用repo-config,然后在新的git版本中将其删除,所以只有我使用了git config --global --add core.sharedRepository all。这个问题最初是在我由不同的gits在同一个仓库中工作后出现的:一个是GitBash,另一个是Cygwin安装的。

4> Leigh Caldwe..:

我们遇到了用户1之前提交过的相同问题,因此对象/ ed目录是由用户1创建并拥有的.由于用户1的默认权限不允许用户2写入,因此用户2无法提交.

git根据需要将这些目录创建为某种类型的散列桶,因此它们很可能由具有不同权限的几个不同的人根据其umask拥有.

我们通过首先将所有目录整合到同一组中来解决它,然后用g + w对它们进行全局修改,使它们可以进行组写,最后正确设置每个人的umask,以便所有新创建的桶也可以进行组写.

这是因为我们使用ssh:// URL从git中检出 - 我假设如果我们使用git网络协议则不会发生这种情况,因为git守护程序将拥有一致的文件所有权.



5> 小智..:

在我的情况下,我试图推动时遇到了这个问题.

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'

这不是一个许可问题.git gc,git gc --agrressive,git repack或git prune本地没有帮助.注意错误如何说"解包器错误",我认为这是关键,因为它暗示它在另一边.所以我去了(裸)存储库并在那里做了一个git gc.然后我可以推得很好.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有