如何使用libgit2sharp或Octokit获取文件的旧内容?

时间:2016-06-22 02:44:25

标签: git libgit2sharp octokit

以下StackOverflow条目介绍了如何使用libgit2sharp从GitHub.com获取文本文件的最新内容: How to get file's contents on Git using LibGit2Sharp?

但是我需要输入大概一个月前的日期时间,并获取该日期时的内容。我以为我有一个解决方案,但在达到足够远之前就失败了:

// This C# fails after returning a few entries. After 10 minutes says out of memory.

IEnumerable<LogEntry> enumbLogEntries_LogEntry_qb = repo.Commits
  .QueryBy("articles/sql-database/sql-database-get-started.md");

foreach (LogEntry logEntry in enumbLogEntries_LogEntry_qb)
{
  Console.WriteLine(logEntry.Commit.Committer.When); // Date.

  // I hope to use logEntry.Target to get the blob of content, I think.
}

我也在尝试使用Octokit for .NET,但我只能获得最新的内容。任何解决方案将不胜感激。我承认,重要的GIT术语可以让我无法理解答案。

1 个答案:

答案 0 :(得分:1)

你可以尝试这样的事情:找到相关日期/时间存在的最新提交(我将在下面称之为dt)。然后,在该提交中找到该文件并获取其内容(如果该提交中存在该文件)。

using LibGit2Sharp;
using System.IO;

DateTimeOffset dt = DateTimeOffset.Now;  // replace this with the desired D/T
var c = repo.Commits
    .Where(c_ => c_.Author.When < dt)
    .OrderByDescending(c_ => c_.Author.When)
    .FirstOrDefault()
    ;
if (c != null)
{
    Tree tree = c.Tree;
    Blob blob = (Blob)(tree["path/to/file"].Target);
    StreamReader reader = new StreamReader(blob.GetContentStream());
    // read the file with 'reader'
}