Skip to content

git-annotate

使用提交信息标注文件行

概要

bash
git annotate [<options>] [<rev-opts>] [<rev>] [--] <file>

描述

使用引入该行的提交信息标注给定文件中的每一行。可选择从给定修订版本开始标注。

此命令与 git-blame(1) 之间的唯一区别是它们使用略有不同的输出格式,并且此命令仅存在是为了向后兼容以支持现有脚本,并为来自其他 SCM 系统的人提供更熟悉的命令名称。

选项

-b

为边界提交显示空白 SHA-1。这也可以通过 blame.blankBoundary 配置选项控制。

--root

不将根提交视为边界。这也可以通过 blame.showRoot 配置选项控制。

--show-stats

在 blame 输出末尾包含额外的统计信息。

-L <start>,<end>, -L :<funcname>

仅标注由 <start>,<end> 或函数名正则表达式 <funcname> 给出的行范围。可以多次指定。允许重叠范围。 <start><end> 是可选的。-L <start>-L <start>,<start> 跨越到文件末尾。-L ,<end> 从文件开头跨越到 <end><start><end> 可以采用以下形式之一:

  • <number>:如果 <start><end> 是数字,它指定绝对行号(行从 1 开始计数)。
  • /<regex>/:此形式将使用与给定 POSIX <regex> 匹配的第一行。
  • +<offset>-<offset>:这仅对 <end> 有效,并将指定在 <start> 给定的行之前或之后的行数。

-l

显示长修订版本(默认:关闭)。

-t

显示原始时间戳(默认:关闭)。

-S <revs-file>

使用 <revs-file> 中的修订版本而不是调用 git-rev-list(1)

--reverse <start>..<end>

向前遍历历史而不是向后。不是显示行出现的修订版本,而是显示行最后存在的修订版本。这需要像 <start>..<end> 这样的修订版本范围,其中要 blame 的路径存在于 <start> 中。为方便起见,git blame --reverse <start> 被视为 git blame --reverse <start>..HEAD

--first-parent

在看到合并提交时仅跟随第一个父提交。此选项可用于确定行何时被引入特定集成分支,而不是何时被引入整体历史。

-p, --porcelain

以机器消费的格式显示。

--line-porcelain

显示 porcelain 格式,但为每一行输出提交信息,而不仅仅是第一次引用提交时。隐含 --porcelain

--incremental

以机器消费的格式增量显示结果。

--encoding=<encoding>

指定用于输出作者名称和提交摘要的编码。将其设置为 none 会使 blame 输出未转换的数据。有关更多信息,请参阅 git-log(1) 手册页中关于编码的讨论。

--contents <file>

使用 <file> 的内容进行标注,如果指定了 <rev> 则从 <rev> 开始,否则从 HEAD 开始。你可以指定 - 使命令从标准输入读取文件内容。

--date <format>

指定用于输出日期的格式。如果未提供 --date,则使用 blame.date 配置变量的值。如果也未设置 blame.date 配置变量,则使用 iso 格式。有关支持的值,请参阅 git-log(1)--date 选项的讨论。

--progress, --no-progress

即使未连接到终端,也在标准错误流上启用进度报告。默认情况下,仅在连接时报告进度状态。你不能将 --progress--porcelain--incremental 一起使用。

-M[<num>]

检测文件内移动或复制的行。当提交移动或复制行块时(例如原始文件有 A 然后 B,提交将其更改为 B 然后 A),传统的 blame 算法只注意到移动的一半,并且通常将向上移动的行(即 B)归咎于父提交,将向下移动的行(即 A)归咎于子提交。使用此选项,通过运行额外的检查,两组行都归咎于父提交。 <num> 是可选的,但它是 Git 必须检测为在文件内移动/复制的字母数字字符数量的下限,以便将这些行与父提交关联。默认值为 20。

-C[<num>]

除了 -M 之外,还检测在同一提交中修改的其他文件中移动或复制的行。当你重组程序并在文件之间移动代码时,这很有用。当此选项给出两次时,命令还会在创建文件的提交中查找从其他文件复制的内容。当此选项给出三次时,命令还会在任何提交中查找从其他文件复制的内容。 <num> 是可选的,但它是 Git 必须检测为在文件之间移动/复制的字母数字字符数量的下限,以便将这些行与父提交关联。默认值为 40。如果给出多个 -C 选项,则最后一个 -C<num> 参数将生效。

--ignore-rev <rev>

在分配 blame 时忽略修订版本所做的更改,就像更改从未发生一样。被忽略提交更改或添加的行将归咎于更改该行或附近行的先前提交。此选项可多次指定以忽略多个修订版本。如果设置了 blame.markIgnoredLines 配置选项,则被忽略提交更改并归因于另一个提交的行将在 blame 输出中标记为 ?。如果设置了 blame.markUnblamableLines 配置选项,则被忽略提交触及但我们无法归因于另一个修订版本的行将标记为 *。在 porcelain 模式下,我们分别在新行上打印 ignoredunblamable

--ignore-revs-file <file>

忽略 <file> 中列出的修订版本,其格式必须与 fsck.skipList 相同。此选项可重复,这些文件将在使用 blame.ignoreRevsFile 配置选项指定的任何文件之后处理。空文件名 "" 将清除先前处理文件中的修订版本列表。

--color-lines

如果行注释来自与前一行相同的提交,则在默认格式中以不同颜色显示。这使得更容易区分不同提交引入的代码块。颜色默认为青色,可以使用 color.blame.repeatedLines 配置选项进行调整。

--color-by-age

在默认格式中根据行的存在时间对行注释着色。color.blame.highlightRecent 配置选项控制每个年龄范围使用什么颜色。

-h

显示帮助消息。

另请参阅

git-blame(1)

Git

git(1) 套件的一部分

基于 CC BY-NC-SA 3.0 许可发布