Git钩子保留Windows文件权限

Posted

技术标签:

【中文标题】Git钩子保留Windows文件权限【英文标题】:Git hook to preserve windows file permissions 【发布时间】:2019-01-17 02:20:17 【问题描述】:

我有一个本地 git 存储库,它位于另一个本地 git 存储库的上游。当我从上游存储库拉到下游存储库时,我希望在更新后保留特定文件的 Windows 文件权限。我尝试使用以下解决方案:https://github.com/git/git/blob/master/contrib/hooks/setgitperms.perl#L78

但我相信它是基于 UNIX 安全模型并且不保留我的权限。我怎样才能做到这一点?我正在考虑使用带有 win32security 模块的 python 脚本(因为我不熟悉 perl),但一直无法找到合适的文档。除了手动设置权限之外,我在 Windows 安全方面的经验很少。

【问题讨论】:

您的主要问题是什么?如果只是“我怎样才能做到这一点?”那么这太宽泛了,因为有无数种方法。 @PatrickParker 实际上我认为这很好。 “我怎样才能做到这一点?”类型问题固有不会太宽泛,只有当它们类似于“我如何对 Facebook 克隆进行编程?”时。这个问题有一个明确且具体的问题。 可能。无论哪种方式,都需要澄清问题,以更清楚地表明所问的主要问题是什么。 【参考方案1】:

您可以设置您的 git 配置以忽略文件权限差异

git config --global core.fileMode false

我想值得一试。

【讨论】:

【参考方案2】:

解决方案最终变得非常简单。我只需要设置运行 python 脚本的 post-checkout 和 -merge 挂钩来设置文件权限。我从here 收集了足够多的关于 win32security 的信息来使用它,并利用 os.getcwd()(在钩子运行时设置为 git repo 根目录)来定位正确的文件。

【讨论】:

以上是关于Git钩子保留Windows文件权限的主要内容,如果未能解决你的问题,请参考以下文章

使用 Git 保留文件权限

使用git签出文件时如何找出导致文件权限更改的原因?

使用 git 时 Mac/Windows 的文件权限问题

在 Windows 7 上使用 git-bash 更新文件权限

windows下git怎么管理权限

从windows向Linux上传文件,为啥用RZ命令上传文件后,文件权限为600,而其他文件权限都为644?