English ▾ 主题 ▾ 最新版本 ▾ git-annotate 上次更新于 2.41.0

名称

git-annotate - 使用提交信息标注文件行

概要

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> 可以采用以下形式之一

  • 数字

    如果 <start><end> 是数字,它指定一个绝对行号(行从 1 开始计数)。

  • /regex/

    此形式将使用与给定 POSIX 正则表达式匹配的第一行。如果 <start> 是正则表达式,它将从上一个 -L 范围的末尾开始搜索(如果有),否则从文件开头开始搜索。如果 <start>^/regex/,它将从文件开头开始搜索。如果 <end> 是正则表达式,它将从 <start> 给定的行开始搜索。

  • +offset 或 -offset

    这仅对 <end> 有效,并将指定 <start> 给定的行之前或之后的行数。

如果在 <start><end> 的位置给出 :<funcname>,则它是一个正则表达式,表示从与 <funcname> 匹配的第一个 funcname 行到下一个 funcname 行的范围。:<funcname> 从上一个 -L 范围的末尾开始搜索(如果有),否则从文件开头开始搜索。^:<funcname> 从文件开头开始搜索。函数名称的确定方式与 git diff 计算补丁块标头的方式相同(请参阅 gitattributes[5] 中的定义自定义块标头)。

-l

显示长版本号(默认为关闭)。

-t

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

-S <revs-file>

使用来自 revs-file 的修订版本,而不是调用 git-rev-list[1]

--reverse <rev>..<rev>

向前而不是向后遍历历史记录。与显示行出现的修订版本不同,此选项显示行存在的最后一个修订版本。这需要一个修订版本范围,如 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>

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

--date <format>

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

--[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 配置选项,则那些被忽略的提交触及但我们无法将其归因于另一个修订版本的行将标记为 *

--ignore-revs-file <file>

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

--color-lines

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

--color-by-age

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

-h

显示帮助信息。

参见

GIT

git[1] 套件的一部分

scroll-to-top