为什么每次我git pull
在实时服务器上执行 a 时,文件的所有者都会更改?我继续手动执行chown john:john index.php
.
我需要更改什么,以便当我执行 a 时git pull
,文件的所有者将自动成为或保留john
?
答案1
当您使用git pull
(相当于git fetch; git merge
)时,git 创建新文件并且不关心以前的所有权(git 不存储该信息)。
有不同的解决方案来解决这个问题。更简单的方法可能是添加一个post-update
钩子(在您的.git/hooks
目录中)以chown john:john . -R
在合并/拉取后自动调用(请参阅 SO 解决方案的示例)。
替代解决方案是:
git pull
以 john 用户而不是 root 身份运行(这将需要 john 对 .git 目录的写入权限)。- 创建一个钩子来进行部署,它将使用 john 作为用户,或者在更新后执行 chown (因此您必须在裸存储库的钩子
git pull
内执行)。post-receive
在linux中,这可能是另一种解决方案setuid
/setgid