我有一个git结帐。所有的文件权限都不同于git认为它们应该是什么,因此它们都显示为修改。
没有触及文件的内容(只是想修改权限),我如何设置所有文件的权限,git认为他们应该是什么?
我有一个git结帐。所有的文件权限都不同于git认为它们应该是什么,因此它们都显示为修改。
没有触及文件的内容(只是想修改权限),我如何设置所有文件的权限,git认为他们应该是什么?
当前回答
etckeeper工具可以处理权限和:
etckeeper init -d /mydir
你可以把它用在其他地方,而不是/等等。
使用你的包管理器安装或从上面的链接获取源代码。
其他回答
muhqu的答案中使用的Git diff -p可能不能显示所有的差异。
我在Cygwin看到了这个我不拥有的文件 模式改变完全被忽略。filemode为false(这是MSysGit的默认值)
这段代码直接读取元数据:
(set -o errexit pipefail nounset;
git ls-tree HEAD -z | while read -r -d $'\0' mask type blob path
do
if [ "$type" != "blob" ]; then continue; fi;
case "$mask" in
#do not touch other bits
100644) chmod a-x "$path";;
100755) chmod a+x "$path";;
*) echo "invalid: $mask $type $blob\t$path" >&2; false;;
esac
done)
一个非生产级的一行代码(完全替换了掩码):
git ls-tree HEAD | perl -ne '/^10(0\d{3}) blob \S+\t(.+)$/ && { system "chmod",$1,$2 || die }'
(“$ \0”转至http://transnum.blogspot.ru/2008/11/bashs-read-built-in-supports-0-as.html)
etckeeper工具可以处理权限和:
etckeeper init -d /mydir
你可以把它用在其他地方,而不是/等等。
使用你的包管理器安装或从上面的链接获取源代码。
我知道这很古老,但我来自谷歌,我没有找到答案
如果你没有零钱想留着,我有一个简单的解决办法:
git config core.fileMode true
git reset --hard HEAD
试试git的config core。fileMode假
从git配置手册页:
core.fileMode 如果为false,则忽略索引和工作副本之间的可执行位差异;对FAT等损坏的文件系统很有用。看到git-update-index(1)。 默认为true,除非git-clone(1)或git-init(1)将探测和设置core。在创建存储库时,fileMode为false(如果合适)。
你也可以尝试一个前/后结帐挂钩。
参见:自定义Git - Git钩子