【问题标题】:Looping through every commit in Git repository with LibGit2Sharp?使用 LibGit2Sharp 循环遍历 Git 存储库中的每个提交?
【发布时间】:2012-05-06 13:21:35
【问题描述】:

我尝试循环通过new LibGit2Sharp.Repository(path).Commits,但它似乎只通过主控中的提交(或者我猜 HEAD 指向哪里?)。

我将如何遍历存储库中的每个提交,而不管它在哪个分支中,并按提交发生时间(日期)的顺序遍历它们?

我这样做是为了像git log 这样的目的,按日期顺序列出不考虑分支的提交。

如果我还可以循环遍历未引用的提交(即,如果您 git reset 远离某些提交并且这些提交不再被引用并且即将获得 gc'd),则会获得奖励积分。

想法?

【问题讨论】:

    标签: c# git libgit2 libgit2sharp


    【解决方案1】:

    应该可以通过以下语法实现对git log --all 的支持

    using (var repo = new Repository(yourRepoPath))
    {
          var commits = repo.Commits.QueryBy(new Filter { Since = repo.Refs });
    }
    

    Filter 还公开了一个SortBy 属性来控制结果的顺序。默认排序(GitSortOptions.Time)将首先输出最近的提交。

    如果我还可以遍历未引用的提交,则可以加分

    无法访问 reflog 中的提交,也无法访问悬空的提交(还没有?)。然后,我猜没有加分:-)

    【讨论】:

    • 成功了!但我想了解为什么......如果repo.Commits 没有包含所有这些,那么在QueryBy 之后它现在包含剩余的提交吗?
    • 没有办法访问悬空提交(还没有?)。 没关系。你认为未来有可能吗?我想这有点像git reflog,但会跳过未提交的。
    • repo.Commitsrepo.Commits.QueryBy(new Filter { Since = repo.Head }) 的快捷方式。类似于git log
    • 悬空提交需要类似于git fsck --unreachable 的东西。 git reflog 应该是 LibGit2Sharp v0.10.0 的一部分
    • 然后我会等待 v0.10.0 发布 :)
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 2013-04-09
    相关资源
    最近更新 更多