質問

libgit2のRubyバインディング( 'Rugged' GEM)を使用してコミットを作成する方法を知っていますか?私は私が見つけることができるすべての例を、libgit2の使用ガイドとrugged gem githubページで試し、そしてコミットを作成または編集するための試験のどれも作業していません。

これは、Libgit2自体の場合を除き、これまでのところ、Rubyバインディングではなく、これまでのところでコミットする方法を見つけようとしています。 http://librelist.com/browser//19/iNity-a-repository-adding-files-to-the-index-and-committing/#d94ce8df18ff0202CE904180286A4A85

頑丈な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 < BR> ruggedドキュメント0: http://rubydoc.info/gems/rugged/0.16.0/frames.
rugged githubページ: https://github.com/libgit2/rugged

編集:これを再現する方法 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 )
.

しかし、それはちょうど以前とまったく同じエラー出力を生み出しました。

役に立ちましたか?

解決 2

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

掘削と多くの実験の後、私は問題を考え出したと思います。

gem install ruggedをしたとき、それは私に0.16.0バージョンのバージョンを与えました。これは問題を抱えていたバージョンでした、そして私がGEMに付属のテストを試みたときに失敗したテストに失敗しました。

rugged gemのRubyGemsページには、まだgemの ' - Prerelease'オプションが発生したことがないため、私を混同しました。 gem install --prerelease ruggedバージョン0.17.0.B6をインストールした後(同様に)を実行した後に、そのバージョンは事前になければなりません。

今0.17.0.B6では、問題なく文書に従うことができます。

追加の注意事項、私が読んだ文書は言及していませんが、ext/rugged_commit.cのソースコードには、REFを更新するために使用できるコミットを作成するときに:update_ref=>''オプションを指定するコメントがあります。 。このオプションがなければ、コミットは作成されてODBに書き込まれますが、参照は更新されず、コミットは分岐のいずれかからアクセスできません。

他のヒント

Rugged::Commit.create(repo, data)はReadmeに含まれているものではありません。どのコードを実行していますか?それは単にあなたが必要なフィールドを逃しているように見えます。あなたはどのフィールドを記入していますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top