Git日志 - 如何过滤(排除)文件在`git log`中显示?(git路径规范魔法)

17

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

目前我使用的命令是:

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

但我需要在过程中过滤一些文件。 这些文件是自动生成的,我们不想看到它们的影响。它们可以通过它们的名称 *.generated.* 很容易地识别出来。

我选择使用 git-log 命令,我能获得需要的报告,除了我不知道如何过滤那些不需要的文件。

文档很大,我已经多次阅读了它,但我没有看到任何关于根据文件名过滤文件的信息。这可能吗,还是我必须找另一个命令来查找每个提交添加/删除的行数?


为什么你要在版本控制下保留生成的文件?!我认为这才是实际的问题。 - Biffen
让我们说这是另一个团队的另一个问题,我没有权力处理 :) - Cyril Gandon
通过运行 grep -vF '.generated.' 命令,可以吗? - Biffen
git log 命令不会枚举所有文件。你只能得到在一个提交中修改(添加或删除)了多少个文件。 - Cyril Gandon
1个回答

27

如何做到这一点的“秘密”被称为:


pathspec magic


您可以简单地使用此格式(在git版本> 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
使用这种语法,您可以“告诉”git要排除哪些文件扩展名。在您的情况下,它是*.generated.*


来自文档:

http://git-scm.com/docs/gitglossary.html

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

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

magic signature由既不是字母数字,也不属于glob、regex特殊字符或冒号的ASCII符号组成。如果模式以不属于“magic signature”符号集且不是冒号的字符开头,则可以省略终止magic signature的可选冒号。

在长格式中,前导冒号:后跟一个左括号(,一个逗号分隔的零个或多个magic words,以及一个右括号),其余部分是与路径匹配的模式。


注意

在旧版本中(该功能于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


同意,这就是为什么我加上了文档的原因 :-). 这不是一个简单的问题,你需要相当熟悉 Git 才能回答它。 :-) - CodeWizard
我已经修好了,并且现在它的运作非常良好。不知道为什么之前失败了,但还是谢谢你! - Cyril Gandon
1
我知道,那是引用符!在Windows上,你需要双引号 :) - Cyril Gandon
3
@codeWizard的评论中有一个拼写错误:git log -p中的-p代表patch,在您的示例中不是必需的,也不符合原帖作者的需要。它会为每个列出的提交显示详细的差异。 - LeGEC
1
谢谢!另外,很好知道你可以添加多个,例如:git log -p v3.5.0~..master -- . ':(exclude)yarn.lock' ':(exclude)README.md' - justin
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接