我无意中更改了整个树的权限,并仅在其他内容更改时提交了此更改。
我使用的内容如下:
tar -czf deploy.tar git diff --name-only v1 v2
用两个标签之间的修改过的文件生成一个tar,问题是现在由于权限的变化,几乎所有的树都被列为修改过。
有没有办法告诉git diff
忽略那些只更改权限的文件?
答案 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.