在编辑文件时为Samba共享保留文件权限

我使用的代码库从Git仓库检出到我的Linux机器上。 由于我们的生产代码是编写在Linux上部署的,所以我在Linux机器上进行了所有testing,但是喜欢使用Windows进行日常使用,包括代码编辑/创作。

为此,我创build了一个Samba共享文件夹(我的home文件夹),在这里我检出代码,如下所示:

[wgrover] path = /home/wgrover available = yes valid users = wgrover read only = no browsable = yes public = yes writable = yes 

但是,当我在Windows \\linux-box\wgrover从samba共享\\linux-box\wgrover编辑文件时, \\linux-box\wgrover 的文件权限不断更改为755即使它在编辑之前为644

这不断显示在我这个git diff

 diff --git a/debian/maggie.nginx.conf b/debian/maggie.nginx.conf old mode 100644 new mode 100755 index 7cda506..7eab574 

可以在smb.conf中设置一个create mask ,但也不会“保留”原始文件的权限。 我可以通过在.gitconfig设置fileMode = false来忽略git中的文件模式更改,但也忽略了这个问题。

有没有办法保留从Linux修改文件的权限?

终于可以找出为什么许可正在改变。 从map archive = yes设置是Samba中的默认值引起了混淆。 在设置map archive = no ,所有者执行位开始像我预期的那样工作。

通过阅读这里的文档find答案: http : //www.samba.org/samba/docs/using_samba/ch08.html在MS-DOS和Unix部分的文件权限和属性 。 它清楚地提到了这个副作用:

因此,Samba磁盘共享中的文件中存在三个Unix可执行位中的任何一个都没有用处。 然而,DOS文件有自己的属性,当它们存储在Unix环境中时需要保留:存档,系统和隐藏位。 Samba可以通过重新使用Unix端文件的可执行权限位来保留这些位 – 如果指示这样做的话。 但是,映射这些位有一个不幸的副作用:如果Windows用户将文件存储在Samba共享中,并且使用ls -al命令在Unix上查看它,则某些可执行位不代表您要期待他们。

但是,它也提到了这一点:

我们应该警告你, map archive选项的默认值是yes ,而另外两个选项的默认值是no 。 这是因为如果归档位未正确存储在DOS和Windows文件中,许多程序无法正常工作。 然而,系统和隐藏属性对于程序的运行并不重要,而由pipe理员决定。

您也可以在这里阅读更多关于存档位的信息: http : //en.wikipedia.org/wiki/Archive_bit