2012-05-10 3 views
7

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

Что я хочу делать: 1) Полная работа над моей локальной машиной на ветке развития. 2) Нажмите изменения в git. Git публикует URL-адрес веб-хостинга и автоматически удаляет мой удаленный сервер с изменений на сайте разработки. 3) Как только QA'd и подтвердится, что он правильно на сайте разработки, нажмите главную ветвь на производственный сайт (на том же сервере, что и сайт разработки).

Место, где я нахожусь: У меня установлена ​​git на моем локальном компьютере и удаленном сервере. Я могу подталкивать моды в ветку разработки до git. На удаленном сервере я могу вытащить обновления, и это работает как шарм. Проблема в том, что я не могу заставить удаленный сервер автоматически обновляться, когда изменения переносятся с моей локальной машины.

Мои вопросы: 1) Для каталога сайта разработки на удаленном сервере, должен ли я использовать init или git init --bare? Я не планирую иметь обновления, сделанные на самом сервере. Я хотел бы, чтобы моя команда разработчиков работала локально и нажимала моды на сервер. Я считаю, что мне нужно использовать git init, поскольку рабочее дерево необходимо для настройки удаленного псевдонима в репозиторий git, но я хотел подтвердить. 2) Я уверен, что сообщение webhook из git-проблемы связано с привилегиями пользователей. Как я могу безопасно обойти это? Я прочитал много учебных пособий, которые предлагают обновить файлы git-hook, но я чувствую, что это более решительно, чем я должен принять. Мне бы хотелось, чтобы веб-сайт попал в URL-адрес, который безопасно вытаскивает файлы, не добавляя лодку кода (если это возможно).

Я разработчик веб-сайтов по своей природе, поэтому задачи git и sysadmin - это, как правило, проклятие моего существования. Опять же, я знаю, что этот вопрос аналогичен другим, но мне еще предстоит найти всеобъемлющий, лаконичный, безопасный и наиболее логичный подход к решению проблемы. Я около 16 часов и официально попал в точку «в кругах без прогресса».

Большое спасибо за вашу помощь!

+0

Wow это вид невозможно найти простые решения для этого. Заставляет меня скучать по SVN немного ... – Jake

ответ

2

У меня была такая же точная проблема, сильная по коду и навыкам развития, слабая в навыках сисадмина. Когда я, наконец, был готов подтолкнуть код, я должен был спросить GitHub rep, что их предложил, и они ответили Капистрано. Это приложение Ruby, которое запускает команды (например, git pull) на удаленных серверах, а также практически любую другую команду, которую вы можете себе представить.

Вот несколько статей, которые вы можете прочитать, чтобы получить больше информации:

Не буду врать, то учиться кривая была довольно крутой, но как только вы начнете работать с Capistrano, вы увидите, что она хорошо работает для нажатия кода. Я разрабатываю свои приложения в Symfony, и у меня есть настройка Capistrano, чтобы вытащить код, очистить кеш и очистить файлы журнала, все в одной команде с моей локальной машины.

+1

Эта помощь вообще? –

9

Вы можете сделать это довольно легко с помощью сервисных крючков GitHub.

Вам нужно будет создать еще один файл, который будет обрабатывать процесс выполнения git pull. Добавить новый файл, называемый github.php (или что-нибудь вы хотите), и добавить:

<?php `git pull`; 

Сохранить этот файл и загрузить его в папку хранилища на сервере. Затем перейдите к Services Hooks -> Post-Receive URL и скопируйте URL-адрес в этот файл и вставьте его в «URL-адрес получателя», например. http://demo.test.com/myfolder/github.php

Итак, когда вы нажимаете, GitHub автоматически посещает этот URL-адрес, заставляя ваш сервер выполнять команду git pull.

Чтобы увидеть это более подробно, чтобы перейти к this tutorial

+0

Он отлично работает. – Lokesh