将 git 存储库移动到 nfs 会导致权限错误

Posted

技术标签:

【中文标题】将 git 存储库移动到 nfs 会导致权限错误【英文标题】:Moving git repositories to nfs causes permission errors 【发布时间】:2016-06-04 15:56:05 【问题描述】:

我正在运行一个带有 redmine-git-hosting 插件的 redmine 服务器来控制 git repos。存储库目录指向安装在/srv/share 的单独硬盘驱动器。现在设置正在更改,我正在尝试将存储库移动到另一台服务器上的 nfs 共享。

挂载工作正常,我只是将 fstab 文件中的条目从 /etc/sdb1 替换为 ip:/share。现在我事先遇到了一些权限问题,因为 redmine(用户 www-data)和 gitolite(用户 git)同时访问了驱动器,所以我在整个驱动器上运行了 chmod -R 777 来处理这个问题。

我将 Windows NFS 服务器设置为相同的 umask(那里是 000,由于某种原因它被颠倒了),实际上两个用户都可以读取和写入驱动器。但是现在尝试使用 redmine 创建一个新的存储库时,会弹出错误 500。无用的日志条目显示Rugged::NetworkError (unpacking the sent packfile failed on the remote):

现在服务器上已经配置了 git repos,当我尝试向其中一个提交内容时,会弹出以下错误

Total 3 (delta 0), reused 0 (delta 0)
POST git-receive-pack (397 bytes)
remote: fatal: error when closing sha1 file: Permission denied

有什么想法可以在这里做什么吗?

nfs 客户端、redmine 和 git 服务器:ubuntu 服务器 14.04.4 LTS nfs 服务器:Windows Server 2012R2 上的 haneWin nfs 服务器

【问题讨论】:

关于 ssh,请确保 .ssh 的父文件夹和 ssh 文件夹本身没有任何写入属性。 chmod 700 用于 .ssh 本身(在服务器和客户端上) 我使用https访问git 好的,我把 sha1 误读为 ssh! 在 chmod 之后,可能是 chown? ***.com/a/692062/6309 或者至少一个git config core.sharedRepository true 【参考方案1】:

所以这整个事情很奇怪。最后,我使用了一个虚拟 vdi 磁盘,该磁盘存储在 Windows 服务器上的一个文件夹中,该文件夹由 ubuntu 通过 SMB 共享和挂载(到/srv/shareSMB)。然后 vdi 再次由 ubuntu 挂载到原始的/srv/share。这行得通。

我认为问题导致了 unix 和 Windows 世界在文件结构方面的差异,尤其是链接。 Gitolite 似乎经常使用链接,这可能是万恶之源,这样所有 gitolite 存储库都被破坏了,我需要重新安装它。

【讨论】:

那里的 vdi 很有趣。 +1 除此之外,vdi 似乎是最好的解决方案,因为它是过去动态调整大小对我来说可靠工作的唯一虚拟格式。它也可以通过 ubuntu 挂载,你甚至可以通过 nfs 共享挂载的 vdi,这很酷。

以上是关于将 git 存储库移动到 nfs 会导致权限错误的主要内容,如果未能解决你的问题,请参考以下文章

WSL+samba+git:“错误:将对象添加到存储库数据库.git/objects的权限不足” / git-clone / git-add 权限错误

如何将提交移动到 git 中的暂存区?

将存储库推送到 Github 时权限被拒绝 [重复]

Git没有编辑远程存储库的访问权限

Git 提交添加/删除未暂存提交的文件

将 Mercurial 存储库移动到现有 git 存储库的子目录中