Невозможно получить список git ls-remote и нет ошибок в 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 version: 2.7.4

Обновление 2:

The repository is in Gerrit.

Обновление 3:

I'm facing this problem using the Jenkins plugin Extended Choice Parameter plugin. It has no change since 2016. Any workaround for this would be also an answer.

Любая идея?

1 ответ

Решение

Вы, вероятно, должны использовать:

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

без суффикса, так как он по умолчанию перечисляет все.

Ты можешь использовать:

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

(или то же самое с двойными кавычками - один или оба из них могут также работать в Windows). В командной оболочке в стиле Unix/Linux оболочка заменит * со списком всех файлов в текущем каталоге перед запуском команды, если только вы не защитите звездочку от оболочки.

Вы также можете использовать одну обратную реакцию:

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

так как существует множество способов защитить отдельных персонажей от снарядов. Правила становятся немного сложнее, но в целом одинарные кавычки являются "наиболее сильными" кавычками, в то время как двойные кавычки заключают в кавычки символы 1, но не другие расширения. 2 Обратная косая черта заключает в кавычки следующий следующий символ, если вы еще не в кавычках (поведение обратной косой черты в двойных кавычках варьируется в некоторых оболочках).


1 Глобус символы *, [, а также ?, После [ символы внутри шара бегут к закрытию ], Так echo foo[abc] ищет файлы с именем fooa, foob, а также fooc, Обратите внимание, что . это вообще не спец foo.* соответствует только файлам, имена которых начинаются с foo., т. е. включая период: файл с именем foo не начинается с foo., только с foo и не соответствует.

Глобусы сильно отличаются от регулярных выражений: в регулярных выражениях . соответствует любому символу (например, ? означает "повторять предыдущее совпадение ноль или более раз", так что * и регулярное выражение .* похожи. (В совпадениях с регулярным выражением нам также необходимо учитывать, является ли выражение привязанным. Глобусы всегда привязываются, чтобы вопрос не возникал.)

2 Большинство расширений происходит со знаком доллара $, как в $var или же ${var} или же $(subcommand), но обратные кавычки также вызывают подстановку команд, как в echo `echo bar`,

Другие вопросы по тегам