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

Ces*_*sar 65 git diff

我无意中更改了整个树的权限,并单独提交更改以及其他内容更改.

我使用类似的东西:

tar -czf deploy.tar git diff --name-only v1 v2
Run Code Online (Sandbox Code Playgroud)

使用两个标签之间的修改文件生成tar,问题是现在因为权限更改几乎所有我的树都被列为已修改.

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

Dan*_*ach 145

这将告诉git忽略权限:

git config core.filemode false
Run Code Online (Sandbox Code Playgroud)

  • `git diff -G.(参见http://stackoverflow.com/questions/22388811/show-git-diff-ignoring-file-permission-changes) (11认同)
  • @Cesar:哦!所以你已经提交了更改的权限?对不起,我错过了那一部分.如果您还没有将更改推送到另一个存储库或将它们合并到另一个分支,我建议修改/重新定义提交以修复它. (3认同)
  • 也许这可能会阻止添加具有更改权限的文件到提交,但在我的情况下,文件被提交,推送和标记,并且您建议的命令对我没有帮助.我想我必须制作某种bash脚本来解析git diff的输出以删除关于模式更改的行,并将结果提供给tar.任何想法都更受欢迎 (2认同)
  • gif diff -G。****末尾的点(`.`)** (2认同)

Ala*_*son 12

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

答案是使用(大吓人)filter-branch命令.特别是,您需要输入的是:

git filter-branch -f --tree-filter 'find * -type f | xargs chmod 644 ' -- --all
Run Code Online (Sandbox Code Playgroud)

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

请享用!


laz*_*tem 9

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

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

所以: git diff -G.