gpt4 book ai didi

c# - git 日志路径的 LibGit2Sharp 等价物是什么?

转载 作者:太空狗 更新时间:2023-10-29 12:51:48 25 4
gpt4 key购买 nike

如何获取包含特定文件的提交列表,即 LibGit2Sharpgit log path 的等价物。

它没有被实现还是我遗漏了什么?

最佳答案

我正致力于使用 LibGit2Sharp 将相同的功能添加到我的应用程序中。

我编写了下面的代码,它将列出包含该文件的所有提交。不包括 GitCommit 类,但它只是一个属性集合。

我的意图是让代码只列出文件已更改的提交,类似于 SVN 日志,但我还没有编写该部分。

请注意,代码尚未优化,这只是我的初步尝试,但我希望它有用。

/// <summary>
/// Loads the history for a file
/// </summary>
/// <param name="filePath">Path to file</param>
/// <returns>List of version history</returns>
public List<IVersionHistory> LoadHistory(string filePath)
{
LibGit2Sharp.Repository repo = new Repository(this.pathToRepo);

string path = filePath.Replace(this.pathToRepo.Replace(System.IO.Path.DirectorySeparatorChar + ".git", string.Empty), string.Empty).Substring(1);
List<IVersionHistory> list = new List<IVersionHistory>();

foreach (Commit commit in repo.Head.Commits)
{
if (this.TreeContainsFile(commit.Tree, path) && list.Count(x => x.Date == commit.Author.When) == 0)
{
list.Add(new GitCommit() { Author = commit.Author.Name, Date = commit.Author.When, Message = commit.MessageShort} as IVersionHistory);
}
}

return list;
}

/// <summary>
/// Checks a GIT tree to see if a file exists
/// </summary>
/// <param name="tree">The GIT tree</param>
/// <param name="filename">The file name</param>
/// <returns>true if file exists</returns>
private bool TreeContainsFile(Tree tree, string filename)
{
if (tree.Any(x => x.Path == filename))
{
return true;
}
else
{
foreach (Tree branch in tree.Where(x => x.Type == GitObjectType.Tree).Select(x => x.Target as Tree))
{
if (this.TreeContainsFile(branch, filename))
{
return true;
}
}
}

return false;
}

关于c# - git 日志路径的 LibGit2Sharp 等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13122138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com