如何在 Git 中更新文件写入权限



Background

我有一个用于 SSH 的配置文件签入到由运行自动测试的系统克隆的存储库中。我正在运行 Linux(我的目标机器也是如此),我不小心检查了文件的第一个版本,权限字段为 664。OpenSSH 拒绝配置文件,因为组写入权限。

我需要将文件权限位更改为 644 并提交该更改,但 Git 无法将文件识别为已更改。

问题

如何更新存储库中的文件写入权限?

解析尝试

  • git add config --force
    未添加文件
  • git config core.filemode true
    文件仍列为未更改
  • git rm --cached config
    git 将文件显示为已删除,但在"git add config"后报告没有更改文件
  • 更改
  • 了权限位并在文件中添加了额外的行,提交了该更改,然后推送了它
    在另一台计算机上拉取该更改后,存在新的空行,但新权限未传播 - 它们仍然是 664

其他研究

根据这个线程,Git 只会识别执行位的变化。我测试了更改执行位,git 确实识别了该更改并允许我提交它。但我不想设置执行权限位。

这个 SO 问题建议使用 git-cache-meta 来存储执行位之外的权限位,但看起来该解决方案需要修改存储存储库的远程服务器,并且我无法控制该服务器。

我已经咨询了以下SO问题,但它们没有帮助:
如果文件被识别为未更改
,如何强制 Git 提交文件仅在 git 中更新文件权限

关于让 Git 忽略权限位更改也有很多问题,但答案几乎都围绕着文件模式配置选项,这在这里没有帮助。

以下问题有答案:当我推送到服务器时,Git 正在更改我文件的权限

那么如何更新存储库中的文件写入权限呢?您不能,因为读/写权限实际上并未存储在存储库中。

我的建议是添加一个在克隆存储库后更改权限的脚本,或者如果您的操作被当前权限阻止,请在执行操作之前添加一些更改权限的代码。

最新更新