gpt4 book ai didi

libgit2sharp - 如何使用 LibGit2Sharp 获取文件夹的最后一次提交?

转载 作者:行者123 更新时间:2023-12-04 05:26:15 26 4
gpt4 key购买 nike

我在一个存储库中有大量项目。我想确定所有这些项目的波动性,即上次影响每个项目的提交的时间。我有所有项目路径的列表,我正在尝试为每个路径找到最后一次提交。我的代码如下所示:

    public CommitInfo GetLastCommit(string path)
{
// resolve any \..\ and pathing weirdness
path = Path.GetDirectoryName(Path.GetFullPath(path));

var relativePath = path.Substring(BaseRepoPath.Length + 1).Replace("\\", "/");

if (!CommitCache.TryGetValue(relativePath, out CommitInfo result))
{
var options = new RepositoryOptions()
{
WorkingDirectoryPath = BaseRepoPath
};

using (var repo = new Repository(BaseRepoPath, options))
{
var filter = new CommitFilter()
{
IncludeReachableFrom = BranchName
};

var commit = repo.Commits.QueryBy(relativePath, filter).First().Commit;

result = new CommitInfo
{
When = commit.Author.When.DateTime,
Who = commit.Author.Name,
Message = commit.Message,
Files = commit.Tree.Select(x => x.Name).ToList()
};

repo.Dispose();
}

CommitCache.Add(relativePath, result);
}

return result;
}

这有效,但实际检索提交的行:
var commit =  repo.Commits.QueryBy(relativePath, filter).First().Commit;

最多可能需要八分钟才能完成。据我所知,这些文件夹并没有什么特别复杂的地方……其中一个示例显示可能有 20 个提交。我怀疑我在做一些错误的事情,比如当我需要更具体的东西时加载整个 repo 图,但我一直无法找到更好的方法。

想法?

最佳答案

您的要求是通过 lib2gitsharp 包生成以下 git 命令。

$ git log -1 -C "relativePath"



您可以借助 lib2gitsharp 中的 Take(numberOfCommits) 扩展来限制提交的大小。请尝试将 Take(1) 放在 First() 之前,如下所示;
var commit =  repo.Commits.QueryBy(relativePath, filter).Take(1).First().Commit;

希望这可以帮助。

关于libgit2sharp - 如何使用 LibGit2Sharp 获取文件夹的最后一次提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53598990/

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