0

我正在尝试建立一个系统,当我将更改提交到我的 GitHub 存储库时,我的服务器也会接收这些提交。

为此,我将我的 GitHub 存储库设置为向我的 rails 应用程序上的 URL 发送一个接收后挂钩。我有一个控制器来处理这个。

问题是:如何在 rails 控制器中运行 git 命令?我知道如何在命令行中执行此操作。

我是否只需键入以下内容:

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

3 回答 3

2

做这个!

def commit
 system "git pull origin development"
end
于 2013-10-26T16:23:51.510 回答
1

您声明的目标与您计划使用的命令之间存在很大差异。为了获得提交,您只需要运行git fetch. 您可以使用system或反引号来从您的 ruby​​ 代码运行 shell 命令,但您需要小心运行的内容。您应该记住,拉取是合并,这意味着任何时候更改都可能发生冲突,并且它会让您的存储库等待人工干预(更不用说带有冲突标记的文件),因为它是高-级别的用户界面,根本不意味着要编写脚本。

如果您确实想要提示中的文件版本,进行部署或类似操作,您可以查看http://gitolite.com/the-list-and-irc/deploy.html了解一些不同的方法,视情况而定。

您可以在您的代码中结合使用外壳git fetchgit checkout/或坚固来执行此更新,并注意这都是 IO 绑定的(部分通过网络),这意味着它可能需要任意时间来执行此更新。运行,如果它阻止了 ruby​​ 的执行,它可能不适用于您的应用程序的其余部分。

于 2013-10-26T19:50:20.243 回答
0

尝试基于 Git 的 Ruby 抽象,例如RuggedRuby/Git。两者都保持活跃,而其他类似的库似乎已被淘汰。

于 2013-10-26T16:23:30.853 回答