7

頑丈またはグリットのコード例を探しており、その方法を示していますgit push

バックグラウンド

レーキタスクがdeploy:stagingありdeploy:production、アプリのデプロイに使用しています。

私はherokuにデプロイしているので、これらのタスクは基本的に次のことを行います。

  1. 最新のタグを取得します(例git describe --abbrev=0) 。
  2. そのタグで表されるバージョンを指定されたリモートにプッシュします(例git push staging v1.00) 。
  3. バージョンをherokuconfigvarに保存します(例heroku config:add APP_VERSION=v1.00) 。

(プッシュする前に新しいタグを作成することを忘れていないことを確認するためのチェックもあります。)

当初、私はこれらのCLIコマンドにRakefileからのシステムコールを使用していました。次に、githeroku-apiのgemを使用するようになりました。

ただし、git gemは放棄されているようです(過去1年間はコミットされていません)。GritとRuggedは、Gitを操作するための標準的な宝石になっているようです。

残念ながら、ドキュメントが不足しているため、これらのライブラリのいずれかを使用してgitpushを実行する方法を理解できません。

(次の例では、プッシュ先のリモート/ブランチがオリジン/マスターであり、ローカルリポジトリでリモートとしてすでに設定されていると想定しています)

頑丈から始める:

$ 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">

どんな助けでも大歓迎です。

4

2 に答える 2

1

gritを使用すると、repo.git.pushは実際にmethod_missingを介してGit#nativeを呼び出します。その署名はこれです:

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

したがって、代わりに次のことを実行する必要があります。

repo.git.push({}, remote)

ええ、最初にOPTIONALオプションを置くのはばかげていますが、それはまさにそれが書かれている方法です。

于 2013-04-09T21:13:38.280 に答える
1

わかりました。理解できたと思いますが、今はgitHubのクレデンシャルを要求されており、「タイムアウト」エラーが発生したため、クレデンシャルを入力できません。

これは私がしたことです:

プロジェクトにリモートリポジトリを追加します。

repo.git.remote({}、'add'、'RemoteRepoName'、' https: //github.com/ /.git')

githubにプッシュ

pusher = repo.git.push({:process_info => true、:progress => true}、'RemoteRepoName'、'master')

于 2013-04-10T20:49:06.973 に答える