如何配置 plink.exe 使其由 git 运行时更详细?
问题:在 Windows 上,使用该命令git.cmd clone git+ssh://user@host/repo folder
时,GIT_SSH=plink.exe
在构建从属进程间会间歇性失败。我需要找到根本原因,并使连接可靠,而无需在某些计数上重试。
我已将范围缩小到 sshd 正在运行且终止其进程而没有错误。服务器正在运行 gitosis,因此我只有命令行输出可以继续。当发生故障时,gitosis 不会被调用(没有 gitosis 打印),因此我怀疑是 Windows ssh 客户端的问题。
当 git 调用 plink.exe 时,我想要连接详细日志记录。
设置GIT_SSH=plink.exe -v
结果为:
错误:无法生成 plink.exe -v:没有此文件或目录
事实证明,GIT_SSH 必须是一个可执行文件或包装脚本。
创建这样的批处理文件包装器更接近:GIT_SSH=C:\path\to\plink.cmd
其中 plink cmd 将plink.exe -v %*
预期的详细日志记录打印到控制台,但以错误代码 128 失败终止。克隆的文件夹从未创建,最后打印的控制台输出是:
无法写入标准输出:管道正在关闭。
如何从 plink 获取失败时的详细客户端日志?
答案1
从中提取源代码svn://svn.tartarus.org/sgt/putty
,使用在根目录中的 Visual Studio 2010 命令提示符构建 Windows Make 文件perl mkfiles.pl
,然后使用构建所有内容nmake -f Makefile.vc
。
在 main() 函数中找到一个合适的位置进行本地编辑winplink.c
。我将其放在了参数处理循环之前。
flags |= FLAG_VERBOSE;
答案2
“Plin”错误实际上是 Git 服务器返回的错误消息的前 4 个字符。通常是使用 plink.exe 提供密码时从“echo %USERNAME%”传入的帐户名。
我们发现间歇性错误与用户名与 GIT 用户列表的不一致映射有关。我们最终将所有 Git 用户名标准化为大写。问题就解决了。
该问题影响了许多 Git 分支的许多用户。