如何为libgit2提交Ruby绑定

时间:2012-09-29 03:33:03

标签: ruby git libgit2

有没有人知道如何使用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=编辑它,但后来我得到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 )

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

2 个答案:

答案 0 :(得分:0)

Rugged::Commit.create(repo, data)不是自述文件中的内容。你在运行什么代码?这看起来就像你错过了一个必填字段。您填写的是哪些领域以及如何填写?

答案 1 :(得分:0)

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,但不会更新任何引用,因此无法从任何分支访问提交。