当多人推/拉时 Git 权限正在改变

Posted

技术标签:

【中文标题】当多人推/拉时 Git 权限正在改变【英文标题】:Git permissions are changing when multiple people push/pull 【发布时间】:2016-07-27 10:37:55 【问题描述】:

我有一个 git 存储库,当我在我的存储库中本地创建文件时,权限设置为 -rw-r--r--

当我推送这些更改并且另一个开发人员将这些更改拉下来时,这个文件现在拥有他的权限-rwxr-xr-x

反之亦然,他创建了一个权限设置为 -rw-r--r-- 的文件并推送到我们的 git 存储库,然后我拉取更改,权限现在为 -rwxr-xr-x

这是什么原因造成的,我该如何解决这个问题,以便在一个开发者推送时无论权限是什么,在下一个开发者拉取时都将应用这些相同的权限?

如果重要的话,我们会在 TFS 中使用 Git。

【问题讨论】:

【参考方案1】:

在关于 ServerFault 的类似问题中 (link) 用户 harrymc 和 boldewyn 指出,有一些文件系统被 git 团队认为“损坏”。

那些文件系统的可执行位有问题。 对于那些您必须忽略文件权限更改才能使其工作的人:

git config core.filemode false

这不会改变已经存储在服务器上的文件权限。因此,在更改文件模式设置后,您可能需要检查在您checkout 分支之后权限是如何到达的。

【讨论】:

【参考方案2】:

除了git config core.filemode false,你还可以在git index中设置或取消设置可执行位,确保git内部会记录正确的权限:

例如:

find . -name '*.sh' | xargs git update-index --chmod=+x

你的情况

xargs git update-index --chmod=_x -- myFile

【讨论】:

以上是关于当多人推/拉时 Git 权限正在改变的主要内容,如果未能解决你的问题,请参考以下文章

C - chmod() 不改变权限

git pull origin HEAD

git 多人协作

无法将 master 推送到 Github -“origin”似乎不是 git 存储库/权限被拒绝

无法将 master 推送到 Github -“origin”似乎不是 git 存储库/权限被拒绝

Git没有编辑远程存储库的访问权限