Невозможно получить список git ls-remote и нет ошибок в stdout - PullRequest
0 голосов
/ 12 апреля 2019

Я выполняю 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 . С 2016 года без изменений. Любой обходной путь для этого также будет ответом.

Есть идеи?

1 Ответ

1 голос
/ 13 апреля 2019

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

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 \*

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


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

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

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

...