我使用的代码库是从Git存储库签出到我的Linux机器上的.由于我们的生产代码是为部署在Linux上而编写的,所以我在我的Linux机器上进行所有测试,但喜欢在日常使用中使用Windows,包括代码编辑/编写.

为此,我创建了一个Samba share页的文件夹(我的主文件夹),我在其中签出代码,如下所示:

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

然而,当我在Windows the file permission in Linux keeps changing to 101 even though it was 102 before editing中编辑samba share \\linux-box\wgrover中的文件时.

这一点在我的git diff强中不断出现,如下所示:

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

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

Is there any way to preserve the file permissions when they are modified from linux?

推荐答案

终于弄明白为什么权限在变.混淆源于Samba中的默认值为map archive = yes.设置map archive = no后,所有者执行位开始像我预期的那样运行.

通过阅读这里的文档找到了答案:File Permissions and Attributes on MS-DOS and Unix部分中的http://www.samba.org/samba/docs/using_samba/ch08.html.它明确提到了这种副作用:

因此,Samba磁盘共享文件中的三个Unix可执行位中的任何一个都没有用处.然而,DOS文件在Unix环境中存储时,需要保留它们自己的属性:归档、系统和隐藏位.Samba可以通过在Unix端重用文件的可执行权限位来保留这些位——如果它被指示这样做的话.然而,映射这些位有一个不幸的副作用:如果Windows用户在Samba共享中存储一个文件,并且您在Unix上使用ls -al命令查看它,那么一些可执行位就不会像您期望的那样.

然而,它也提到了这一点:

我们应该警告您,map archive选项的默认值为yes,而其他两个选项的默认值为no.这是因为如果DOS和Windows文件的存档位没有正确存储,许多程序就不能正常工作.然而,系统和隐藏属性对程序的运行并不重要,由管理员自行决定.

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

Linux相关问答推荐

如何确定Linux上的最大静态TLS(线程本地存储)块大小?

eBPF:仅使用系统调用加载 eBPF 程序并将其附加到 sys_enter_execve

Git在某些文件中添加回车符,尽管autocrlf已关闭

使用sed命令将记录中的字符串替换为DD-MMM-YYYY日期格式

使用 sed 或 awk 在 linux 中将第一行中的一个单词替换为第二行中的另一个单词

Linux 如何将主机文件作为用户的输入并将其调用到脚本中

你如何在 CentOS9 上使用 C++ fmt?

跨多台计算机管理用户配置文件

Git为每次推送输入长密码

从 shell 将多个 .sql 转储文件导入 mysql 数据库

无法在 Android Studio 中清理项目

在亚马逊 ec2 linux 微型实例上的 virtualenv 中安装 scipy 时遇到问题

Linux 中的直接内存访问

根据文件名模式和文件内容列出文件名?

GNU Octave 方法对矩阵中的每个项目进行操作.octave arrayfun(...)示例

命令行 Arduino 编译和上传?

ctrl-x 在终端中使用时会发送哪个信号?

ImportError:在 ubuntu 14.04 中没有名为 _io 的模块

查找和基本名称不能很好地播放

在 Docker 容器中运行的 JVM 的驻留集大小 (RSS) 和 Java 总提交内存 (NMT) 之间的差异