【发布时间】:2016-12-11 20:53:59
【问题描述】:
将文件推送到我们的服务器后,执行以下 post-receive 钩子:
#!/bin/sh
export GIT_WORK_TREE=/home/user/www/
git checkout -f
但是,文件在结帐时获得了一个非常奇怪的600 权限,而文件夹700。这不是我所期望的(在我们的其他服务器上,我们得到644 和755)。从this thread我了解到git没有设置权限,所以不怪git。我的问题是:什么是?我怎样才能弄清楚这个问题的原因是什么?
我已经通过在结帐时运行额外的脚本来修复权限暂时解决了这个问题,但我有兴趣解决根本原因。
我正在使用 gitolite 来管理存储库,但我怀疑这就是原因。但同样,我很高兴知道我可以从哪里开始,因为在这一点上我不确定如何调查这个问题。
根据最初的答案,我查看了服务器上的 umask 设置。 git 用户(即用于上传文件的用户),umask 设置为 0002。这在以下练习中得到确认:
git@server:~$ umask
0002
git@server:~$ touch newfile
git@server:~$ ls -la newfile
-rw-rw-r-- 1 git git 0 Aug 5 10:46 newfile
其他细节:
- Linux 用于服务器端和开发端
- 在本地 repo 中,权限为 755 和 644
- filemode 在 .git/config 中设置为 true
【问题讨论】:
-
感谢@CodeWizard。但是 git 应该只跟踪可执行位,所以它不可能是 git 导致读/写权限丢失,对吧?
标签: git permissions gitolite