0

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

更新 2:

存储库位于 Gerrit 中。

更新 3:

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

任何的想法?

4

1 回答 1

1

您可能应该使用:

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

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

您可以使用:

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

(或者双引号也一样——其中一个或两个也可以在 Windows 上工作)。在 Unix/Linux 风格的命令 shell 中,shell将在运行命令之前替换*为当前目录中所有文件的列表,除非您保护星号不受 shell 影响。

您还可以使用单个反冲:

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

因为有很多方法可以保护单个字符免受 shell 的影响。规则有点复杂,但一般来说,单引号是“最强大”的引号,而双引号引用glob字符1而不是其他扩展。2 如果您尚未在引号内,则反斜杠会引用紧接的下一个字符(双引号的反斜杠行为在某些 shell 中会有所不同)。


1全局字符是*[?。之后[,glob 中的字符运行到结尾]。因此echo foo[abc]查找名为fooafoob和的文件fooc。注意.一般特殊:foo.*只匹配名称以 开头的文件foo.,即包括句点:一个文件名foo不以 开头foo.,只以foo,不匹配。

Glob 与正则表达式非常不同:在正则表达式中,.匹配任何字符(就像?在 glob 中一样),星号表示“重复先前的匹配零次或多次”,因此 glob*和正则表达式.*相似。(在正则表达式匹配中,我们还需要考虑表达式是否被锚定。globs 总是被锚定的,这样就不会出现问题。)

2大多数扩展都使用美元符号$,如$varor ${var}or $(subcommand),但反引号也调用命令替换,如echo `echo bar`.

于 2019-04-12T21:19:53.720 回答