Git能够检测文件权限的更改(供您参考https://medium.com/@tahteche/how-git-treats-changes-in-file-permissions-f71874ca239d(。下面是我的预提交代码(githooks(。
git diff --summary | grep "mode change"
if [ $? -eq 0 ]
then
echo "file permission changed. please verify and restore the permissions"
exit 1
else
echo "no file permissions changed. Good to proceed. Keep it up"
fi
我想在提交之前检测是否有任何文件权限被更改。如果检测到文件权限更改,则不应提交更改,而应引发错误。
我认为这是XY问题的一个例子:你正在询问一个检测文件模式更改的脚本,但你真正想解决的是让Windows上的Git停止让你的所有文件在你的repo中可执行。
在Windows上,文件通常是";可执行的";默认情况下,这种方式实际上没有什么用处。这主要是由于以下事实:;可执行的";不是文件上的权限位,而是其他推断的属性,与*nix操作系统不同。
为了解决这个问题,我建议在您的配置中将core.filemode
设置为false
(例如,请参阅Windows上的Git文件权限(:
git config --global core.filemode false
这将使Git忽略那些虚假的文件;可执行";。
然后,当有一个文件你真的想让它可执行时,你可以使用:
git add --chmod +x <filename>
就在那个文件上。