使用粗糙或砂砾的git推的示例

时间:2013-03-01 05:02:33

标签: grit rugged

我正在为ruggedgrit寻找一些代码示例,展示如何执行git push

背景

我有用于部署我的应用的佣金任务deploy:stagingdeploy:production

我正在部署到heroku,因此这些任务基本上执行以下操作:

  1. 获取最新标记(例如git describe --abbrev=0
  2. 将该标记所代表的版本推送到指定的遥控器(例如git push staging v1.00
  3. 将版本存储在heroku配置var(例如heroku config:add APP_VERSION=v1.00
  4. (那里还有一些支票,以确保在推送之前我没有忘记创建新标签。)

    最初我使用来自Rakefile的系统调用来获取这些CLI命令;然后我开始使用githeroku-api宝石。

    git gem似乎已被抛弃(过去一年没有提交);似乎Grit和坚固耐用现在是与Git合作的标准宝石。

    不幸的是,由于缺乏文档,我无法弄清楚如何使用这些库中的任何一个进行git推送。

    (在以下示例中,假设我推送的远程/分支是origin / master,并且已在本地仓库中设置为远程)

    从坚固开始:

    $ irb
    2.0.0-p0 :001 > require 'rugged'
     => true 
    2.0.0-p0 :002 > repo = Rugged::Repository.new('/path/to/repo')
     => #<Rugged::Repository:0x007fe8b48821c0 @encoding=#<Encoding:UTF-8>> 
    2.0.0-p0 :003 > remote = Rugged::Remote.lookup(repo, 'origin')
     NoMethodError: undefined method `lookup' for Rugged::Remote:Class
    

    现在为砂砾:

    $ irb
    2.0.0-p0 :001 > require 'grit'
     => true 
    2.0.0-p0 :002 > repo = Grit::Repo.new('/path/to/repo')
     => #<Grit::Repo "/path/to/repo/.git"> 
    2.0.0-p0 :004 > remote = repo.remotes.last
     => #<Grit::Remote "origin/master"> 
    2.0.0-p0 :005 > repo.git.push(remote)
    NoMethodError: undefined method `delete' for #<Grit::Remote "origin/master">
    

    非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

使用grit,repo.git.push实际上通过method_missing调用Git#native。它的签名是:

def native(cmd, options = {}, *args, &block)

因此您需要执行以下操作:

repo.git.push({}, remote)

是的,将OPTIONAL选项放在开头是很愚蠢的,但这就是它的编写方式。

答案 1 :(得分:1)

好吧,我想我已经明白了,但是现在它问我gitHub凭据而且我无法输入我的凭据,因为我收到了'超时'错误。

这就是我所做的:

将远程仓库添加到项目中:

repo.git.remote({}, '添加', 'RemoteRepoName', 'https://github.com/ /。GIT中')

推送到github

pusher = repo.git.push({:process_info =&gt; true,:progress =&gt; true},'RemoteRepoName','master')