我在单个存储库中拥有大量项目。我想确定所有这些项目的波动性,即最后一次提交何时影响每个项目。我已经获得了所有项目路径的列表,并且正在尝试查找每个项目的最后一个提交。我的代码如下:
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;
最多可能需要八分钟才能完成。据我所知,这些文件夹没有什么特别复杂的...其中一个样本显示了二十次提交。我怀疑我在做一些错误的事情,例如当我需要更具体的信息时加载整个回购图,但是我一直无法找出更好的方法。
有想法吗?
答案 0 :(得分:2)
您的要求是通过lib2gitsharp软件包生成以下git命令。
$ git log -1 -C“ relativePath”
您可以借助lib2gitsharp中的Take(numberOfCommits)扩展名来限制提交的大小。请尝试将Take(1)放在First()之前,如下所示;
var commit = repo.Commits.QueryBy(relativePath, filter).Take(1).First().Commit;
希望这会有所帮助。