将文件推送到我们的服务器后,执行以下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
其他详情:
答案 0 :(得分:2)
在" Git change default umask when update file"中,您可以在钩子上添加umask吗?
#!/bin/sh
umask 002
export GIT_WORK_TREE=/home/user/www/
git checkout -f
应将文件权限设置为664,将目录权限设置为775。
具体针对 gitolite ,check the umask
section of the gitolite.rc
file:
$UMASK
,八进制,默认0077
gitolite使用的默认UMASK为所有回购及其内容提供
rwx------
权限。
想要运行gitweb(或cgit,redmine等)的人意识到这不会做。处理此问题的正确方法是为此变量赋予类似
0027
的值(请注意语法:需要前导0),然后让用户运行Web服务器(apache,www-data,无论如何)git
'umask
'基。如果您已经安装了gitolite,则必须手动修复现有文件(对于
0027
或chmod -R g+rX
,即umask
)。这是因为{{1}}仅影响对新创建文件的权限,而不影响现有文件的权限。
答案 1 :(得分:1)
但是,文件获得了非常奇怪的600权限,并且在结帐时获得了文件夹700.
看起来你的shell有一个限制性的umask设置,可能是umask 0177
。
从这个帖子我明白git没有设置权限,所以git不应该受到责备。
不,这是你的shell的umask
设置。
我的问题是:[...] [如何]我能弄清楚这个问题的原因是什么?
运行umask
,它会告诉您当前的设置是什么。这就像是0177
或类似的。
如果你想知道为什么,
你需要查看/bin/sh
使用的rc文件,
最有可能是.profile
或.bashrc
,以及其他来源的文件。
您可以设置非常严格的umask
设置,但可以在脚本中覆盖它们,方法是添加{@ 1}}行作为@VonC建议。