При клонировании git-репозиториев в автоматизированных инструментах - веб-интерфейсах, системах CI, иногда при вызове git-клона открывается запрос на ввод имени пользователя и пароля (например, при клонировании несуществующего репозитория Github или на новом узле, где отсутствуют ssh-ключи). ).
Как заставить git просто потерпеть неудачу (желательно с разумным сообщением об ошибке и кодом выхода), вместо того, чтобы ждать, пока процесс сервера выдаст ему имя пользователя и пароль?
git
automation
Тин Тврткович
источник
источник
Ответы:
В git версии 2.3 есть переменная окружения,
GIT_TERMINAL_PROMPT
которая при установке на0
отключает запрос учетных данных.Вы можете получить больше информации об этом в
man git
(после обновления до версии git2.3
) или в этом посте на github .Примеры:
git clone https://github.com/some/non-existing-repo
предложит ввести имя пользователя и парольGIT_TERMINAL_PROMPT=0 git clone https://github.com/some/non-existing-repo
потерпит неудачу без запроса имени пользователя и пароляисточник
Если вы используете аутентификацию ssh и в linux, вы можете создать замену команды ssh, чтобы отключить это.
Создайте файл с именем «sshnoprompt.sh» с помощью:
ssh -oBatchMode=yes $@
Сделайте этот файл исполняемым с
chmod +x sshnoprompt.sh
Тогда при запуске git:
GIT_SSH="sshnoprompt.sh" git clone foo@dummyserver:not_a_repo
И это не позволит никаких интерактивных подсказок или вопросов Git - он не должен быть в состоянии спросить пользователя о чем-либо.
источник
Работа с git версии 1.8.3.1;
git clone -c core.askPass $echo url/or/path/to/git/repo
Конфигурация
core.askPass
работает путем передачи управления обработкой учетных данных вышеупомянутой программе. Однако, поскольку$echo
ничего не может сделать, кроме вывода, попытка клонирования быстро завершается неудачей, и применяется соответствующее перенаправление bash. Этот код вызывается только в том случае, если репозиторий git оказывается закрытым, и передаст сообщение об ошибке, сообщающее, что аутентификация не удалась для конкретного репозитория. Вы можете проверить это вhttps://github.com/git/git
общедоступном репозитории против частного репозитория, о котором вы знаете.Чтобы подсластить сделку, вам даже не нужно ссылаться на программу, как
echo
в первую очередь. Простая передача конфигурации git-c core.askPass
без последующего ввода может привести к сбою в случае, если хранилище окажется закрытым, так как код не будет знать, в какую программу перегрузить обработку учетных данных. Хотя это, безусловно, более старый и простой метод, чем другие, упомянутые здесь, я не знаю, будет ли он иметь такой же эффект в более старых версиях git.источник
$echo
это ссылка на переменную, которая (будучи неустановленной) расширяется до пустой строки, поэтому она совершенно бессмысленна. Если вы вставитеecho
туда (без знака доллара), это также будет неверно, так как это будет интерпретировано как местоположение хранилища. Это должно быть-c core.askPass=echo
.В зависимости от того, как вы используете git, перенаправление stdin или stdout, чтобы они не были подключены к терминалам, остановит git от запроса подробностей и просто вызовет ошибку.
Это также позволит вам обнаружить ошибки (или, по крайней мере, журналы) для веб-службы.
источник
</dev/null
и другоеnohup .. &
, похоже, не работает.