1

我在我的 rails 应用程序中使用了 Grit,并且我正在创建一个我知道有效的提交:

        repo = Repo.new(full_path, {:is_bare => true})
        fname = "snippet"
        File.open("#{full_path}/#{fname}", 'w') {|f| f.puts(data)}
        Dir.chdir("#{full_path}") {repo.add(fname)}
        if repo.commit_index('his amazing commit')
            logger.info "commit succeeded"
        else
            logger.info "commit failed"
        end

然后,我试图获取显示为空的 blob:

            tree = Tree.construct(repo, 'master')
            data = tree.blobs.map {|b| repo.blob(b.id).data}
            logger.info "data.first = #{data.first}"
            data.first

我在这里做错了什么?

4

1 回答 1

0

我猜您的存储库的根级别中没有文件。

tree.blobs返回根级别的文件,并tree.trees返回目录。要获取存储库中的所有文件,您需要递归遍历树。

我写了一些例子:

require 'grit'

def traverse(tree, basename)
  tree.blobs.each do |blob|
    puts "#{basename}/#{blob.basename}"
  end
  tree.trees.each do |subtree|
    traverse(subtree, "#{basename}/#{subtree.basename}")
  end
end

repo = Grit::Repo.new('.')
root = Grit::Tree.construct(repo, 'master')
traverse(root, '')
于 2012-03-07T02:59:46.893 回答