git错误“无法写入sha1文件名...权限被拒绝”

时间:2011-07-01 17:47:49

标签: git

我在Windows上使用git。这就是我所做的:在机器M1上进行开发,在USB驱动器M2上创建裸存储库以备份M1上的存储库。我使用这个命令进行备份(来自M1上的git bash):

git push --mirror "f:\repo"

没有任何问题。 然后我买了一台新机器M3。我将存储库从M2克隆到M3:

git clone "f:\repo" .

在M3中为回购制作了一些签到。然后我做了(从机器M3上的git bash)

git push --mirror "f:\repo"  

我收到此错误: 无法写入sha1文件名...权限被拒绝 我该如何解决这个问题?

9 个答案:

答案 0 :(得分:6)

即使它是关于不同的上下文(git + ssh),也请检查与您的repo关联的ACL 例如,请参阅此blog post

正如SO问题“Git pull error: unable to create temporary sha1 filename”(也有其他有趣的建议)所示,尝试使用配置重做你的裸仓库:

git config core.sharedRepository true

答案 1 :(得分:3)

有点晚,但是这些都不适合我。我必须在远程存储库中运行sudo git gc,并且以某种方式解决了所有问题。

此后,我再次推动并成功

答案 2 :(得分:1)

由于对远程存储库的权限,导致出现此错误。就我而言,是ssh用户,这是错误的权限用户。

答案 3 :(得分:0)

我也得到同样的错误,但通常在做一个" git pull"在Windows机器上使用bash。

对我而言,它与其他一些应用程序(在我的情况下通常是病毒检查程序)相关,通过保留.git目录导致冲突。

我通常可以做" git pull"再多几次,它最终会起作用(在相同的权限失败后,在不同的哈希值上拒绝错误)或者如果我感到匆忙,我会停止我的病毒检查,做git pull(这会工作)成功第一次没有权限错误)然后很快再次打开病毒检查程序。

答案 4 :(得分:0)

我在2天内遇到了这个问题,我终于找到了解决问题的方法。发生此错误是因为您实际想要推入的分支(在远程存储库中)当前已签出。应用--mirror--all选项时,至少会检出一个分支,因此权限被拒绝。

所以只需切换到遥控器上的另一个分支并在本地应用push,这次它就可以工作了。

答案 5 :(得分:0)

我的特定错误消息:

error: unable to write sha1 filename ./objects/ee/7ed0ef8db273d8d0acef46f3cc8ad0ae140d50: Permission denied

我刚刚解决了我的问题。原来是存储库问题。 在/ GIT / HOME / projectdir / objects /

这样做,您应该会看到很多带有2个字母的目录:

00  0a  14  1e  28  32  3c  46  50  5a  64  6e  78  82  8c  96  a0  aa  b4  be  c8  d2  dc  e6  f0  fa
01  0b  15  1f  29  33  3d  47  51  5b  65  6f  79  83  8d  97  a1  ab  b5  bf  c9  d3  dd  e7  f1  fb
02  0c  16  20  2a  34  3e  48  52  5c  66  70  7a  84  8e  98  a2  ac  b6  c0  ca  d4  de  e8  f2  fc
03  0d  17  21  2b  35  3f  49  53  5d  67  71  7b  85  8f  99  a3  ad  b7  c1  cb  d5  df  e9  f3  fd
04  0e  18  22  2c  36  40  4a  54  5e  68  72  7c  86  90  9a  a4  ae  b8  ... (many others removed) info pack

在这里我仅列举一些示例(触发错误消息的ee是其中之一)。 ls -l将显示某些目录具有-r只读权限。使用git帐户在缺少w标签的那些目录上执行chmod -R + w解决了我的问题。在我的情况下,包括“ ee”在内的几个目录都没有写权限。

答案 6 :(得分:0)

当您的远程服务器位于同一台计算机上并且由 root 拥有时,也可能发生这种情况。 g。

$ git remote -v
origin  /root/git/project.git (fetch)
origin  /root/git/project.git (push)

在这种情况下,您需要以 root 的身份进行推送,或者调整远程权限以允许不同的用户进行推送。

答案 7 :(得分:-1)

我遇到了同样的问题,可以通过转到C:\Program Files\Git然后右键点击git-bash.exe - >来修复它。属性 - >兼容性 - >以管理员身份运行此程序。

答案 8 :(得分:-1)

当一位同事在umask中没有正确的.bashrc设置导致他提交的任何文件被设置为只读我们其他人尝试编写更改时,我们遇到了这个问题到git repo中的同一个文件。这是link explaining umask permissions