我有一个小的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,它基本上表明这是一个虚假的错误,它在堆顶上,因此没有说什么关于什么是真的错了.
我从哪里可以找出问题所在?
编辑:删除本地副本并重新克隆
对于它的价值,当我有这个问题,但承诺-我当试图git-repack
和git-gc
,但既不工作.我得到了一个权限被拒绝的错误,这导致我chown
递归到我预期的用户的整个repo,然后我可以提交/推/拉没有问题.
在" 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
当多个用户提交到同一个存储库时,我看到了这个错误,导致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
.
我们遇到了用户1之前提交过的相同问题,因此对象/ ed目录是由用户1创建并拥有的.由于用户1的默认权限不允许用户2写入,因此用户2无法提交.
git根据需要将这些目录创建为某种类型的散列桶,因此它们很可能由具有不同权限的几个不同的人根据其umask拥有.
我们通过首先将所有目录整合到同一组中来解决它,然后用g + w对它们进行全局修改,使它们可以进行组写,最后正确设置每个人的umask,以便所有新创建的桶也可以进行组写.
这是因为我们使用ssh:// URL从git中检出 - 我假设如果我们使用git网络协议则不会发生这种情况,因为git守护程序将拥有一致的文件所有权.
在我的情况下,我试图推动时遇到了这个问题.
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.然后我可以推得很好.