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

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

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

1 ответ

Решение

Вы можете поставить хук пост-получения на пустые репозитории вашего 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-1s с пульта (в том числе refs/heads/master).
Все, что вам скажут, это "одно и то же" или "другое", при условии, что у вас есть голова SHA-1 локально.
Если они разные, вы не можете точно сказать, почему (хотя вы можете получить, вероятно, достаточно, если вы идете по местным оборотам).

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

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

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