如何使在Windows上使用git签出的文件默认在Cygwin中可写?


2

我在Windows上进行开发,我更喜欢从Windows命令行运行git并生成命令,但是有时我也想使用cygwin来使用自己喜欢的Unix工具浏览项目存储库。

我的问题是,无论何时我进行任何形式的git checkout,从cygwin的角度来看,它签出的文件都是只读的。我可以使用递归chmod轻松修复它,但是我不想在每次git checkout之后都要做。请注意,如果我使用任何Windows程序编辑这些相同的文件,它们都是可写的-只有cygwin认为它们是只读的。

我不确定是否可以添加git hook,因为正如我所说,我是从Windows命令行运行git checkout的。

我想我对Windows权限和cygwin权限之间的交互感到困惑。


从Windows命令行运行Git时,您知道您是否正在使用Cygwin Git吗?如果不确定,是否可以发布输出git --exec-path
me_and 2012年

不,我没有使用Cygwin git,我只是检查了一下。我更喜欢使用非Cygwin版本的git,因为我使用了一些挂钩,并假设它是从Windows环境而不是Cygwin环境中运行的。
dmazzoni 2012年

我知道我可以切换到使用Cygwin git,但这不是我想要做的-我要做的是了解Windows文件权限和Cygwin文件权限之间的关系。如何在Windows中设置权限,以使文件在Cygwin中可读?
dmazzoni 2012年

Answers:


3

如果不花一些时间来处理各种Windows文件权限,就很难确切地说出问题所在。

值得庆幸的是,我不需要知道这一点。解决所有文件权限问题的简单方法是noacl对所有Cygwin挂载使用该选项。

/etc/fstab在您喜欢的Cygwin文本编辑器中打开(或者,通常,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用户指南》中进一步阅读:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.