使用 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
对于你的情况,我想你会想要删除检查条目阶段级别的块。
不确定我是否在正确的轨道上。
我一直在尝试通过递归构建 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
对于你的情况,我想你会想要删除检查条目阶段级别的块。