2

我正在开发一个列出 .git 存储库中所有文件的应用程序。我有一种将树变成平面列表的工作方式,但速度慢(300 毫秒)

这是 Tree 对象的源代码https://github.com/go-git/go-git/blob/master/plumbing/object/tree.go

我的工作解决方案:

    repo, err := git.PlainOpen("./repository")
    commit, err := repo.CommitObject(ref.Hash())
    tree, err := commit.Tree()
    var files []string
    tree.Files().ForEach(func(f *object.File) error {
        files = append(files, f.Name)
        return nil
    })
    return files

但是,如前所述,这需要大约 300 毫秒才能运行。做时git ls-files需要< 50ms。作为一个从 Go 开始的人,我是否遗漏了一些明显的东西?

4

1 回答 1

1

我认为tree.Files()很慢,因为它检索blob树(和子树)中列出的每个。如果您想要获取的只是每个 blob 的路径(即文件名),那么您最好使用 aNewTreeWalker来获取每个条目的名称。

于 2020-08-26T15:42:26.437 回答