頑丈またはグリットのコード例を探しており、その方法を示していますgit push
。
バックグラウンド
レーキタスクがdeploy:staging
ありdeploy:production
、アプリのデプロイに使用しています。
私はherokuにデプロイしているので、これらのタスクは基本的に次のことを行います。
- 最新のタグを取得します(例
git describe --abbrev=0
) 。 - そのタグで表されるバージョンを指定されたリモートにプッシュします(例
git push staging v1.00
) 。 - バージョンをherokuconfigvarに保存します(例
heroku config:add APP_VERSION=v1.00
) 。
(プッシュする前に新しいタグを作成することを忘れていないことを確認するためのチェックもあります。)
当初、私はこれらのCLIコマンドにRakefileからのシステムコールを使用していました。次に、gitとheroku-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">
どんな助けでも大歓迎です。