我可以让git diff忽略权限更改

时间:2010-07-20 13:38:59

标签: git diff

我无意中更改了整个树的权限,并仅在其他内容更改时提交了此更改。

我使用的内容如下:

tar -czf deploy.tar git diff --name-only v1 v2

用两个标签之间的修改过的文件生成一个tar,问题是现在由于权限的变化,几乎所有的树都被列为修改过。

有没有办法告诉git diff忽略那些只更改权限的文件?

3 个答案:

答案 0 :(得分:137)

这会告诉git忽略权限:

git config core.filemode false

答案 1 :(得分:10)

我故意从源代码文件(~26K文件)中删除执行权限后出现此问题。然后,git diff说所有文件都已更改! core.filemode的答案对我没有帮助,因为它只会影响你工作目录的差异,而不会影响仓库中2次提交的差异。

答案是使用(big scary)filter-branch命令。特别是,您需要键入的所有内容是:

git filter-branch -f --tree-filter 'find * -type f | xargs chmod 644 ' -- --all

来自你工作的目录。当然,如果您需要重新尝试,请务必首先复制您的回购(cp -pr~ / repo.git~ / repo-orig.git或类似)。

享受!

答案 2 :(得分:4)

这是一个古老的问题,答案已经在注释中,但是:

使用-G<regex>选项(“查找其补丁程序文本包含与<regex>匹配的已添加/已删除行的差异。”)搜索所有更改-即.。仅限权限的更改与此不匹配,因此将被忽略。

所以:git diff -G.