Linux 环境中的 Git pull 更改文件的所有者

Pin*_*wer 14 git chown

为什么每次git pull在我的实时服务器上执行 a时,文件的所有者都会改变?我继续手动执行chown john:john index.php.

我需要更改什么,以便在我执行 a 时git pull,文件的所有者将自动成为或保留john

小智 12

当您使用git pull(相当于git fetch; git merge)时,git 将更新文件而不更改所有者(git 不存储该信息)。但如果有新文件要创建,则当前用户将被设置为所有者。

有不同的解决方案来解决这个问题。更简单的方法可能是添加一个post-update钩子(在您的.git/hooks目录中)以chown john:john . -R在合并/拉取后自动调用(请参阅该 SO 解决方案的示例)。

替代解决方案是:

  • 运行git pull作为john的用户,而不是根(这将需要写权限约翰.git目录)。
  • 创建一个钩子来进行部署,它要么使用 john 作为用户,要么在更新后执行 chown(所以你必须在裸仓库git pullpost-receive钩子内执行)。