我想弄清楚如何获得子目录的提交日志。根据这个线程,它应该在libgit2sharp中工作良好。
为了测试,我使用了一个小的repo, https://github.com/ornatwork/nugetpackages.git,整个存储库共有8个条目。
我把它克隆到本地的根目录c:/nugetpackages,从那个文件夹我可以做。
Git日志——devbox
我将得到/devbox子目录的两个提交条目。
样例Xunit测试代码使用libgit2sharp
[Fact]
public void testSub()
{
// Extract the git commit history
using (var repo = new Repository(@"C:nugetpackages"))
{
Trace.WriteLine("repo count=" + repo.Commits.Count());
// absolute path
IEnumerable<LogEntry> history = repo.Commits.QueryBy(@"C:nugetpackagesdevbox");
Trace.WriteLine("subdir count=" + history.Count());
}
}
我期望计数为8和2,但这是我得到的。
回购数= 8
子目录计数=0
我错过了什么
使用存储库基本目录中的相对路径:
using (var repo = new Repository(@"/Users/sushi/code/sushi/Xamarin.Forms.Renderer.Tests"))
{
D.WriteLine("repo count=" + repo.Commits.Count());
IEnumerable<LogEntry> history = repo.Commits.QueryBy(@"AlarmSO");
D.WriteLine("subdir count=" + history.Count());
}
裁判:FileHistoryFixture.cs
更新:
后续,是否有办法将subdir与过滤器结合使用,例如。CommitFilter filter = new CommitFilter();过滤器。FirstParentOnly = true;
不确定这是否是你要找的…如果不是,请在一个新的问题,谢谢。
using (var repo = new Repository(@"/Users/sushi/code/sushi/RealmJson"))
{
var subDir = "media";
var commits = repo.Commits.QueryBy(new CommitFilter { FirstParentOnly = true }).Where(
(Commit c) => c.Tree.Any(
(TreeEntry te) => te.Path.StartsWith(subDir, StringComparison.Ordinal)));
foreach (var commit in commits)
{
D.WriteLine($"{commit.Sha} : {commit.MessageShort}");
}
}