我是唯一参与这个 git 项目的人。每次我在本地 Ubuntu 存储库中编辑文件,然后推送到 Bitbucket 并拉取到我的生产存储库时,git 都会将编辑的文件更改为 -rwxrwxr-x 775。Apache 不喜欢这样。
本地系统:Ubuntu Linux 上的 git 版本 1.8.1.2
生产系统:CentOS/Red Hat Linux 上的 git 版本 1.7.12
当我将权限修复为 755 时,然后执行
git diff
or
git diff -p
它什么也没显示。
在我的本地存储库中,权限为 755,文件全部归 haws 所有。
在我的生产存储库中,所有其他权限都保持在 755,并且包括 contact.php 在内的所有文件都归我的用户名所有。
在本地和生产存储库中,我按如下方式更改了 core.filemode ,试图阻止此行为,
core.filemode = false
我在合作项目中遇到过这样的谜团,所以我真的很想了解到底发生了什么。
- 我该如何查看git更改此文件权限的原因?
- 我怎样才能让 git 停止改变它?
我也尝试在这里找到解决方案:防止 Git 更改拉取权限 https://stackoverflow.com/questions/12733452/prevent-git-from-changing-permissions-on-pull无济于事。
我的最终解决方案(感谢VonC的指导):
-
感谢 VonC 的良好解释,我勇敢地发现每次登录服务器时,我的 umask 都会回到 0002。因此,我在我的位置创建了一个用户启动脚本(.bashrc 或在我的情况下为 .bash_profile)。设置的Linux主机
掩码0022
或使用符号表示法(以获得一点附加值)
umask u=a,g-w,o-w
or
umask u=a,go-w
(允许用户的所有权限,不允许组和其他人的写权限)
这解决了我的问题。
- 我之前已将 git config core.sharedRepository 设置为 true,但这不是我的问题,问题解决后我删除了该设置。
正如《在钩子中使用 git pull 时文件权限错误 https://stackoverflow.com/a/5443141/6309"
Git不存储权限,除了可执行位之外.
因此,在结帐时,将使用默认权限创建文件,这取决于您的umask http://en.wikipedia.org/wiki/Umask.
在你的情况下:umask 0022
应该在拉动时设置。
(这就是我在你看到的答案中提到的“防止 Git 更改拉取权限 https://stackoverflow.com/a/12735291/6309")
这假设您在目标存储库中具有如下配置:
git config core.sharedRepository true
另一种解决方案在“如何与一台计算机上的多个用户共享 Git 存储库? https://serverfault.com/a/113688/783”,您需要确保引入像这样初始化的存储库:
git init --shared=0022
The OP Tom Haws https://stackoverflow.com/users/563114/tom-haws在评论中添加:
你知道为什么我客户的生产服务器上的 git 能够在没有文件权限更改的情况下拉取,即使没有sharedRepository
该存储库配置中的条目?
可能是因为 umask 默认设置为0022
已经,这意味着,默认情况下,git shell 继承了umask
系统的。
改变umask
需要一个core.sharedRepository
set to true
考虑它而不是考虑umask
父进程的。
那,或者因为回购是用创建的--shared=0022
.
看看如何umask
可以设置(系统范围或用户范围),请参阅“如何设置系统范围umask? https://stackoverflow.com/a/10221511/6309"
要检查umask
在 git 命令(将继承其值)之前,只需键入:
umask
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)