我正在开发一个应用程序,它列出了.git存储库中的所有文件。我有一种方法可以把一棵树变成一个扁平的列表,但是它非常慢(300 is )。
这是树对象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 as才能运行。在执行git ls-files时,需要小于50。作为一个从Go开始的人,我是不是遗漏了一些显而易见的东西?
发布于 2020-08-26 15:42:26
我认为tree.Files()很慢,因为它检索树(和子树)中列出的每个blob。如果您只想获得每个blob的路径(即文件名),那么最好使用NewTreeWalker来获取每个条目的名称。
https://stackoverflow.com/questions/63591370
复制相似问题