我使用的代码库从Git存储库检出到我的Linux机器上.由于我们的生产代码是为部署在Linux上编写的,因此我在Linux机器上进行了所有测试,但是喜欢使用Windows进行日常使用,包括代码编辑/创作.
为此,我创建了一个文件夹(我的主文件夹)的Samba共享,我在那里签出代码,如下所示:
[wgrover] path = /home/wgrover available = yes valid users = wgrover read only = no browsable = yes public = yes writable = yes
但是,当我从\\linux-box\wgrover
Windows中的samba共享编辑文件时,755
即使644
在编辑之前,Linux中的文件权限也会不断变化.
这一直在我git diff
这样出现:
diff --git a/debian/maggie.nginx.conf b/debian/maggie.nginx.conf old mode 100644 new mode 100755 index 7cda506..7eab574
可以create mask
在smb.conf中设置,但也不会"保留"原始文件权限.我可以通过设置忽略git中的文件模式更改fileMode = false
,.gitconfig
但也忽略了问题.
从linux修改文件权限有什么办法可以保留文件权限吗?
最终可以弄清楚许可的变化原因.混淆源于map archive = yes
设置是Samba中的默认值.设置后map archive = no
,所有者执行位开始表现得像我预期的那样.
通过阅读以下文档找到答案:http://www.samba.org/samba/docs/using_samba/ch08.html在MS-DOS和Unix上的文件权限和属性部分.它清楚地提到了这种副作用:
因此,Samba磁盘共享中的文件中存在的三个Unix可执行位中的任何一个都没有用处.但是,DOS文件在Unix环境中存储时需要保留自己的属性:归档,系统和隐藏位.Samba可以通过重用Unix端文件的可执行权限位来保留这些位 - 如果它被指示这样做的话.然而,映射这些位有一个不幸的副作用:如果Windows用户将文件存储在Samba共享中,并且您在Unix上使用该
ls -al
命令查看它,则某些可执行位将不代表您对它们的期望.
但是,它也提到了这一点:
我们应该警告您
map archive
选项的默认值是yes
,而其他两个选项的默认值是no
.这是因为如果没有为DOS和Windows文件正确存储存档位,许多程序将无法正常工作.但是,系统和隐藏属性对于程序的操作并不重要,由管理员自行决定.
您还可以在此处阅读有关存档位的更多信息:http://en.wikipedia.org/wiki/Archive_bit