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

skr*_*sme 5 git version-control

背景

我有一个 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确实识别了该更改并允许我提交它。但我不想设置执行权限位。

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

我已经咨询了以下SO问题,但它们没有帮助:
How to Force Git to commit a file if it is recognizes as unchanged
Updating file requests only in git

还有多个关于让 Git忽略权限位更改的问题,但答案几乎都围绕 filemode 配置选项,这在这里没有帮助。

Ixi*_*xio 0

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

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

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