git checkout -- 文件更改现有文件的权限

git checkout -- 文件更改现有文件的权限

当我编辑文件,然后想要撤消更改时,我使用

git checkout -- file.txt

问题是git不保留现有文件的文件权限。file.txt具有权限644,但在git checkout它之后600(我认为来自我的umask

我知道 git 不存储文件权限,并且我不希望在创建新文件时记住权限。

但在这种情况下文件是存在的。为什么不能git保持权限不变呢?

这可以通过一些丑陋的黑客(一些钩子)来解决吗?

答案1

当 Git 签出文件时,它默认使用系统上文件的 umask,如果它是目录或被标记为可执行文件,则设置可执行位。这是因为 Git 会删除并重新创建该文件,因此它不会保留现有文件的权限。

这实际上是设计使然,因为有一个选项 ,core.sharedRepository可让您配置要签出的文件的权限。默认情况下,它设置为umask,这意味着使用您的 umask。如果您希望存储库中有不同的行为,则可以进行不同的设置,例如 to 0644,它将使用该值。

如果您愿意,可以使用post-checkout挂钩将权限更改回来,尽管这可能并非在所有情况下都有效。

相关内容