【问题标题】:Git push error, "Unable to write Sha1 filename permission denied"Git 推送错误,“无法写入 Sha1 文件名权限被拒绝”
【发布时间】:2018-01-06 03:42:30
【问题描述】:

我遇到了 git 错误

unable to write sha1 filename 
.git/objects/42/e819f886bf31b67c42249a0eff8e8b16cf7611: Permission denied.

每次我拉取 Git 存储库并修改我同事的一些文件,然后将它们推送到源主服务器时,都会发生这种情况。如果按照我的方式,我的同事也会有同样的错误。我试图初始化 git repos,但上述操作再次发生错误。 (这个错误以前从未发生过)。

我还尝试了其他成员在此处建议的方法,例如将 auth 更改为 777,或以管理员身份打开 git bash,但都是徒劳的。我们使用 TortoiseGit,git 服务器建立在 NAS Synology 之上。

【问题讨论】:

  • 请阅读Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? - 总结是这不是解决志愿者的理想方式,并且可能会适得其反。请不要将此添加到您的问题中。
  • 我相信一个 Git 服务器是通过 SSH 在你自己的用户名下运行的,所以尝试 SSH 到服务器获取一个 shell,然后尝试在你的用户帐户下写入一个文件touch .git/objects/foo。这会创造吗?如果是,请删除它。如果不是,这些文件有哪些用户/组所有权?您可能必须使用chmodchown 重置您的文件/目录权限、用户或组,并且所需命令的确切顺序取决于很多事情。如果这些文件上的用户/组与您的用户无关,777 的权限可能没有任何好处。
  • stackoverflow.com/a/22106970/6309 可能有帮助吗?

标签: git


【解决方案1】:

我通过以下方式解决了这个问题: git 服务器上的用户不仅必须是组 git 的成员 - 假设 git 是服务器上拥有存储库的用户 - 他们还必须是提交到存储库的其他用户的组的成员。

这是因为“对象”下的文件夹归第一个需要它们的人所有。一段时间后,可能会发生这样的文件夹可能被另一个用户重复使用。如果其他用户不是最初创建该文件夹的组的成员,他们可能会被拒绝对该文件夹执行任何操作。

对象下面的文件夹用 2 个十六进制字母命名,从 01 到 fa - 在我的例子中。

【讨论】:

  • 假设用户 A 和 B 正在推送到同一个存储库。用户 A 间接随机创建文件夹 objects/a1、B objects/ef。一段时间后,A 必须随机使用 objects/ef。因此 A 必须是 B 组的成员,否则会发生“无法迁移对象...”。
猜你喜欢
  • 2018-10-24
  • 2013-01-17
  • 2019-03-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-20
  • 2014-02-01
  • 1970-01-01
相关资源
最近更新 更多