这是个问题。
我使用以下方法创建一个新的存储库
mkdir -p repositories/project.git
cd repositories/project.git
git init --bare --shared=all
存储库位于共享的本地文件夹中。 UMASK是022。
后来,我们团队中的人们能够克隆该项目并进行一些更改。 但是,当他们尝试进行“ git push”操作时,很快就会遇到此问题。
error: unable to write sha1 filename ./objects/3c/c2f933427a4215d3237a0c3b874a4ff16725: Permission denied
To myaccountname@nameofthecomputer:/repositories/project.git
! [remote rejected] master -> master (unable to migrate objects to permanent storage)
error: failed to push some refs to 'myaccountname@nameofthecomputer:/repositories/project.git'
问题显然是git创建一些内部文件/对象的方式,因为如果这样做:
sudo chmod -R 777 project.git
问题暂时消失了。
我在做什么错了?
答案 0 :(得分:3)
git init --shared=all
使存储库对所有用户均可读 ,但对所有用户均不可可写。将所有用户都可写的任何目录(不使用粘贴位)通常都存在巨大的安全风险,因此Git不会提供这种选择。
如果您希望所有人都可以通过这种方式写到Git存储库,则将他们全部放在一个组中,例如git
。将主存储库及其所有子目录更改为具有该组,并设置每个目录。这意味着创建的每个目录和文件将具有组git
。由于使用--shared=all
,Git将使该组可写所有文件和目录,因此用户应该能够正常将其推送到存储库。
请注意,umask
与此处无关,因为Git会调整权限以遵循您指定的设置。