Git、plink 和 cmd.exe:当用作 GIT_SSH 时,如何将 plink.exe 设置为详细

Git、plink 和 cmd.exe:当用作 GIT_SSH 时,如何将 plink.exe 设置为详细

如何配置 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 分支的许多用户。

相关内容