Git Add 有详细的开关吗

我正在把我所有的私人物品转移到 Github。我所做的决定之一是只使用控制台,因为这意味着如果我需要更换电脑等,工具占用更小。

我是一个控制台应用程序的大用户,作为 Git 的新手,我决定购买 Tekpub 的 MasteringGit 系列,因为它向您展示了如何将 Git bash 集成为一个工具栏。

除了 add all 命令之外,一切都运行正常:

git add .

看起来好像起作用了,但是没有任何迹象表明它起作用了。是否有一个详细的开关(我认为应该这样称呼它)来说明在命令启动后跟踪了哪些文件?

我使用的是 VisualStudio2010和 Git 的标准安装(不是 Git 扩展)

170530 次浏览

您可以使用 git add -i来获得交互式版本的 git add,尽管这并不是您想要的。最简单的方法是,在使用 git added 之后,使用 git status查看是否进行了分段。

除非是第一次提交,否则不推荐使用 git add .。通常最好显式列出要暂存的文件,这样就不会意外地开始跟踪不需要的文件(临时文件等)。

对于 一些 git 命令,可以指定 --verbose,

git 'command' --verbose

或者

git 'command' -v

确保切换是在实际的 git 命令之后。否则-它不会工作!

同样有用的是:

git 'command' --dry-run

我正在用 git 调试一个问题,需要一些非常详细的输出来找出问题所在。最后,我设定了 GIT_TRACE的环境变量:

export GIT_TRACE=1
git add *.txt

你也可以把它们用在同一行上:

GIT_TRACE=1 git add *.txt

产出:

14:06:05.508517 git.c:415               trace: built-in: git add test.txt test2.txt
14:06:05.544890 git.c:415               trace: built-in: git config --get oh-my-zsh.hide-dirty

不仅 GIT 有一个 GIT _ TRACE2标志(从 Git 2.25开始,Q22019) ,而且现在该跟踪甚至可以告诉您父进程称为 GIT 的是什么。

使用 Git 2.34(Q42021) ,trace2日志学会了显示父进程名,以查看在什么上下文中调用了 Git。

这在 IDE 调用 Git 时非常有用。

承诺2f732bf犯下 B7e6a41(2021年7月21日) by 艾米丽 · 谢弗(nasamuffin)
(由 朱尼奥 · C · 哈马诺 gitster合并于 犯罪,2021年8月24日)

tr2 : 日志父进程名

由 Emily Shaffer 签名

告诉谁调用了 Git 是很有用的——它是由用户通过 CLI 或脚本手动调用的吗?被 IDE?在某些情况下,比如“ repo”工具,我们可以影响源代码,并从调用者进程中设置 GIT_TRACE2_PARENT_SID环境变量。
在‘ repo’的情况下,操纵父 SID 以包含字符串“ repo”,这意味着我们可以确定何时‘ repo’工具调用了 Git。
然而,以这种方式识别父类需要我们知道哪些工具调用 Git,并且我们有能力修改这些工具的源代码。
它无法扩展以跟上使用 Git 的各种 IDE 和包装器(其中大多数我们都不知道)。
了解哪些工具和包装器调用 Git,以及如何调用,将让我们深入了解如何改进 Git 的可用性和性能。

不幸的是,没有跨平台可靠的方法来收集父进程的名称。
如果存在 procfs,我们可以使用它; 否则我们将需要通过其他方式来发现名称。
但是,进程 ID 应该足以在大多数平台上查找进程名称,以便代码可以共享。

Git for Windows 收集类似的信息并将其记录为 "data_json"事件。
然而,由于 "data_json"具有可变的格式,所以在某些语言中很难进行有效的解析; 相反,让我们使用一个专用的 "cmd_ancestry"事件来记录当前流程的祖先信息以及一种一致的、可解析的方法。

Git for Windows 还收集关于多个父代的信息。
在 Linux 中,进一步的祖先信息可以通过 procfs收集,但是这样做很麻烦。
为了以后将 Git for Windows 的祖先日志移动到‘ cmd_ancestry’事件,为了以后将更多的祖先添加到 Linux 实现中——或者为了将这个功能添加到其他平台,这些平台更容易遍历进程树——让我们让‘ cmd_ancestry’接受一个父系数组。

technical/api-trace2现在在其 手册中包括:

"cmd_ancestry"

此事件包含父命令的文本命令名(以及早期命令名) 父代)的当前进程,以从 曾祖父母 在所有平台上。

{
"event":"cmd_ancestry",
...
"ancestry":["bash","tmux: server","systemd"]
}

使用 Git 2.34(Q42021) ,进程祖先信息的跟踪得到了增强。

提交2d3491b提交326460a犯罪提交48f6871提交 f2cc888犯下7d9c80f(2021年8月27日) by 埃瓦尔 · 阿恩菲尔 · 比亚马森(avar)
(由 朱尼奥 · C · 哈马诺 gitster提交76f5fdc合并,2021年9月20日)

Linux 上的 tr2 : tr2: log N父进程名

埃瓦尔 · 阿恩夫约尔 · 比亚马森
演员: Taylor Blau

2f732bf(“ tr2: log father process name”,2021-07-21,Git v2.34.0—— 合并中,我们开始了 记录父进程名称,但只记录 Windows 上的所有父进程。 在 Linux 上,只记录了直接父进程的名称。

扩展添加到其中的功能,也将完整的父链记录到 Linux.


使用 Git 2.38(Q32022) ,详细跟踪输出得到了增强,以包括关于 配置变量的输出。

犯下35ae40e提交050d0dc(2022年8月12日) by 腾龙(dyrone)
(由 朱尼奥 · C · 哈马诺 gitster10ccb50合并,2022年8月29日)

api-trace2.txt : 打印配置键-值对

由滕龙签名

它支持通过设置“ GIT_TRACE2_CONFIG_PARAMS”环境变量和“ trace2.configparam”配置将“有趣的”配置键值对打印到 tr2日志。

technical/api-trace2现在在其 手册中包括:

Config (def param) Events

将“有趣的”配置值转储到 trace2日志。

我们可以选择发出配置事件,请参见 git config中的 trace2.configparams以说明如何启用 它。

$ git config color.ui auto

然后,将配置 color.ui标记为“感兴趣的”配置
返回文章页面

$ export GIT_TRACE2_PERF_BRIEF=1
$ export GIT_TRACE2_PERF=~/log.perf
$ export GIT_TRACE2_CONFIG_PARAMS=color.ui
$ git version
...
$ cat ~/log.perf
d0 | main                     | version      |     |           |           |              | ...
d0 | main                     | start        |     |  0.001642 |           |              | /usr/local/bin/git version
d0 | main                     | cmd_name     |     |           |           |              | version (version)
d0 | main                     | def_param    |     |           |           |              | color.ui:auto
d0 | main                     | data         | r0  |  0.002100 |  0.002100 | fsync        | fsync/writeout-only:0
d0 | main                     | data         | r0  |  0.002126 |  0.002126 | fsync        | fsync/hardware-flush:0
d0 | main                     | exit         |     |  0.002142 |           |              | code:0
d0 | main                     | atexit       |     |  0.002161 |           |              | code:0

您可以将其与其他运行时 trace2事件组合起来:

tr2 : 除了键值对外,还无条件显示作用域

由滕龙签名

当我们指定 GIT_TRACE2_CONFIG_PARAMStrace2.configparams时,trace2将打印“有趣的”配置值以记录。
有时,当在多个范围文件中设置一个配置时,下面的输出类似于(这里省略了不相关的字段,如“ ...”) :

...`|` `def_param`    `|`  ...
`|` core.multipackindex:false ...`|` `def_param`    `|`  ...
`|` core.multipackindex:false ...`|` `def_param`    `|`  ...
`|` core.multipackindex:false

如日志所示,甚至不同作用域中的每个配置都被转储,但是我们不知道它来自哪个 范围
因此,最好也添加范围名称,以使它们更易于识别。

作为痕迹组合的一个例子:

例如,执行时:

$ GIT_TRACE2_PERF=1 \
GIT_TRACE2_CONFIG_PARAMS=core.multipackIndex \
git rev-list --test-bitmap HEAD"

下面是输出(这里省略了不相关的字段“ ...”) :

Format normal:
... git.c:461 ... def_param scope:system core.multipackindex=false
... git.c:461 ... def_param scope:global core.multipackindex=false
... git.c:461 ... def_param scope:local core.multipackindex=false




Format perf:


... | def_param    | ... | scope:system | core.multipackindex:false
... | def_param    | ... | scope:global | core.multipackindex:false
... | def_param    | ... | scope:local  | core.multipackindex:false


Format event:


{"event":"def_param", ... ,"scope":"system","param":"core.multipackindex","value":"false"}
{"event":"def_param", ... ,"scope":"global","param":"core.multipackindex","value":"false"}
{"event":"def_param", ... ,"scope":"local","param":"core.multipackindex","value":"false"}