我在 Windows 上进行开发,我更喜欢从 Windows 命令行运行 git 和构建命令,但有时当我想使用我最喜欢的 Unix 工具探索项目存储库时,我也喜欢使用 cygwin。
我遇到的问题是,每当我执行任何类型的 git checkout 时,从 cygwin 的角度来看,它签出的文件都是只读的。我可以使用递归 chmod 轻松修复它,但我不想在每次 git checkout 之后都这样做。请注意,如果我使用任何 Windows 程序编辑相同的文件,它们是可写的 - 只有 cygwin 将它们视为只读。
我不确定我是否可以添加 git hook,因为正如我所说,我正在从 Windows 命令行运行 git checkout。
我想我对 Windows 权限和 cygwin 权限之间的交互感到困惑。
答案1
如果不花一些时间检查各种 Windows 文件权限,就很难确切地说出到底出了什么问题。
值得庆幸的是,我不需要知道这一点。解决所有文件权限问题的简单方法是noacl
对所有 Cygwin 安装使用该选项。
在您最喜欢的 Cygwin 文本编辑器中打开/etc/fstab
(或者,通常,C:\cygwin\etc\fstab
在您最喜欢的 Windows 编辑器中打开,前提是它支持 Unix 行尾 [所以不是记事本])。我以前看起来像这样:
# For a description of the file format, see the Users Guide
# http://cygwin.com/cygwin-ug-net/using.html#mount-table
# This is default anyway:
# none /cygdrive cygdrive binary,posix=0,user 0 0
如果最后一行仍被注释掉,请删除开头的部分#
,以便系统能够注意到它。它可能未被注释掉,在这种情况下就无需#
删除。
然后,在选项列表(就是那个binary,posix=0,user
位)中添加,noacl
至末尾。/etc/fstab
然后,我的相关行如下所示:
none /cygdrive cygdrive binary,posix=0,user,noacl 0 0
然后关闭并重新打开所有 Cygwin 应用程序(可能需要重新启动),您应该不会再看到任何权限问题。
请注意,如果您对挂载点进行了复杂的操作,则可能需要编辑 中的多行/etc/fstab
以及 中累积的任何文件/etc/fstab.d
。您需要对所有这些文件进行的更改都是相同的。
该noacl
选项将导致 Cygwin 完全忽略所有 NTFS 访问控制列表。它仍将查看 DOS 只读属性,但该属性不与任何用户绑定。这意味着它也无法根据权限判断文件是否可执行;相反,它假设任何以或结尾的文件都是可执行的.bat
,以及任何以 开头的文件。.com
.exe
#!
如果您有兴趣,可以进一步阅读 Cygwin 用户指南: