无法获取 git ls-remote 列表并且标准输出没有错误

Cannot get git ls-remote list and no error at stdout

我在同一网络下的两台不同计算机上执行 git ls-remote ssh://git@git_repo:port *,一台 Linux 另一台 Windows,在 Windows 我正在获取列表但是Linux 没有。 Linux.

上完全没有错误和空列表

两者都将 SSH 密钥添加到远程存储库,并且都能够克隆存储库。

更新 1:

Windows Git 版本:2.19.2.windows.1

Linux Git 版本:2.7.4

更新二:

存储库在 Gerrit 中。

更新 3:

我在使用 Jenkins 插件时遇到了这个问题 Extended Choice Parameter plugin。它自 2016 年以来没有变化。对此的任何解决方法也是一个答案。

有什么想法吗?

您可能应该使用:

git ls-remote ssh://git@git_repo:port

没有任何后缀,因为它默认列出所有内容。

您可以使用:

git ls-remote ssh://git@git_repo:port '*'

(或与双引号相同——其中一个或两个也适用于 Windows)。在 Unix/Linux-style 命令 shell 中,shell 将用 * 之前当前目录中所有文件的列表替换 * =85=] 命令,除非您保护星号免受 shell.

你也可以使用单反冲:

git ls-remote ssh://git@git_repo:port \*

因为有很多方法可以保护单个字符免受 shell 的影响。规则有点复杂,但一般来说,单引号是 "most powerful" 引号,而双引号是 glob 字符 1 但不是其他扩展。2 如果您还没有在引号内,反斜杠会引用紧接的下一个字符(反斜杠 within 双引号的行为在某些情况下会有所不同shells).


1glob 字符为 *[?。在 [ 之后,glob 内的字符 运行 结束 ]。因此 echo foo[abc] 查找名为 fooafoobfooc 的文件。请注意 . 通常 而不是 特殊:foo.* 仅匹配名称以 foo. 开头的文件,即包括句点:名为 foo不以foo.开头,只以foo开头,不匹配

Glob 与正则表达式非常不同:在正则表达式中,. 匹配任何字符(就像 ? 在 glob 中所做的那样)而星号表示 "repeat previous match zero or more times",因此 glob * 和正则表达式 .* 是相似的。 (在正则表达式匹配中,我们还需要考虑表达式是否anchored。globs总是被锚定,所以不会出现问题。)

2大多数扩展出现在美元符号 $ 中,如 $var${var}$(subcommand),但反引号还调用命令替换,如 echo `echo bar`.