【问题标题】:Does Git Add have a verbose switchGit Add 是否有详细的开关
【发布时间】:2011-11-11 06:32:09
【问题描述】:

我正在将我所有的私人公共回购转移到 github。我做出的一个决定是只使用控制台,因为如果我需要更换 PC 等,这意味着更小的工具占用空间。

我将成为控制台应用程序的忠实用户,并且是 git 新手,我决定购买 Tekpub 的 Mastering Git 系列,因为它向您展示了如何将 git bash 集成为工具栏。

一切正常,除了添加所有命令:

git add .

它似乎在工作,但我没有任何迹象表明它是否工作。是否有一个详细的开关(我认为这就是它的名称)可以说明在命令启动后跟踪了哪些文件?

我正在使用 Visual Studio 2010 和标准安装的 git(不是 Git 扩展)

【问题讨论】:

  • (是的,这是一个老问题;我看到它是因为它刚刚被编辑过。)git add --help 显示了git add 命令的文档,包括--verbose 选项。
  • 一个老问题的新想法 - 我更喜欢 git add -A 而不是 git add . 我没有查找差异,但发现我的首选命令更有可能添加所有更改或新文件.

标签: git github git-bash


【解决方案1】:

对于一些 git-commands,你可以指定--verbose

git 'command' --verbose

git 'command' -v

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

也很有用:

git 'command' --dry-run 

【讨论】:

  • git 1.7.9 (cygwin) 告诉我 --verbose 是一个未知选项
  • @RTruelove:您可能使用的是git --verbose add 而不是git add --verbose
【解决方案2】:

不仅 Git 有 GIT_TRACE2 标志(since Git 2.25,2019 年第二季度),而且现在该跟踪甚至可以告诉您哪个父进程称为 Git。

在 Git 2.34(2021 年第四季度)中,trace2 日志学会了显示父进程名称,以查看在什么上下文中调用了 Git。

这在 IDE 调用 Git 时很有帮助。

commit 2f732bfcommit 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 2d3491bcommit 326460acommit 6eccfc3commit 48f6871commit f2cc888commit 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。

【讨论】:

    【解决方案3】:

    我正在调试 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_TRACE_CURL=1 来诊断连接问题。仅供参考。
    【解决方案4】:

    您可以使用git add -i 获得git add 的交互式版本,尽管这并不是您所追求的。最简单的做法是,在拥有git added 之后,使用git status 来查看是否已上演。

    不建议使用git add .,除非这是您的第一次提交。通常最好明确列出您要暂存的文件,这样您就不会意外开始跟踪不需要的文件(临时文件等)。

    【讨论】:

    • 使用.gitconfig定义异常即可,无需手动跟踪。
    猜你喜欢
    • 2011-07-16
    • 2018-03-31
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多