当由 git 运行时,如何将 plink.exe 配置为冗长?
问题:在 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 获取失败时的详细客户端日志?
从中提取源代码
svn://svn.tartarus.org/sgt/putty
,使用根目录中的 Visual Studio 2010 命令提示符构建 windows make 文件perl mkfiles.pl
,然后使用nmake -f Makefile.vc
.winplink.c
在main() 函数中找到一个进行本地编辑的好地方。我把我的放在 arg 处理循环之前。“Plin”错误实际上是Git服务器返回的错误信息的前4个字符。当使用 plink.exe 提供密码时,通常是从“echo %USERNAME%”传入的帐户名。
我们发现间歇性错误与用户名到 GIT 用户列表的映射不一致有关。我们最终将所有 Git 用户名标准化为大写。问题就消失了。
这个问题影响了许多 Git 分支的许多用户。