linux - git push 错误,无法写入 sha1 文件名 ./objects
问题描述
这是一个问题。
我创建了一个新的存储库
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
问题暂时消失了。
我究竟做错了什么?
解决方案
git init --shared=all
使存储库对所有用户都可读,但不是对所有用户都可写。使所有用户都可以写入任何目录(不使用粘性位)通常会带来巨大的安全风险,因此 Git 不提供该选项。
如果您希望人们都能够以这种方式写入 Git 存储库,那么将他们全部放在一个组中,例如git
. 将主存储库及其所有子目录更改为具有该组,并使每个目录设置为 setgid。这意味着创建的每个目录和文件都将具有 group git
。由于使用--shared=all
,Git 将使该组的所有文件和目录可写,用户应该能够正常推送到存储库。
请注意,umask
这里不相关,因为 Git 会调整权限以遵守您指定的设置。
推荐阅读
- r - R - 过滤数据框以仅包含列数符合条件的行
- react-native - 如何将标题传递到抽屉导航器(React Navigation V5)
- php - PHP socket_write 失败仅在下次调用时返回错误
- python - PyCharm - 将 Sources Root 添加到 GitHub
- c++11 - 悬停在 QLabel 上后如何可视化 QPushButton
- c++ - 工会成员的偏移量总是为零吗?
- reactjs - 当这些元素位于具有更高 z-index 的 div 下时,如何使用 testing-library 的 findByText() 查找元素?
- html - 如何定位其他所有图形标签?
- python - 我无法为代码创建最后 3 条规则
- typescript - 为什么 Typescript 不能在赋值中使用泛型的 keyof 类型并将其泛化为字符串?