2016-06-22 1 views
1

Следующая запись StackOverflow объясняет, как получить последнюю версию содержимого текстового файла из github.com, используя libgit2sharp: How to get file's contents on Git using LibGit2Sharp?Как получить более старое содержимое файла с помощью libgit2sharp или Octokit?

Но мне нужно ввести дату-время, возможно, месяц назад, и вернуться как это было в этот день. Я думал, что решение, но оно не прежде, чем получить достаточно далеко:

// 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 для .NET, но опять же я могу получить только самое последнее содержание. Любое решение будет оценено по достоинству. Признаюсь, что тяжелая терминология GIT может сделать ответ непонятным для меня.

ответ

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' 
}