我有一个git checkout.所有文件权限都不同于git认为应该是的权限,因此它们都显示为已修改.
在不触及文件内容的情况下(只想修改权限)如何将所有文件权限设置为git认为应该是什么?
我是唯一参与这个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
Run Code Online (Sandbox Code Playgroud)
要么
git diff -p
Run Code Online (Sandbox Code Playgroud)
它没有任何表现.
在我的本地存储库中,权限是755,文件全部由haws拥有.在我的生产存储库中,所有其他权限保持在755,并且包括contact.php在内的所有文件都归我的用户名所有.
在本地和生产存储库中,我更改了core.filemode,试图阻止此行为,
core.filemode = false
Run Code Online (Sandbox Code Playgroud)
我在合作项目中遇到过这样的谜团,所以我真的很想了解发生了什么.
我也尝试在这里找到解决方案:防止Git更改权限拉取无效.
我的最终解决方案(感谢VonC的指导):
感谢VonC的好解释,我很勇敢地发现每次登录我的服务器时,我的umask都会回到0002.所以我创建了一个用户启动脚本(.bashrc或我的情况.bash_profile).设置的Linux主机
umask 0022
或使用符号表示法(稍微增加值)
umask u=a,g-w,o-w
Run Code Online (Sandbox Code Playgroud)
要么
umask u=a,go-w
Run Code Online (Sandbox Code Playgroud)
(允许用户拥有所有权限,禁止组和其他人的写权限)
这解决了我的问题.