1

有谁知道如何使用 libgit2 的 ruby​​ 绑定(“坚固的”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 加固 Github 页面:https ://github.com/ libgit2/坚固的

编辑:我如何重现这个;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 )

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

4

1 回答 1

0

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

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

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

Rugged gem 的 Rubygems 页面显示有一个可用的 0.17.0.b6 版本,这让我感到困惑,因为我从未遇到过gem. 该版本必须是预发布版本,因为在gem install --prerelease rugged安装了 0.17.0.b6 版本之后(以及)。

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

One extra note, the documentation that I've read doesn't mention it but the source code in ext/rugged_commit.c has comments that mention an :update_ref=>'' option when creating a commit which you can use to update the ref to point to the new commit. Without this option, the commit will be created and written to the ODB, but no references will be updated and so the commit won't be accessible from any of your branches.

于 2012-09-30T07:27:07.637 回答