Автоматически вытаскивать удаленный сервер с помощью Git push?

Вот что я пытаюсь сделать:

У меня есть репозиторий GitHub, часть которого я бы хотел сделать веб-видимым. Прямо сейчас я клонировал репозиторий на своем собственном сервере, и он работает хорошо, но для того, чтобы обновлять его, мне нужно вручную войти в систему и внести последние изменения.

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

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

Спасибо.

Ответ 1

Если вы легко можете запустить script, вы можете настроить крючки, чтобы нажать:

  • от GitHub до репозитория пустой (пустой рабочей строки) на вашем веб-сервере.
  • от вашего голого репо на вашем веб-сервере до вашего "живого" репо (с помощью рабочей таблицы, представляющей ваш веб-сайт).

Затем вы можете связать это с помощью крючка на своем "живом" репо, чтобы обновить себя (через "git merge", объединив содержимое вашего голого репо с вашим "живым" репо), всякий раз, когда ваш голой отпор репо что-нибудь.

Вы получаете тот эффект, который вам нужен: любое нажатие на репозиторий GitHub (для определенной ветки, я полагаю) вызовет обновление на вашем "реальном" реестре веб-серверов.

Ответ 2

Я сделал что-то, что работает почти точно таким образом, за исключением того, что репо "remote", которое получает push, находится на той же машине, что и репо, которое потом тянет. Это правда (и важно), что точно такой же набор пользователей имеет разрешения для обоих репозиториев. (Но это должно быть хорошо, вы не хотите, чтобы случайные люди нажали ваше репо.) В любом случае у меня просто есть git post-update hook call shell script, который делает для меня тяну. Один сложный бит заключается в том, что вы должны очистить среду (я использовал env -i, или вы можете отключить переменные, связанные с w21), в противном случае притяжение путается.

Ответ 3

Вот WebHook, который может помочь вам. Я думаю, что он делает именно то, что вы ищете: Удаленный сервер WebHook