我在一个存储库中有大量项目.我想确定所有这些项目的波动性,即最后一次提交是否会影响每个项目.我有一个所有项目路径的列表,我正在尝试为每个路径找到最后一次提交.我的代码看起来像这样:
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;
}
Run Code Online (Sandbox Code Playgroud)
这有效,但实际检索提交的行:
var commit = repo.Commits.QueryBy(relativePath, filter).First().Commit;
Run Code Online (Sandbox Code Playgroud)
最多可能需要8分钟才能完成.据我所知,这些文件夹并没有什么特别复杂......它们的一个例子显示可能有二十个提交.我怀疑我做错了,比如当我需要更具体的东西时加载整个repo图,但我还是找不到更好的方法.
思考?
小智 3
您的要求是通过 lib2gitsharp 包生成以下 git 命令。
$ git log -1 -C“相对路径”
您可以借助 lib2gitsharp 中的 Take(numberOfCommits) 扩展来限制提交的大小。请尝试将 Take(1) 放在 First() 之前,如下所示;
var commit = repo.Commits.QueryBy(relativePath, filter).Take(1).First().Commit;
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |