Git log - 如何过滤(排除)出现在`git log`中的文件? (git pathspec magic)

时间:2016-03-03 13:46:11

标签: git git-commit git-log

我需要使用git-log命令在两个日期之间平均创建一个提交添加和删除行数的报告。

目前我使用的命令是:

git log --since="2015-12-01" --until="2015-12-31" --shortstat

但是我需要在过程中过滤一些文件。 Thoses文件是自动生成的,我们不希望看到它们的影响。他们可以通过名称*.generated.*

轻松识别

我选择使用git-log命令,我能够获得所需的报告,但我没有看到如何过滤这些不需要的文件。

The doc is big,我已经多次阅读过,但我没有看到任何基于名称过滤文件的内容。这是可能的,还是我必须找到另一个命令来查找提交添加/删除的行数?

1 个答案:

答案 0 :(得分:9)

"秘密"如何做到这一点被称为:

<强> pathspec magic

你可以简单地使用这种格式(在git版本&gt; 1.9中引入):

# Use this syntax, pay attention to all the parameters and the syntax

# Unix: 
git log <any required flags> -p  -- . ':(exclude)*.generated.*'

# Windows (double quote) [ Thank to @Cyril Gandon for noticing it]:
# (double quote) should work on all OS as well
git log <any required flags> -p  -- . ":(exclude)*.generated.*"

这种奇怪的语法是什么?

此语法称为 pathspec magic 使用这种语法,你可以告诉&#34; git要排除的文件扩展名。在您的情况下,它是 *.generated.*

来自doc:

<强> http://git-scm.com/docs/gitglossary.html

  

以冒号:开头的 pathspec 具有特殊含义。

     

在简短形式中,前导冒号:后跟零个或多个magic signature个字母(可选地由另一个冒号:)终止,其余部分是与路径匹配的模式。

     

magic signature由ASCII符号组成,既不是字母数字,也不是字母,正则表达式,也不是冒号。如果模式以不属于&#34;魔术签名&#34;的字符开头,则可以省略终止magic signature的可选冒号。符号集,不是冒号。

     

在长格式中,前导冒号:后跟一个左括号(以逗号分隔的零个或多个 magic words 的列表 strong>,和一个紧密的括号),余数是与路径匹配的模式。

<强> 注意

在旧版本中(该功能是在git v1.9中引入的,并且该bug已在git 1.9.5中修复),有一个错误已修复。

https://github.com/git/git/commit/ed22b4173bd8d6dbce6236480bd30a63dd54834e

<强> 演示:

<强> git log --stat

(检查最后一次提交)
enter image description here

和文件管理器一样 - 你可以看到结果中只有一个文件而不是2个

<强> git log --stat -p -- . ':(exclude)*dal.js*'

enter image description here