如何为libgit2提交Ruby绑定

有没有人知道如何使用libgit2的ruby绑定(’rugged’gem)创建提交? 我已经尝试了所有可以找到的示例,在libgit2使用指南和坚固的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= like命令编辑它,但随后我得到noMethodErrors,因为没有’message =’方法。

libgit2使用指南: http ://libgit2.github.com/api.html
坚固耐用的文档0: http : //rubydoc.info/gems/rugged/0.16.0/frames
Rugged Github页面: https : //github.com/libgit2/rugged

编辑:我如何重现这一点; http://pastebin.com/wnta8FWm
Edit_n + 1:我也尝试过使用树的sha而不是Rugged :: Tree对象

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

但这只产生了与以前完全相同的错误输出。

Rugged::Commit.create(repo, data)不是README中的内容。 你在运行什么代码? 这看起来就像你错过了一个必填字段。 你在填什么哪个领域?

TL; DR —这就是为我解决的问题: gem install --prerelease rugged

经过一些挖掘和大量的实验,我想我已经找到了问题所在。

当我做gem install rugged它给我版本0.16.0。 这是我遇到问题的版本,当我尝试使用gem附带的测试时,许多测试都失败了,许多失败似乎与提交和编写提交有关。

Rugged gem的Rubygems页面显示有一个0.17.0.b6版本可用,这使我感到困惑,因为我从未遇到过gem的’–prelease’选项。 该版本必须是预发行版,因为在gem install --prerelease rugged版本0.17.0.b6(以及)。

现在有了0.17.0.b6,我可以毫无问题地遵循文档。

还有一点需要注意,我读过的文档没有提到它,但是ext/rugged_commit.c的源代码在创建提交时有一个提及:update_ref=>''选项的注释,可用于更新引用指向新提交。 如果没有此选项,将创建提交并将其写入ODB,但不会更新任何引用,因此无法从任何分支访问提交。