Git: автоматичне витягнення зі сховища?


90

Чи є спосіб налаштувати git таким чином, щоб він прослуховував оновлення з віддаленого репо і тягнув, коли щось змінюється? Варіант використання полягає в тому, що я хочу розгорнути веб-програму за допомогою git (тому я отримую контроль версій розгорнутого додатка), але хочу розмістити "центральне" git-репозиторій на Github, а не на веб-сервері (інтерфейс Github просто дуже гарний) .

Хтось примусив це працювати? Як це робить Героку? Мій Google-fu не дає мені відповідних результатів.

Відповіді:


48

Git має "хуки", дії, які можна виконувати після інших дій. Те, що ви, здається, шукаєте, це "гачок після отримання". В адміністраторі github ви можете встановити URL-адресу після отримання, яку буде натиснуто (з корисним навантаженням, що містить дані про те, що щойно було натиснуто) кожного разу, коли хтось натискає на ваше репо.

Для чого це варте, я не думаю, що автоматичне витягування - це гарна ідея - а що, якщо щось не так було підштовхнуто до вашої гілки? Я б використовував такий інструмент capistrano(або еквівалент) для таких речей.


10
Запланованим моїм випадком використання було окреме репо / гілка для етапу розробника та тестування, а також спеціальне репозиторій "push to production", до якого я натискаю лише раз, коли впевнений, що все працює. В основному я використовую Git для роботи з rsync, за винятком того, що він веде журнал усіх версій, які розгортаються, і я легко зможу повернутися до попередньої версії. Перевага перед чимось більш хардкорним, таким як capistrano, полягає в тому, що мені не довелося б вивчати абсолютно новий інструмент для того, що є (на сьогоднішній день) справді невеликим проектом.
Li Haoyi,

автентифікація через веб-хук додає додаткових проблем із безпекою та складності, тому рішення на основі тяжіння все ще мають свої переваги. Контроль версії випуску можна зробити за допомогою тегів, щоб уникнути випадкового розгортання.
lz96

21

На Unix-лайках ви можете створити роботу cron, яка називає "git pull" (щодня або щотижня або що завгодно) на вашій машині. У Windows ви можете використовувати планувальник завдань або команду "AT", щоб зробити те саме.


3
Неправильний спосіб використання Git.
глибоке занурення

26
@deepdive Чому ні? Уявіть, у вас вдома є маленький Rasperry Pi, а статичний IP недоступний. Який ще варіант у вас є тоді, коли ви запускаєте cron або запускаєте роботу?
kaiser

2
Це не гарна ідея. Він хоче, щоб зміни були застосовані відразу після натискання.
boi_echos

10
OP спеціально вимагає методу, який прослуховує оновлення з віддаленого репозиторію та витягує, коли щось змінюється . Це рішення просто так часто витягуватиметься із сховища, тому, щоб воно було ефективним, інтервал повинен бути дуже коротким, що призведе до великої кількості зайвих запитів на витягування.
Боаз,

3
Швидкий спосіб зробити це без зміни вкладки хрон: while true; do git pull; sleep 10; done. Це буде робити git pullкожні 10 секунд ...
JakeD

3

Існують програми безперервної інтеграції, такі як Jenkins або Bamboo, які можуть виявляти коміти та запускати такі операції, як збірка, тестування, пакування та розгортання. Вони роблять те, що ви хочете, але вони важкі з залежностями, їх важко налаштувати, і врешті-решт вони можуть використовувати періодичну перевірку щодо сховища git, що мало б такий самий ефект, як виклик git pull by cron щохвилини.


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.