使用 libgit2.sharp 构建跟踪文件的目录树

Building a directory tree of tracked files with libgit2.sharp

不确定我是否在正确的轨道上。

我一直在尝试通过递归构建 DictionaryInfo 对象并通过一些黑客忽略我忽略且未被 git 跟踪的文件和文件夹来在 Winforms 中构建文件夹结构树。

但我发现有一个 git 命令基本上可以为我完成所有这些工作。 git ls-tree -r -t --name-only head

我可以用 libgit2 实现吗?

谢谢!

编辑(添加解决方法)

所以现在我正在做这个

var info = new ProcessStartInfo("git", "ls-tree -r -t --name-only head")
{
  CreateNoWindow = true,
  RedirectStandardOutput = true,
  UseShellExecute = false,
  WorkingDirectory = "<repo workdir>",
};

var list = new List<TreeNode>();
using (var sr = Process.Start(info)?.StandardOutput)
{
  string? line;
  while ((line = sr?.ReadLine()) != null)
  {
    if (line != null)
      list.Add(new TreeNode(line));
  }
}
treeView.Nodes.Clear();
var rootDirectoryInfo = new DirectoryInfo(path);
treeView.Nodes.AddRange(list.ToArray());

LibGit2Sharp wiki 页面上有一个示例,它提供了一个起点来遍历索引中的所有条目:https://github.com/libgit2/libgit2sharp/wiki/git-ls-files#libgit2sharp

对于你的情况,我想你会想要删除检查条目阶段级别的块。