jbr*_*aud 6 ruby git libgit2 rugged
我试图以编程方式使用Rugged(libgit2的Ruby绑定)创建对现有存储库的提交.我试图遵循Rugged README中提供的文档,但我认为它与代码库的当前状态不完全匹配.我尝试运行以下代码时不断收到错误:
require 'rugged'
# Create an instance of the existing repository
repo = Rugged::Repository.new('/full/path/to/repo')
# grab the current Time object for now
curr_time = Time.now
# write a new blob to the repository, hang on to the object id
oid = repo.write("Some content for the this blob - #{curr_time}.", 'blob')
# get the index for this repository
index = repo.index
# add the blob to the index
index.add(:path => 'newfile.txt', :oid => oid, :mode => 0100644)
curr_tree = index.write_tree(repo)
curr_ref = 'HEAD'
author = {:email=>'email@email.com',:time=>curr_time,:name=>'username'}
new_commit = Rugged::Commit.create(repo,
:author => author,
:message => "Some Commit Message at #{curr_time}.",
:committer => author,
:parents => [repo.head.target],
:tree => curr_tree,
:update_ref => curr_ref)
Run Code Online (Sandbox Code Playgroud)
我得到的当前错误说该index.add线路有问题.它说TypeError: wrong argument type nil (expected Fixnum).
任何帮助更好地理解如何创建一个坚固的新提交将非常感激.
更新
我刚刚通过运行更新Rugged 0.16.0到Rugged 0.18.0.gh.de28323了gem install --prerelease rugged.我上面详述的代码现在似乎有效.我不确定为什么它不适用于0.16.0.这个人似乎有同样的问题,他们在这个答案中详细说明.
看起来您正在传递nil到index.add不接受错误的地方,而该行中的错误只是未能提前检查错误的症状。第二个参数repo.write应该是一个符号,而不是一个字符串,因此它很可能返回nil以发出错误信号。通过:blob而不是'blob'应该修复它。
您可以查看https://github.com/libgit2/docurium/blob/master/lib/docurium.rb#L115-L116以及我们用来生成 libgit2 自己的文档的周围代码。