历史记录在子目录

History log in sub directory

我正在尝试弄清楚如何获取子目录的提交日志。根据 this thread,它应该在 libgit2sharp.

中工作正常

为了测试,我使用了一个小型存储库,https://github.com/ornatwork/nugetpackages.git 整个存储库共有 8 个条目。

我在根目录 c:/nugetpackages 中本地克隆了它,我可以从那个文件夹中克隆它。
git 日志 -- devbox
在命令行上,我将按预期获得 /devbox 子目录的两个提交条目。

使用 libgit2sharp

执行相同操作的 Xunit 测试代码示例
  [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:\nugetpackages\devbox");
      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

更新:

Follow up, is there a way to combine subdir with a filter, for example. CommitFilter filter = new CommitFilter(); filter.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}");
    }
}