Git: автоматическое извлечение из репозитория?

91

Есть ли способ настроить git так, чтобы он слушал обновления из удаленного репо и извлекал каждый раз, когда что-то меняется? Вариант использования: я хочу развернуть веб-приложение с помощью git (поэтому я получаю контроль версий развернутого приложения), но хочу разместить «центральное» репозиторий git на Github, а не на веб-сервере (интерфейс Github просто оооочень хорош) .

У кого-нибудь это работает? Как это делает Heroku? Мой гугл-фу не дает мне подходящих результатов.

Ли Хаойи
источник

Ответы:

49

В Git есть «крючки», действия, которые могут выполняться после других действий. Кажется, вы ищете "крючок после получения". В администраторе github вы можете настроить URL-адрес после получения, который будет попадать (с полезной нагрузкой, содержащей данные о том, что было только что отправлено) каждый раз, когда кто-то отправляет ваше репо.

Как бы то ни было, я не думаю, что автоматическое извлечение - хорошая идея - что, если что-то не так было отправлено в вашу ветку? Я бы использовал такой инструмент capistrano(или эквивалент) для таких вещей.

ксол
источник
12
Моим запланированным вариантом использования было создание отдельного репозитория / ветки для стадии разработки «тестирование и возня» и специальное репозиторий «push to production», на которое я нажимаю только после того, как уверен, что все работает. Я в основном использую Git для работы с rsync, но он ведет журнал всех развертываемых версий, и я легко смогу вернуться к предыдущей версии. Преимущество перед чем-то более хардкорным, например, capistrano, в том, что мне не пришлось бы изучать совершенно новый инструмент для того, что (на данный момент) является действительно небольшим проектом.
Ли Хаойи 02
Аутентификация через веб-перехватчик добавляет дополнительные проблемы безопасности и сложность, поэтому решения на основе pull по-прежнему имеют свои преимущества. Контроль версий выпуска может осуществляться с помощью тегов, чтобы избежать случайного развертывания.
lz96
21

В unix-like вы можете создать задание cron, которое вызывает «git pull» (каждый день, каждую неделю или что-то еще) на вашем компьютере. В Windows вы можете использовать планировщик задач или команду «AT», чтобы сделать то же самое.

SigTerm
источник
3
Неправильный способ использования Git.
deepdive
28
@deepdive Почему бы и нет? Представьте, что у вас дома есть маленький Rasperry Pi и нет статического IP-адреса. Какой еще вариант у вас есть, кроме запуска cron или runwhen job?
kaiser
2
Это плохая идея. Он хочет, чтобы изменения вступили в силу сразу после нажатия.
boi_echos
11
OP специально запрашивает метод, который прослушивает обновления из удаленного репо и будет извлекать всякий раз, когда что-то изменяется . Это решение будет просто извлекать из репозитория время от времени, поэтому для его эффективности интервал должен быть очень коротким, что приведет к большому количеству избыточных запросов на извлечение.
Боаз,
3
Быстрый способ сделать это без изменения вкладки хрон: while true; do git pull; sleep 10; done. Это будет происходить git pullкаждые 10 секунд ...
JakeD
3

Существуют программы непрерывной интеграции, такие как Jenkins или Bamboo, которые могут обнаруживать коммиты и запускать такие операции, как сборка, тестирование, упаковка и развертывание. Они делают то, что вы хотите, но у них много зависимостей, их сложно настроить, и, в конце концов, они могут использовать периодическую проверку репозитория git, что будет иметь такой же эффект, как и вызов git pull с помощью cron каждую минуту.

Павел Ниедоба
источник
0

Я знаю, что этот вопрос немного устарел, но вы можете использовать журнал Windows и git для автоматического запуска вашего проекта с помощью веб-перехватчика и php (при условии, что ваш проект включает веб-сервер. См. Мою суть здесь: https://gist.github.com/ upggr / a6d92e2808e9628ebe0d01fd93569f4a

Иоаннис Коккинис
источник