如何获得有关git / git-shell的调试信息?
我遇到了问题,user1
可以毫无问题地克隆存储库,而user2
只能克隆一个空存储库。我设置了GIT_TRACE=1
,但没有任何有用的信息。
最后,经过长时间的试验和错误,结果证明这是文件的权限问题。适当的错误消息可能会使此问题短路。
答案 0 :(得分:165)
对于更详细的输出,请使用以下内容:
GIT_CURL_VERBOSE=1 GIT_TRACE=1 git pull origin master
答案 1 :(得分:52)
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消息(相当于curl -v
),GIT_TRACE_SHALLOW
用于调试浅层存储库的获取/克隆。可能的值包括:
true
,1
或2
写给stderr,/
开头的跟踪输出到指定文件的绝对路径。有关详细信息,请参阅:Git Internals - Environment Variables
对于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
的数量以降低详细程度。
$ 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 HEAD\0multi_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
...
答案 2 :(得分:41)
试试这个:
GIT_TRACE=1 git pull origin master
答案 3 :(得分:35)
如果是通过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'。
答案 4 :(得分:17)
Git 2.9.x / 2。10(2016年第3季度)增加了另一个调试选项:GIT_TRACE_CURL
。
commit 73e57aa见commit 74c682d,Elia 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
,特别是完整的传输标头和所有交换的数据有效负载。
如果特定情况需要更彻底的调试分析,这可能会有用。
GIT_TRACE_CURL
启用git传输协议的所有传入和传出数据(包括描述性信息)的卷曲完整跟踪转储。
这类似于在命令行上执行curl --trace-ascii
。此选项会覆盖设置
GIT_CURL_VERBOSE
环境变量。
您可以在this answer中看到这个新选项,也可以在Git 2.11(2016年第4季度)测试中看到:
commit 14e2411见commit 81590bf,commit 4527aa1,commit 4eee6c6,Elia 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
答案 5 :(得分:4)
您是否尝试在克隆时添加详细(-v
)运算符?
git clone -v git://git.kernel.org/pub/scm/.../linux-2.6 my2.6
答案 6 :(得分:2)
在较旧的git和ssh版本中,我发现没有合适的方法来启用SSH调试。我使用const dbImageItems = [
{
_id: 17581,
key: "F97E9FEF-D4A7-408C-88BF-BE033F6F3169",
reqStatus: "SUCCESS",
errorMsg: "",
requestDt: "0001-01-01T00:00:00"
},
{
_id: 17580,
key: "C744520A-57CD-461F-B03E-8CC4F8D97CD4",
reqStatus: "ERROR",
errorMsg: "An error occured",
requestDt: "0001-01-01T00:00:00"
}]
function ImageItem(id, guid, status, errMsg) {
this.id = id;
this.guid = guid;
this.status = status;
this.errMsg = errMsg;
}
export function getImageItems() {
let imageItems = [];
dbImageItems.forEach(function(value) {
const item = new ImageItem(
value._id,
value.key,
value.reqStatus,
value.errorMsg
);
imageItems.push(item);
});
return imageItems;
}
查找环境变量,但找不到可以正常使用的GIT_TRACE或SSH_DEBUG变量的任何组合。
下面是将ssh -v临时注入git-> ssh序列的方法:
ltrace -e getenv ...
此处是 git版本1.8.3 和ssh版本 OpenSSH_5.3p1,OpenSSL 1.0.1e-fips的输出,2013年2月11日:克隆github存储库:
$ echo '/usr/bin/ssh -v ${@}' >/tmp/ssh
$ chmod +x /tmp/ssh
$ PATH=/tmp:${PATH} git clone ...
$ rm -f /tmp/ssh
答案 7 :(得分:1)
Git 2.22(2019年第二季度)引入了 trace2
和 Jeff Hostetler 的commit 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_TR2
旨在替代GIT_TRACE
和logs命令 摘要数据。
GIT_TR2_PERF
旨在替代GIT_TRACE_PERFORMANCE
。
它将输出扩展为命令进程,线程, 回购,绝对和相对经过时间。它报告事件 子进程启动/停止,线程启动/停止和每线程功能 嵌套。
GIT_TR2_EVENT
是一种新的结构化格式。它将事件数据写为 系列JSON记录。对trace2函数的调用将记录到启用的3个输出目标中的任何一个,而无需调用不同的
trace_printf*
或trace_performance*
例程。
请参见commit a4d3a28的Josh Steadmon (steadmon
)(2019年3月21日)。
(由Junio C Hamano -- gitster
--在commit 1b40314中合并,2019年5月8日)
trace2
:写入目录目标当trace2环境变量的值是引用现有目录的绝对路径时,请将输出写入给定目录下的文件(每个进程一个)。 文件将根据trace2 SID的最终组成部分命名,然后加上一个计数器以避免潜在的冲突。
这使得为每次git调用收集跟踪更加方便 通过无条件地将相关的
trace2
envvar设置为常量 目录名称。
另请参见commit f672dee(2019年4月29日)以及commit 81567ca,commit 08881b9,commit bad229a,commit 26c6f25,commit bce9db6,{{3 }},commit 800a7f9,commit a7bc01e,commit 39f4317,commit a089724(由commit 1703751创建)(2019年4月15日)。
(由Jeff Hostetler (jeffhostetler
)在Junio C Hamano -- gitster
--中合并,2019年5月13日)
commit 5b2d1c0现在包括new documentation(表示不遵守存储库本地和工作树配置文件以及-c
命令行参数。)
config settings which are only read from the system and global config files:
$ git config --global trace2.normalTarget ~/log.normal
$ git version
git version 2.20.1.155.g426c96fcdb
收益
$ cat ~/log.normal
12:28:42.620009 common-main.c:38 version 2.20.1.155.g426c96fcdb
12:28:42.620989 common-main.c:39 start git version
12:28:42.621101 git.c:432 cmd_name version (version)
12:28:42.621215 git.c:662 exit elapsed:0.001227 code:0
12:28:42.621250 trace2/tr2_tgt_normal.c:124 atexit elapsed:0.001265 code:0
对于Example:
$ git config --global trace2.perfTarget ~/log.perf
$ git version
git version 2.20.1.155.g426c96fcdb
收益
$ cat ~/log.perf
12:28:42.620675 common-main.c:38 | d0 | main | version | | | | | 2.20.1.155.g426c96fcdb
12:28:42.621001 common-main.c:39 | d0 | main | start | | 0.001173 | | | git version
12:28:42.621111 git.c:432 | d0 | main | cmd_name | | | | | version (version)
12:28:42.621225 git.c:662 | d0 | main | exit | | 0.001227 | | | code:0
12:28:42.621259 trace2/tr2_tgt_perf.c:211 | d0 | main | atexit | | 0.001265 | | | code:0