Linux Git不会重置cifs装载上的文件权限

Linux Git不会重置cifs装载上的文件权限,linux,git,cifs,Linux,Git,Cifs,我最近把编程工具从本地存储移到了网络存储。从那时起,Git就不能正常工作了 典型场景: 我更改文件。现在我想把变化藏起来。我确实git-stash。 Git回滚更改。但是,文件在git状态中仍标记为已更改git diff-p显示 diff --git a/file.txt b/file.txt old mode 100644 new mode 100755 我尝试通过执行以下操作重置文件: git签出--file.txt git重置——硬 但什么都不管用。重新清理工作副本的唯一方法是chm

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

典型场景:
我更改文件。现在我想把变化藏起来。我确实
git-stash
。 Git回滚更改。但是,文件在
git状态中仍标记为已更改<代码>git diff-p
显示

diff --git a/file.txt b/file.txt
old mode 100644
new mode 100755
我尝试通过执行以下操作重置文件:

  • git签出--file.txt
  • git重置——硬
但什么都不管用。重新清理工作副本的唯一方法是
chmod 644 file.txt


这些文件放在一个目录上。我正在通过cifs安装到我的Linux机器上。 我使用了挂载选项
noperm
file\u模式
dir\u模式
,但无法让它工作

我读过关于git config core.filemode false的文章,但我不确定在这里这样做是否正确。我害怕损坏我的存储库。
Git是否将权限信息保存在存储库/索引中?我能检查一下吗?也许我最近的提交已经做错了什么。

你不能跨操作系统边界使用Git,也不能跨Samba/CIFS使用Git,因为它会在新的和修改过的文件上强制使用文件掩码。请参见Atlassian网站。几年前,我希望通过Samba映射在本地开发服务器(本地系统上的Ubuntu VM实例)的Git repo上使用Windows SourceTree,但事实并非如此。我仍然使用虚拟机作为开发服务器,因为我发现在Windows环境中工作时,如果环境不是设计用来运行虚拟机的,我会感到非常沮丧,更不用说生产环境总是Linux了。当然,Windows上的开发工具要好得多,因此这是我的“两全其美”解决方案(虽然Mac端的开发工具很好,但OSX在Linux生产环境中也不是1:1)。因此,除了Git写操作和可视Git差异(即,协调rebase/merge冲突)之外,我使用Samba映射和其他所有操作,这些操作由于给定的原因无法从Windows执行。当需要进行区分时,我切换到LinuxGUI窗口,并在那里执行,然后正确处理Linux权限。否则,我将使用SSH客户端在命令行上操作Git。例如,您不能让IDE或Windows Git客户机(如)通过Samba/CIFS向repo提交内容;它不能正常工作。对于VisualGit客户机,新的是一个很好的选择(它在LinuxGUI中运行)

在某些情况下,您可以通过运行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:

也可以在中查看我的相关帖子