推送到 NFS 共享上的 Git 存储库失败

Posted

技术标签:

【中文标题】推送到 NFS 共享上的 Git 存储库失败【英文标题】:Pushing to a Git repository on an NFS share fails 【发布时间】:2011-01-13 00:29:33 【问题描述】:

我们目前在本地磁盘上有我们的 Git 存储库。它们由组共享并通过 SSH(使用 git-shell)访问。

由于空间问题,我们现在想要将存储库移动到 NAS 上的 NFS 共享。我一直在尝试这个,并且遇到了一个奇怪的问题。可以很好地克隆具有完全相同权限的新(和裸)存储库,但是推送更改(touch foo && git add foo && git commit && git push origin master)失败并出现错误“无法设置参考/头/主”和“写失败”。

现在,如果我在本地磁盘上重复此场景,则 refs/heads/master 将归任何用户推送。相反,在 NFS 共享上,如果我将其所有者更改为尝试推送的用户,则不会引发错误。但是,在这两种情况下,用户都是拥有整个存储库并具有组写入权限的组的成员。此外,如果我只是以该组成员的身份使用 SSH 登录,我可以在 NFS 共享和本地磁盘上触摸 refs/heads/master(正如预期的那样)。

因此,我在这里不知所措。我不知道为什么不同的文件所有者会导致推送失败,看看组权限如何允许用户覆盖 refs/heads/master。此外,即使在该文件上使用 chmod 777,推送也会失败,除非我 chown 该文件。

如果有人能对这种奇怪现象有所了解,我将不胜感激。提前致谢!

【问题讨论】:

【参考方案1】:

啊,该死的。 NAS 对权限做了一些奇怪的事情,在所有目录上设置了粘性位。这解释了这种行为。一个额外的 chmod 解决了这个问题。

【讨论】:

解决问题的附加 chmod 到底是什么? 在我的存储库初始化脚本中,我使用chmod -R 660 . && find -type d -exec chmod 2770 \;,但您的里程可能会有所不同... 不幸的是,这对我没有用。尝试在我通过 SSHFS 访问的远程计算机的 NFS 共享上提交存储库时出现此错误(因为远程计算机没有安装 git)。目录很粘,但chmod 没有帮助。我拥有所有文件/目录并拥有所有文件/目录的写入权限。 原来我的问题是 sshfs does not by default support renaming 是 git 操作所必需的。 @kynan 给出的链接已失效,但关键是使用带有选项 -oworkaround=rename 的 sshfs,如 here 所述。

以上是关于推送到 NFS 共享上的 Git 存储库失败的主要内容,如果未能解决你的问题,请参考以下文章

Bitbucket repo:将 webhook 推送到无人机失败

如何在共享的 Windows 机器上创建一个所有开发人员都可以推送到的 git 存储库

Docker 推送到 AWS ECR 私有存储库失败,JSON 格式错误

如何将本地更改推送到 Bitbucket 上的远程 Git 存储库

无法推送到 Bitbucket 上的 Git 存储库

无法推送到 Bitbucket 上的 Git 存储库