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


12

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

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


1
john当前目录的所有者吗?
user000001 2014年

是的,john是目录的所有者:)
PinoyStackOverflower 2014年

1
哪个用户在运行git pull
cuonglm

@Gnouc根用户,我以根用户身份通过​​SSH登录到我们的实时服务器中:)
PinoyStackOverflower 2014年

Answers:


11

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

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

替代解决方案是:

  • git pull以john用户身份而不是root用户身份运行(这需要对.git目录的john具有写权限)。
  • 创建一个挂钩进行部署,该挂钩将使用john作为用户,或者在更新后执行chown(因此您必须在裸仓库git pullpost-receive挂钩内进行)。

如果您先git fetch以root git merge用户身份又以john用户身份执行该怎么办?john仍然需要.git目录的写权限吗?
通配符

是的,大多数时候。git fetch作为根,.git / objects中的新文件可能具有root作为所有者。git merge正如john用户(大部分时间)将尝试至少覆盖.git/index.git/HEAD(可能在每次更改时删除/创建),并在中写入一些文件.git/objects/。+工作目录中的所有新文件。例如,快进合并可能会有例外。
阿塞纳尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.