当我编辑文件,然后想要撤消更改时,我使用
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
挂钩将权限更改回来,尽管这可能并非在所有情况下都有效。