Git在结账时更改我的文件权限

Shi*_*iro 41 git

我们的工作流程是在本地计算机上开发,将更改提交到中央存储库,然后检查我们需要的存储库的分支.

问题是Git会更改其签出的文件的所有权甚至文件权限,具体取决于进行结帐的用户.这样做的直接结果是我们的CSS文件在结账后变得不可读,因为Git将文件所有权更改为在webroot中执行Git pull的人.

例:

  • 之前git pull:style.css拥有user_a:group_a
  • 之后git pull:style.css拥有user_b:user_b

我想保持所有权user_a:group_a.每当我的团队中的一个人对文件进行更改并将所有权更改回原始配置时,我都不希望必须登录.

别人怎么处理这个?您如何处理多个用户使用的存储库.我们的系统上有suphp,无法将其取下.

eis*_*eis 37

Git不会更改文件权限或所有权.只是它(大多数情况下)也没有存储它,它在您的仓库中不存在,因此它们会被更改为您的用户拥有的任何内容.就像创建任何文件一样.

Git支持两个权限集:可执行位开启和可执行位关闭.没有其他的.根本不存储所有权信息.

请参阅此主题 - "如果您需要特定权限,则需要手动执行此操作."

建议使用一些解决方案:您可以使用单独的工具为您执行此操作,使用正确的用户帐户和umask组合默认设置它们或自己编写一个git hook来执行此操作.在进行结账时,将在用户上安装一个钩子.

就像@ikke在评论中所说的那样,Git并不是真正的部署工具,不应该这样使用.它是源代码的版本控制系统.


tis*_*hma 14

对我来说,最好的解决方案是创建一个修复权限的shell脚本.例如:

.git/hooks/post-checkout:

#!/bin/sh
chmod +x  tools/*
Run Code Online (Sandbox Code Playgroud)

顺便说一句,结帐不是唯一的情况,当git搞乱权限时,它也是你拉的时候.我用.git/hooks/post-merge钩子处理.

理想情况下,您可以创建一个shell脚本来修复repo中的某个位置(例如tools/fixpermissions.sh),并在两个钩子中调用它.不要忘记手动更改该文件的权限;)

#!/bin/sh
chmod a+x tools/fixpermissions.sh
tools/fixpermissions.sh
Run Code Online (Sandbox Code Playgroud)