【发布时间】:2017-05-02 18:00:40
【问题描述】:
我的客户端/服务器 git 配置存在问题,当有多个用户推送更改时,这会导致权限问题。我的用户收到错误消息:
远程:错误:将对象添加到存储库数据库的权限不足 ./objects
我的配置 git 存储库位于 NetApp 网络共享上。此网络共享安装在 Red Hat (RHEL) 6.4 Linux 服务器上。要创建存储库,用户登录到 RHEL 服务器,导航到他们想要存储库的位置(在已安装的共享上),然后运行命令:
git init --bare --shared=true repo.git
每个用户都在他们自己的 Windows 7/10 机器上本地工作,他们安装了 git windows,并且他们将前面提到的网络共享映射为驱动器。为了在他们的机器上获取存储库,他们打开 git-bash 并导航到他们想要在本地克隆存储库的位置。然后他们运行:
git clone Z:/git_repo_location/repo.git
问题 用户能够将更改推送到存储库并且一切正常,直到他们尝试将更改推送到其他人之前编辑过的文件。这就是上面列出的错误出现的时候。
从 RHEL 查看权限,repo.git/objects 中的文件夹似乎设置为 755。 我相信正在发生的事情是当用户 A 拥有对象文件夹时,用户 B 无法将更改推送到受影响的文件。作为说明,我让所有用户在 git-bash 中将他们的 umask 更新为 0002(从默认的 0022)。此外,repo.git 存储库中的所有文件/文件夹都归组“DTG”所有,并且在此 repo 上工作的所有用户都属于该组。
尝试修复 我尝试了几种其他方式创建/初始化存储库,但每种方式都有相同的结果:
Create repo2.git
git init --bare repo2.git
cd repo2.git
git config core.sharedRepository group
chgrp -R dtg .
chmod -R g+w .
chmod g+s `find . -type d`
Create repo3.git
git init --bare repo3.git
cd repo3.git
chgrp -R dtg .
chmod -R g+w .
chmod g+s `find . -type d`
git init --bare --shared=all
Create repo4.git
git init --bare repo4.git
cd repo4.git
git config core.sharedRepository true
chgrp -R dtg .
chmod -R g+swX .
chmod g+s `find . -type d`
git init --bare --shared=all
我还尝试让用户在设置本地 sharedRepository 配置时克隆存储库
git clone --config core.sharedRepository=true Z:/git_repo_location/repo.git
到目前为止,唯一解决此问题的方法是我登录 RHEL 机器并将组权限添加到对象文件夹:
chmod -R g+w repo.git/objects/
问题在于,这只是解决当前问题的临时创可贴。但是一旦有人再次推送更改,我就会留下缺少组写入权限的对象文件夹,并且下一个用户将再次被阻止。
任何帮助解决这个问题将不胜感激!!!另外,如果需要任何其他信息,请告诉我。上面尝试的大多数解决方案都来自另一个类似的问题How to configure an existing git repo to be shared by a UNIX group
【问题讨论】:
-
除此之外是重复的:如果您还需要视障编码人员的帮助,请不要发布控制台消息的屏幕截图。而是使用
code或quote块。 -
我尝试的大多数解决方案都源自您提供的可能重复的链接。也许我在页面上遗漏了一些东西,但我无法从该帖子中获得解决方案。另外我会注意截图推荐给以后的帖子!!
-
如果是纯 Windows,我建议在存储库目录上设置权限。但只要涉及桑巴,我真的不知道它在这里是如何运作的。基本上,如果您看到 samba 自身 无法访问某些文件,那么在没有
git的情况下问题应该可以重现