gpt4 book ai didi

linux - Git 不会通过 cifs mount 重置文件权限

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:59 25 4
gpt4 key购买 nike

我最近将我的编程资料从本地存储转移到网络存储。从那时起,Git 就不能正常工作了。

典型场景:
我更改文件。现在我想 stash 更改。我做 git stash。Git 回滚更改。然而,这些文件在 git status 中仍被标记为已更改。 git diff -p 显示

diff --git a/file.txt b/file.txt
old mode 100644
new mode 100755

我试着通过做重置文件

  • git checkout -- file.txt
  • git reset --hard

但没有任何作用。再次清理工作副本的唯一方法是 chmod 644 file.txt


文件位于 Synology NAS 上。我正在通过 cifs 安装到我的 Linux 机器上。我尝试了挂载选项 nopermfile_modedir_mode 但无法正常工作。

我阅读了有关 git config core.filemode false 的内容,但我不确定这是否是正确的做法。我害怕损坏我的存储库。Git 是否在存储库/索引中保存权限信息?我能以某种方式检查这个吗?也许我最近的提交已经做错了。

最佳答案

您不能跨操作系统边界使用 Git,并且可能跨过 Samba/CIFS 期间,因为它会在新文件和修改过的文件上强制使用文件掩码。参见 this 2013 discussion在 Atlassian 网站上。几年前,我希望通过 Samba 映射在本地开发服务器(本地系统上的 Ubuntu VM 实例)上的 Git 存储库上使用 Windows SourceTree,但事实并非如此。我仍然将 VM 用于开发服务器,因为我发现在 Windows 中使用并非设计用于在其中运行的环境非常令人沮丧,更不用说生产环境始终是 Linux。当然,Windows 上的开发工具更好,所以这对我来说是“两全其美”的解决方案(尽管 Mac 端的开发工具很好,但 OSX 也不会与 Linux 生产环境 1:1) .所以我使用 Samba 映射和 a good SSH client对于除 Git 写入操作和可视化 Git 差异(即协调 rebase /merge 冲突)之外的所有其他内容,由于给定的原因,这些操作不可能从 Windows 执行。当需要做差异时,我切换到 Linux GUI 窗口,并执行 the Linux GUI diff tool of choice在那里,然后正确处理 Linux 权限。否则我在命令行上使用 SSH 客户端操作 Git。例如,您不能让 IDE 或 Windows Git 客户端(如 SourceTree )通过 Samba/CIFS 提交到 repo;它不会正常工作。对于可视化 Git 客户端,新的 GitKraken是一个很好的选择(它在 Linux GUI 中运行)。

某些情况下,您可以通过在忽略文件权限的情况下运行 Git 命令来规避文件权限问题(即 git -c core.fileMode=false),但我发现它很困惑并会导致麻烦,所以我有时只将它用于非写入操作,例如 git status,并为此定义了一个 Git 别名:

nfm = "!f(){ git -c core.fileMode=false $@; };f"

然后您可以在 core.fileMode 暂时禁用的情况下运行 Git 命令,如下所示:

git nfm status

添加 2016-05-07T01:39:44Z:

另请参阅我在 Superuser 中的相关帖子.

关于linux - Git 不会通过 cifs mount 重置文件权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37051071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com