有谁知道如何使用 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) 不是自述文件中的内容。你正在运行什么代码?这看起来就像您缺少一个必填字段。您正在填写哪些字段以及如何填写?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top