不仅 Git 有 GIT_TRACE2 标志(since Git 2.25,2019 年第二季度),而且现在该跟踪甚至可以告诉您哪个父进程称为 Git。
在 Git 2.34(2021 年第四季度)中,trace2 日志学会了显示父进程名称,以查看在什么上下文中调用了 Git。
这在 IDE 调用 Git 时很有帮助。
见commit 2f732bf,commit b7e6a41(2021 年 7 月 21 日)Emily Shaffer (nasamuffin)。
(由 Junio C Hamano -- gitster -- 合并到 commit 6f64eea,2021 年 8 月 24 日)
tr2: 记录父进程名
签字人:Emily Shaffer
告诉谁调用了 Git 很有用——它是由用户通过 CLI 还是脚本手动调用的?通过 IDE?在某些情况下——比如“repo”工具——我们可以影响源代码并从调用者进程中设置GIT_TRACE2_PARENT_SID环境变量。
在“repo”的情况下,父 SID 被操纵以包含字符串“repo”,这意味着我们可以肯定地识别 Git 何时被“repo”工具调用。
但是,以这种方式识别父级需要我们知道哪些工具调用了 Git,并且我们有能力修改这些工具的源代码。
它无法扩展以跟上使用 Git 的各种 IDE 和包装器,其中大部分我们都不知道。
了解哪些工具和包装器调用 Git 以及如何调用 Git,可以让我们深入了解在哪些方面改进 Git 的可用性和性能。
很遗憾,没有可靠的跨平台方法来收集父进程的名称。
如果存在procfs,我们可以使用它;否则我们将需要以另一种方式发现该名称。
但是,进程 ID 应该足以在大多数平台上查找进程名称,以便代码可以共享。
Windows 版 Git 收集类似信息并将其记录为 "data_json" 事件。
但是,由于"data_json"具有可变格式,因此在某些语言中难以有效解析;相反,让我们追求一个专门的"cmd_ancestry" 事件来记录有关当前进程的祖先的信息以及一种一致的、可解析的方式。
Windows 版 Git 还收集有关不止一代父代的信息。
在 Linux 中,可以使用procfs 收集更多的祖先信息,但这样做很不方便。
为了以后将 Git for Windows 祖先日志记录移动到 'cmd_ancestry' 事件,并为了以后向 Linux 实现添加更多祖先 - 或将此功能添加到其他平台,以便更轻松地完成该过程树 - 让我们让 'cmd_ancestry' 接受一个父系数组。
technical/api-trace2 现在包含在其man page 中:
"cmd_ancestry"
此事件包含父级(及更早版本)的文本命令名称
当前进程的父代),在一个数组中排序自
最近的父母到最远的曾祖父母。可能无法实施
在所有平台上。
------------
{
"event":"cmd_ancestry",
...
"ancestry":["bash","tmux: server","systemd"]
}
------------
在 Git 2.34(2021 年第四季度)中,进程祖先信息的跟踪得到了增强。
见commit 2d3491b、commit 326460a、commit 6eccfc3、commit 48f6871、commit f2cc888、commit 7d9c80f(2021 年 8 月 27 日)Ævar Arnfjörð Bjarmason (avar)。
(由Junio C Hamano -- gitster -- 合并commit 76f5fdc,2021 年 9 月 20 日)
tr2:tr2:log N Linux 上的父进程名称
签字人:Ævar Arnfjörð Bjarmason
签字人:Taylor Blau
在2f732bf("tr2: 记录父进程名", 2021-07-21, Git v2.34.0 -- merge我们开始
记录父进程名称,但只记录 Windows 上的所有父进程。
在 Linux 上,只记录了直接父进程的名称。
扩展那里添加的功能,同时记录完整的父链
Linux。