Как сделать мою локальную копию git всегда на ее последней версии автоматически?

Моя система имеет несколько репозиториев git с некоторым кодом c ++. Пользователи, которые отправляют запрос в мою систему, получают двоичный исполняемый файл, скомпилированный из всех репозиториев git. Основной особенностью этой системы является отправка двоичного кода из последней версии источника. Чтобы сделать это, каждый раз, когда система получает запрос, она запускает git pull --all , эта команда занимает много времени. Я хочу избежать запуска команды pull при поступлении запроса и вместо этого заставить систему автоматически запускать команду pull при завершении новой версии. Как это сделать автоматически?

Единственный способ, о котором я могу думать, – это как-то периодически запрашивать сервер git каждую секунду или около того и запускать команду pull каждый раз, когда в удаленном репозитории происходит новое комментирование, но я считаю, что опрос – последнее решение, которое я ищу. Тем не менее, как реализовать эту наивную схему опроса и какие альтернативы мне получить?

Вы можете поместить куклу post-receive на голых репозиториях вашего git-сервера, чтобы этот крючок перешел на не-голый репо и потянул.
Он будет поддерживать это так, чтобы рабочее дерево всегда обновлялось, фиксировалось после коммитов.

Вы можете увидеть пример в этом вопросе .

 #!/bin/sh unset $(git rev-parse --local-env-vars) cd /path/to/non-bare.repo git pull 

Как проиллюстрировано в следующем вопросе « Могу ли я выпустить git rev-parse в удаленном репозитории без локальной копии? », Torek упоминает:

Вы можете использовать git ls-remote чтобы получить головку SHA-1 от пульта (включая refs/heads/master ).
Все, что скажет вам, это «одно и то же» или «другое», предполагая, что у вас есть головка SHA-1 локально.
Если они разные, вы не можете точно сказать, почему (хотя вы можете получить, вероятно, достаточно, если будете ходить по местным оборотам).

Сравнение вывода git ls-remote и git rev-parse master скажет мне, обновляется ли локальное репо или нет.

Это может быть способ узнать, когда запускать git pull .