1

libgit2 の ruby​​ バインディング (「頑丈な」gem) を使用してコミットを作成する方法を知っている人はいますか? libgit2 使用ガイドと rugged gem github ページで見つけられるすべての例を試しましたが、コミットを作成または編集するための例はどれも機能していません。

これは、これまでコミットする方法を理解しようとするのに役立ちました。ただし、これは libgit2 自体に対するものであり、ruby バインディングに対するものではありません。http://librelist.com/browser//libgit2/2011/2/19/initing-a-repository-adding-files-to-the-index-and-committing/#d94ce8df18ff0202ce904180286a4a85

Rugged Github ページの手順に従ってコミットしようとすると、次のようになります。

pry(main)> Rugged::Commit.create( repo, :author=>author, :message=>"Hello world\n\n", :committer=>author, :parents=>parents, :tree=>tree )
TypeError: wrong argument type nil (expected String)

libgit2 の使用ガイドに従おうとすると、基本的にはコミットを取得してから、commit.message=同様のコマンドを使用して編集するだけですが、「message=」メソッドがないため、noMethodErrors が発生します。

libgit2 使用ガイド: http://libgit2.github.com/api.html
Rugged ドキュメント 0: http://rubydoc.info/gems/rugged/0.16.0/frames
Rugged Github ページ: https://github.com/ libgit2/頑丈

編集:これを再現する方法; http://pastebin.com/wnta8FWm
Edit_n+1: Rugged::Tree オブジェクトの代わりにツリーの sha を使用してみました。

x=Rugged::Commit.create( repo, :author=>author, :message=>"Hello world\n\n", :committer=>author, :parents=>parents, :tree=>tree.oid )

しかし、それは以前とまったく同じエラー出力を生成しました。

4

1 に答える 1

0

TL;DR --- これは私のためにそれを修正したものです:gem install --prerelease rugged

掘り下げて多くの実験を行った後、私は問題を理解したと思います。

私がやったときgem install rugged、それは私にバージョン 0.16.0 を与えました。これは私が問題を抱えていたバージョンで、gem に付属のテストを試したところ、多くのテストが失敗し、失敗したテストの多くはコミットとコミットの書き込みに関連しているように見えました。

Rugged gem の Rubygems ページには、利用可能な 0.17.0.b6 バージョンがあることが示されていますgemgem install --prerelease ruggedバージョン 0.17.0.b6 を実行した後に (同様に) インストールされたため、そのバージョンはプレリリースである必要があります。

0.17.0.b6 では、問題なくドキュメントに従うことができます。

追加の注意として、私が読んだドキュメントには言及されていませんが、ソースコードには、新しいコミットを指すように参照を更新するために使用できるコミットを作成するときext/rugged_commit.cのオプションについて言及しているコメントがあります。:update_ref=>''このオプションがないと、コミットが作成され、ODB に書き込まれますが、参照は更新されないため、どのブランチからでもコミットにアクセスできません。

于 2012-09-30T07:27:07.637 に答える