2013-10-26 3 views
0

Я пытаюсь настроить систему, в которой, когда я вношу изменения в мой репозиторий GitHub, мой сервер также получает эти коммиты.git command in rails controller

Чтобы сделать это, я установил свой репозиторий GitHub, чтобы отправить сообщение о получении после URL-адреса в моем приложении rails. У меня есть контроллер, который справится с этим.

Проблема заключается в следующем: как я могу запускать команды git в контроллере rails? Я получаю, как это сделать в командной строке.

ли я просто ввести что-то вроде этого:

# controller method where post-receive hook is sent 
def commit 
git pull origin development 
end 
+0

Возможный дубликат [Выполнение git auto-commit] (http://stackoverflow.com/questions/420143/making-git-auto-commit) – user2205763

ответ

0

Попробуйте абстракции Руби на вершине Git как Rugged или Ruby/Git. Оба остаются активными, в то время как другие подобные библиотеки, похоже, упали на обочину.

2

Сделайте это!

def commit 
system "git pull origin development" 
end 
+1

Также хороший вариант. Я предпочитаю абстракцию для таких вещей, как обработка ошибок, но это, безусловно, самый быстрый и простой способ. – Vidya

1

Существует довольно большая разница между вашей заявленной целью и тем, что делает команда, которую вы планируете использовать. Чтобы получить коммиты, все, что вам нужно для запуска, - git fetch. Вы можете использовать system или backticks для запуска команд оболочки из вашего рубинового кода, но вам нужно быть осторожным с тем, что вы запускаете. Вы должны иметь в виду, что притяжение - это слияние, а это означает, что в любое время изменения могут конфликтовать, и это оставит ваше хранилище в ожидании вмешательства человека (не говоря уже о файлах с маркерами конфликтов по всему миру) и не означает, что это вообще не сценарий.

Если вам нужна версия файлов в подсказке, чтобы выполнить развертывание или что-то подобное, вы можете проверить http://gitolite.com/the-list-and-irc/deploy.html для разных способов сделать это, в зависимости от ситуации.

Вы можете использовать комбинацию выкладывая в git fetch и git checkout или rugged в коде, чтобы выполнить это обновление, и знать, что все это IO переплет (часть его по сети), что означает, что она может принять произвольное количество времени для запуска, что может не очень хорошо работать с остальной частью вашего приложения, если оно блокирует выполнение Ruby.