如何使用 libgit2 的 Ruby 绑定进行提交
题
有谁知道如何使用 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/rugged
编辑:我如何重现这个; http://pastebin.com/wnta8FWm
编辑_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
TL;DR --- 这就是为我解决的问题: gem install --prerelease rugged
经过一番挖掘和大量实验后,我想我已经解决了这个问题。
当我这样做的时候 gem install rugged
它给了我版本 0.16.0 。这是我遇到问题的版本,当我尝试 gem 附带的测试时,许多测试失败了,其中许多失败似乎与提交和写入提交有关。
Rugged gem 的 Rubygems 页面显示有一个 0.17.0.b6 版本可用,这让我很困惑,因为我从未遇到过 '--prerelease' 选项 gem
. 。该版本必须是预发行版,因为完成后 gem install --prerelease rugged
版本 0.17.0.b6 已安装(也)。
现在有了 0.17.0.b6,我可以毫无问题地遵循文档。
额外注意一点,我读过的文档没有提到它,而是中的源代码 ext/rugged_commit.c
有评论提到 :update_ref=>''
创建提交时的选项,您可以使用它来更新引用以指向新的提交。如果没有此选项,将创建提交并将其写入 ODB,但不会更新任何引用,因此无法从任何分支访问该提交。
其他提示
Rugged::Commit.create(repo, data)
不是自述文件中的内容。你正在运行什么代码?这看起来就像您缺少一个必填字段。您正在填写哪些字段以及如何填写?