子目录中的历史日志



我想弄清楚如何获得子目录的提交日志。根据这个线程,它应该在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}");
    }
}

最新更新