Rom*_*juk 21 git permissions umask
我有Git的问题.我在Google和StackOverflow中搜索了一个解决方案,但没有任何帮助.
问题是,每当git更新工作目录中的某个文件时(当我签出分支或合并分支时等),则更改文件权限,以便添加"可写入组"标志.如果文件可写入组,我的apache会显示"错误500".
示例:我有一个文件index.php.权限是"-rwxr-xr-x".当前(活动)分支是主分支.此文件在分支"develop"中已更改.我执行"git checkout develop"并且文件index.php获得权限"-rwxrwxr-x"(可写入组添加).我的网站停止工作.由于apache不允许在php文件中使用此标志(我不知道为什么但我无法更改此内容).
每当我执行"git checkout develop"时,我还需要执行"chmod gw index.php".我不喜欢执行两个命令(有时我忘记执行此操作,我的网站不起作用).
我该怎么做才能解决这个问题?我认为这与umask有关.我在网上找到了一些技巧,但没有任何效果.
谢谢.
快速回答是这个shell函数要放在你的~/.profile.解释如下.
git(){(umask 0022; command git "$@")}
Run Code Online (Sandbox Code Playgroud)
一个的umask是一个过程的性质.它继承自父进程,可以在以后从内部进行更改.更改umask的命令通常也称为umask.
Git没有用于设置其umask的配置选项,它在执行后不会更改其umask.你必须从外部设置Git的umask,让它从父进程(通常是shell)继承.
嗯,你似乎不喜欢除了git以外的任何东西都改变了umask的想法.所以让我们在执行时改变它git.
当shell执行一行时,它会占用该行的第一个单词并尝试查找该名称的函数.只有没有,它才会尝试在其中找到该名称的命令PATH.我上面写的函数是命名的git,因此git现在任何直接调用都会执行它而不是git命令.
该函数执行子shell,更改其umask并git从子shell内执行命令.在Git完成其工作之后,子shell也退出,原始shell实例仍将具有原始umask.
但是,该功能还显示了如何绕过自身.如果您git通过command git或甚/usr/bin/git至调用,则不会调用该函数.但是,对于任何体面的使用来说,这已经足够了.
小智 9
允许文件作为二进制文件执行是危险的.无论如何,我用umask解决了这个问题.我的post-receive脚本看起来像:
!/bin/sh
umask 002
GIT_WORK_TREE=/var/www/site git checkout -f
Run Code Online (Sandbox Code Playgroud)
因此,file permissions设置为664并directory permissions设置为775,这完全适合我.
PS在用户的.profile文件中设置umask git没有效果,我不明白为什么,如果你知道为什么会这样,请注释掉.
| 归档时间: |
|
| 查看次数: |
13143 次 |
| 最近记录: |