git push错误,无法写入sha1文件名./objects

时间:2020-07-31 22:04:53

标签: linux git

这是个问题。

我使用以下方法创建一个新的存储库

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

问题暂时消失了。

我在做什么错了?

1 个答案:

答案 0 :(得分:3)

git init --shared=all使存储库对所有用户均可读 ,但对所有用户均不可可写。将所有用户都可写的任何目录(不使用粘贴位)通常都存在巨大的安全风险,因此Git不会提供这种选择。

如果您希望所有人都可以通过这种方式写到Git存储库,则将他们全部放在一个组中,例如git。将主存储库及其所有子目录更改为具有该组,并设置每个目录。这意味着创建的每个目录和文件将具有组git。由于使用--shared=all,Git将使该组可写所有文件和目录,因此用户应该能够正常将其推送到存储库。

请注意,umask与此处无关,因为Git会调整权限以遵循您指定的设置。