我怎样才能使我在 Windows 上使用 git 检出的文件在 Cygwin 中默认可写?

我怎样才能使我在 Windows 上使用 git 检出的文件在 Cygwin 中默认可写?

我在 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 用户指南:

相关内容