如何调试git / git-shell相关问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何调试git / git-shell相关问题?相关的知识,希望对你有一定的参考价值。

我如何获得有关git / git-shell的一些调试信息?

我有一个问题,user1可以毫无问题地克隆存储库,而user2只能克隆一个空存储库。我设置了GIT_TRACE=1,但没有任何有用的东西被告知。

最后,经过长时间的反复试验,结果证明这是文件的权限问题。适当的错误消息可能会使此问题短路。

答案

对于更详细的输出使用如下:

GIT_CURL_VERBOSE=1 GIT_TRACE=1 git pull origin master

另一答案

Debugging

Git有一套相当完整的跟踪嵌入,您可以使用它来调试您的git问题。

要打开它们,您可以定义以下变量:

  • GIT_TRACE为一般痕迹,
  • GIT_TRACE_PACK_ACCESS用于跟踪packfile访问,
  • GIT_TRACE_PACKET用于网络操作的数据包级跟踪,
  • GIT_TRACE_PERFORMANCE用于记录性能数据,
  • GIT_TRACE_SETUP有关发现与其交互的存储库和环境的信息,
  • GIT_MERGE_VERBOSITY用于调试递归合并策略(值:0-5),
  • GIT_CURL_VERBOSE用于记录所有卷曲消息(相当于curl -v),
  • GIT_TRACE_SHALLOW用于调试浅层存储库的获取/克隆。

可能的值包括:

  • true12写信给stderr,
  • /开头的跟踪输出到指定文件的绝对路径。

有关更多详细信息,请参阅:Git Internals - Environment Variables


SSH

对于SSH问题,请尝试以下命令:

echo 'ssh -vvv "$*"' > ssh && chmod +x ssh
GIT_SSH="$PWD/ssh" git pull origin master

或使用ssh验证您的凭据,例如

ssh -vvvT git@github.com

或通过HTTPS端口:

ssh -vvvT -p 443 git@ssh.github.com

注意:减少-v的数量以减少详细程度。


Examples

$ GIT_TRACE=1 git status
20:11:39.565701 git.c:350               trace: built-in: git 'status'

$ GIT_TRACE_PERFORMANCE=$PWD/gc.log git gc
Counting objects: 143760, done.
...
$ head gc.log 
20:12:37.214410 trace.c:420             performance: 0.090286000 s: git command: 'git' 'pack-refs' '--all' '--prune'
20:12:37.378101 trace.c:420             performance: 0.156971000 s: git command: 'git' 'reflog' 'expire' '--all'
...

$ GIT_TRACE_PACKET=true git pull origin master
20:16:53.062183 pkt-line.c:80           packet:        fetch< 93eb028c6b2f8b1d694d1173a4ddf32b48e371ce HEADmulti_ack thin-pack side-band side-band-64k ofs-delta shallow no-progress include-tag multi_ack_detailed symref=HEAD:refs/heads/master agent=git/2:2.6.5~update-ref-initial-update-1494-g76b680d
...
另一答案

试试这个:

GIT_TRACE=1 git pull origin master
另一答案

如果是通过SSH,您可以使用以下内容:

对于调试级别2和3的类型-vv或-vvv的更高调试级别:

# Debug level 1
GIT_SSH_COMMAND="ssh -v" git clone <repositoryurl>

# Debug level 2
GIT_SSH_COMMAND="ssh -vv" git clone <repositoryurl>

# Debug level 3
GIT_SSH_COMMAND="ssh -vvv" git clone <repositoryurl>

这主要用于处理服务器的公钥和私钥问题。您可以将此命令用于任何git命令,而不仅仅是'git clone'。

另一答案

Git 2.9.x / 2.10(2016年第3季度)增加了另一个调试选项:GIT_TRACE_CURL

请参阅commit 73e57aa撰写的commit 74c682dElia Pinto (devzero2000)(2016年5月23日)。 帮助:Torsten Bögershausen (tboegi),拉姆齐琼斯,Junio C Hamano (gitster)Eric Sunshine (sunshineco)Jeff King (peff)。 (由Junio C Hamano -- gitster --合并于commit 2f84df2,2016年7月6日)

http.c:实现GIT_TRACE_CURL环境变量

实现GIT_TRACE_CURL环境变量以允许更大程度的GIT_CURL_VERBOSE细节,特别是完整的传输头和交换的所有数据有效负载。 如果特定情况需要更彻底的调试分析,这可能会有用。

The documentation将声明:

GIT_TRACE_CURL

启用git传输协议的所有传入和传出数据(包括描述性信息)的卷曲完整跟踪转储。 这类似于在命令行上执行curl --trace-ascii

此选项会覆盖设置GIT_CURL_VERBOSE环境变量。


您可以在this answer中看到新选项,但也可以在Git 2.11(2016年第4季度)测试中看到:

参见commit 14e2411commit 81590bfcommit 4527aa1commit 4eee6c6Elia Pinto (devzero2000)(2016年9月7日)。 (由Junio C Hamano -- gitster --合并于commit 930b67e,2016年9月12日)

使用新的GIT_TRACE_CURL环境变量而不是弃用的GIT_CURL_VERBOSE

GIT_TRACE_CURL=true git clone --quiet $HTTPD_URL/smart/repo.git
另一答案

您是否尝试在克隆时添加详细(-v)运算符?

git clone -v git://git.kernel.org/pub/scm/.../linux-2.6 my2.6

另一答案

Git 2.22(2019年第二季度)由Jeff Hostetler介绍trace2commit ee4512e

trace2:创建新的组合跟踪设施

为git创建一个新的统一跟踪工具。 最终的目的是用一组统一的trace_printf*例程替换当前的trace_performance*git_trace2*例程。

除了通常的printf风格的API之外,trace2还提供具有固定字段的高级事件动词,允许编写结构化数据。 这使得外部工具的后处理和分析更容易。

Trace2定义了3个输出目标。 这些是使用环境变量“GIT_TR2”,“GIT_TR2_PERF”和“GIT_TR2_EVENT”设置的。 这些可以设置为“1”或绝对路径名(就像当前的GIT_TRACE)。

注意:关于环境变量名称,请始终使用GIT_TRACExxx,而不是GIT_TRxxx。 所以实际上GIT_TRACE2GIT_TRACE2_PERFGIT_TRACE2_EVENT。 请参阅下面提到的Git 2.22重命名。

接下来是这个新的跟踪功能的初始工作,旧的环境变量名称:

  • GIT_TR2旨在替代GIT_TRACE和日志命令摘要数据。
  • GIT_TR2_PERF旨在替代GIT_TRACE_PERFORMANCE。 它使用列扩展输出,包括命令进程,线程,repo,绝对和相对经过时间。它报告子进程启动/停止,线程启动/停止和每线程函数嵌套的事件。
  • GIT_TR2_EVENT是一种新的结构化格式。它将事件数据写为一系列JSON记录。

调用trace2函数会记录到启用的3个输出目标中的任何一个,而无需调用不同的trace_printf*trace_performance*例程。

commit a4d3a28Josh Steadmon (steadmon)(2019年3月21日)。 (由Junio C Hamano -- gitster --合并于commit 1b403

以上是关于如何调试git / git-shell相关问题?的主要内容,如果未能解决你的问题,请参考以下文章

git-shell - 新的存储库

linux搭建git服务器

git相关面试题

git相关面试题

搭建本地仓库

centos git 服务器搭建