134

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

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

一切正常,除了 add all 命令是:

git add .

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

我将 Visual Studio 2010 与标准安装的 git 一起使用(不是 Git 扩展)

4

4 回答 4

164

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

git 'command' --verbose

或者

git 'command' -v

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

也很有用:

git 'command' --dry-run 
于 2011-09-06T11:49:07.660 回答
55

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

export GIT_TRACE=1
git add *.txt

You can also use these on the same line:

GIT_TRACE=1 git add *.txt

Output:

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
于 2019-04-09T19:08:25.613 回答
5

您可以使用git add -i来获取 的交互式版本git add,尽管这并不完全是您所追求的。最简单的做法是,在git added 之后,使用它git status来查看已上演或未上演的内容。

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

于 2011-09-06T11:47:40.877 回答
0

Not only Git has a GIT_TRACE2 flag (since Git 2.25, Q2 2019), but now that trace can even tell you what parent process called Git.

With Git 2.34 (Q4 2021), trace2 logs learned to show parent process name to see in what context Git was invoked.

That is helpful when Git is called by an IDE.

See commit 2f732bf, commit b7e6a41 (21 Jul 2021) by Emily Shaffer (nasamuffin).
(Merged by Junio C Hamano -- gitster -- in commit 6f64eea, 24 Aug 2021)

tr2: log parent process name

Signed-off-by: Emily Shaffer

It can be useful to tell who invoked Git - was it invoked manually by a user via CLI or script? By an IDE? In some cases - like 'repo' tool - we can influence the source code and set the GIT_TRACE2_PARENT_SID environment variable from the caller process.
In 'repo''s case, that parent SID is manipulated to include the string "repo", which means we can positively identify when Git was invoked by 'repo' tool.
However, identifying parents that way requires both that we know which tools invoke Git and that we have the ability to modify the source code of those tools.
It cannot scale to keep up with the various IDEs and wrappers which use Git, most of which we don't know about.
Learning which tools and wrappers invoke Git, and how, would give us insight to decide where to improve Git's usability and performance.

Unfortunately, there's no cross-platform reliable way to gather the name of the parent process.
If procfs is present, we can use that; otherwise we will need to discover the name another way.
However, the process ID should be sufficient to look up the process name on most platforms, so that code may be shareable.

Git for Windows gathers similar information and logs it as a "data_json" event.
However, since "data_json" has a variable format, it is difficult to parse effectively in some languages; instead, let's pursue a dedicated "cmd_ancestry" event to record information about the ancestry of the current process and a consistent, parseable way.

Git for Windows also gathers information about more than one generation of parent.
In Linux further ancestry info can be gathered with procfs, but it's unwieldy to do so.
In the interest of later moving Git for Windows ancestry logging to the 'cmd_ancestry' event, and in the interest of later adding more ancestry to the Linux implementation - or of adding this functionality to other platforms which have an easier time walking the process tree - let's make 'cmd_ancestry' accept an array of parentage.

technical/api-trace2 now includes in its man page:

"cmd_ancestry"

This event contains the text command name for the parent (and earlier generations of parents) of the current process, in an array ordered from nearest parent to furthest great-grandparent. It may not be implemented on all platforms.

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

With Git 2.34 (Q4 2021), the tracing of process ancestry information has been enhanced.

See commit 2d3491b, commit 326460a, commit 6eccfc3, commit 48f6871, commit f2cc888, commit 7d9c80f (27 Aug 2021) by Ævar Arnfjörð Bjarmason (avar).
(Merged by Junio C Hamano -- gitster -- in commit 76f5fdc, 20 Sep 2021)

tr2: tr2: log N parent process names on Linux

Signed-off-by: Ævar Arnfjörð Bjarmason
Acked-by: Taylor Blau

In 2f732bf ("tr2: log parent process name", 2021-07-21, Git v2.34.0 -- merge we started logging parent process names, but only logged all parents on Windows. on Linux only the name of the immediate parent process was logged.

Extend the functionality added there to also log full parent chain on Linux.

于 2021-08-28T15:44:04.543 回答