【问题标题】:Git log - How to filter (exclude) files from appearing in `git log`? (git pathspec magic)Git log - 如何过滤(排除)文件出现在`git log`中? (git pathspec 魔法)
【发布时间】:2016-06-16 21:11:21
【问题描述】:

我需要使用git-log 命令来创建一个报告,其中包含两个日期之间平均通过提交添加和删除的行数。

目前我使用的命令是:

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

但是我需要在这个过程中过滤一些文件。 这些文件是自动生成的,我们不想看到它们的影响。他们很容易被他们的名字认出来*.generated.*

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

The doc is big,我已经读了好几遍了,但是我没有看到任何关于根据文件名过滤文件的内容。这可能吗,还是我必须找到另一个命令来查找提交添加/删除的行数?

【问题讨论】:

  • 为什么还要将生成的文件置于版本控制之下?!我会说这是真正的问题。
  • 假设这是我没有权力的另一个团队的另一个问题:)
  • 会通过grep -vF '.generated.' 运行结果吗?
  • git log 命令不会枚举所有文件。您只需在一次提交中获得多少文件被修改(添加或删除)

标签: git git-commit git-log


【解决方案1】:

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


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、正则表达式特殊字符也不是冒号的 ASCII 符号组成。如果模式以不属于“魔术签名”符号集且不是冒号的字符开头,则可以省略终止 magic signature 的可选冒号。

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


注意

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

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


演示:

git log --stat

(检查最后一次提交)

与文件管理器相同的 runt - 您可以看到结果中只有一个文件而不是 2 个

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

【讨论】:

  • 这在gitglossary 手册页中有记录(显然其他地方几乎没有)。
  • 同意,这就是我添加它的原因 + doc :-)。这不是一个简单的问题,您需要非常了解 git 才能回答它。 :-)
  • 我知道,这是报价单!在 Windows 上你需要双引号 :)
  • @codeWizard :您的评论中的错字 git log -p-p 代表 patch,在您的示例中不是必需的,也不是 OP 的需要。它显示每个列出的提交的详细差异。
  • 谢谢!此外,很高兴知道您可以添加多个,例如git log -p v3.5.0~..master -- . ':(exclude)yarn.lock' ':(exclude)README.md'
猜你喜欢
  • 2014-10-11
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
  • 2016-02-18
  • 1970-01-01
  • 2014-11-04
相关资源
最近更新 更多