【发布时间】:2018-12-03 17:39:30
【问题描述】:
我在一个存储库中拥有大量项目。我想确定所有这些项目的波动性,即最后一次提交影响每个项目的时间。我有一个所有项目路径的列表,我试图找到每个项目的最后一次提交。我的代码如下所示:
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 个提交。我怀疑我做错了什么,比如当我需要更具体的东西时加载整个回购图,但我一直无法找到更好的方法。
想法?
【问题讨论】:
标签: libgit2sharp