2013-08-30 62 views
0

我使用Lib2GitSharp从其他系统的信息加入Git日志,我希望能够检索自某个日期(或日期之间)以来的所有git日志, 。从LibGit2Sharp返回特定日期以来的所有git日志

我在querying the log here上找到了文档,但似乎没有按日期查询日志的方法。什么将相当于

git log --since="2013-08-20" 

in LibGit2Sharp?

编辑 这似乎工作,但也许有更好和/或更优雅的方式?

using (var repo = new Repository(options.Repo)) 
{ 
    var since = new DateTime(2013, 8, 20); 
    var commits = repo.Commits.Where(c => c.Committer.When.CompareTo(since) > 0); 
    foreach (Commit commit in commits) 
    { 
     Console.WriteLine("A commit happened at " + commit.Committer.When.ToLocalTime()); 
    } 
} 

回答

2

使用Linq我可以查询存储库中的每个提交对象的日期,并只返回那些数据大于指定数据的提交对象。我不确定是否有更清洁,更快,更优雅的方式,但这确实有效。

using (var repo = new Repository(options.Repo)) 
{ 
    var since = new DateTimeOffset(new DateTime(2013, 8, 20)); 
    var filter = new CommitFilter { Since = repo.Branches }; 
    var commitLog = repo.Commits.QueryBy(filter); 
    var commits = commitLog.Where(c => c.Committer.When > since); 
    foreach (Commit commit in commits) 
    { 
     Console.WriteLine("A commit happened at " + commit.Committer.When.ToLocalTime()); 
    } 
} 

编辑:从nulltoken

+1

尼斯的答案成立的建议。 Upvoted!但有一些意见: - 'repo.Commits'将枚举可从HEAD访问的提交。如果您想记录不同分支的提交,请使用'repo.Commit.QueryBy()' - 优先于'DateTime'上的'DateTimeOffset'。当处理来自不同时区的提交者时,少得多headeaches ;-) – nulltoken

+0

我应该使用'var filter = new CommitFilter {Since = repo.Branches};'或'var filter = new CommitFilter {Since = repo.Branches};'?两者似乎都适用于我的示例数据集,但可能目前我还没有看到差异。 –

+0

'var filter = new CommitFilter {Since = repo.Branches}'将定位所有分支的所有提交。 'var filter = new CommitFilter {Since = new [] {repo.Branch [“master”],repo.Branch [“other”]}};'将目标分支为'master'和'other'。 – nulltoken