git ls-remote зависает навсегда, если интернет-соединение прерывается до завершения команды
Я пишу скрипт, который периодически подключается к git remote через SSH, используя шифрование с открытым ключом, и получает хэш-идентификатор для коммита на кончике мастера.
GIT_SSH_COMMAND='ssh -i /root/.ssh/id_rsa_blah' git ls-remote ssh://USER@HOST:PORT/path/to/repo.git --heads refs/heads/master | awk '${print 1}'
Он работает нормально, пока есть доступ к интернету, и для завершения команды требуется около 3-5 секунд. Тем не менее, я имитирую, что произойдет, если интернет отключится во время выполнения команды, отключив Ethernet от компьютера. git ls-remote
кажется, навсегда зависает при этом. Я только позволю этому бежать в течение приблизительно 3 минут, но я предполагаю, что это продолжит зависать. Я собираюсь взять обеденный перерыв, поэтому я посмотрю, если команда, наконец, не удастся.
Погуглив, я увидел ссылки на переменную окружения GIT_TERMINAL_PROMPT. Я думаю, что значение этого параметра 0 приводит к тому, что команды git перестают работать. Тем не мение:
GIT_TERMINAL_PROMPT=0 GIT_SSH_COMMAND='ssh -i /root/.ssh/id_rsa_blah' git ls-remote ssh://USER@HOST:PORT/path/to/repo.git --heads refs/heads/master | awk '${print 1}'
все еще висит.
Как я могу получить git ls-remote
потерпеть неудачу через определенное время? Я еще не исследовал, связана ли проблема с SSH или ls-remote, но это мой следующий шаг.