2013-10-26 31 views
0

我想建立一個系統,當我提交更改到我的GitHub存儲庫時,我的服務器也收到這些提交。在rails控制器git命令

要做到這一點,我設置了我的GitHub倉庫,以發送post-receive鉤子到我的rails應用程序中的URL。我有一個控制器可以處理這個問題。

問題是這樣的:我如何在rails控制器中運行git命令?我知道如何在命令行中完成它。

難道我只需鍵入是這樣的:

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

[Making git auto-commit](http://stackoverflow.com/questions/420143/making-git-auto-commit) – user2205763

回答

0

試穿的Git之上的Ruby的抽象像RuggedRuby/Git。兩家公司都保持活躍,而其他類似的圖書館似乎已經倒下了。

2

做到這一點!

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

也是一個不錯的選擇。我更喜歡對錯誤處理等事物進行抽象,但這無疑是最快最簡單的方法。 – Vidya

1

你說的目標和你打算使用的命令之間有很大的區別。爲了獲得提交,你需要運行的是git fetch。你可以使用system或反引號爲了從你的ruby代碼運行shell命令,但你需要小心你的運行。您應該記住,pull是一個合併,這意味着在任何時候更改都可能會發生衝突,並且它會讓您的存儲庫等待人爲干預(更不用說提及衝突標記的文件),因爲它是高級應用程序的一部分,級別的用戶界面,並不意味着腳本。

如果您確實需要提示中的文件版本,要進行部署或類似操作,則可以根據具體情況查看http://gitolite.com/the-list-and-irc/deploy.html以瞭解執行此操作的一些不同方法。

您可以在代碼中使用脫殼而出,以git fetchgit checkoutrugged的組合來執行此更新,並意識到這是所有IO綁定(通過網絡的一部分),這意味着它可以採取任意時間運行,如果阻止了ruby的執行,這可能不適用於其他應用程序。