以下stackoverflow条目说明了如何通过使用libgit2sharp从github.com获取文本文件的最新内容:如何使用libgit2sharp在git上获取文件的内容?
,但我需要输入一个月前的日期时间,并像在该日期时间一样恢复内容。我以为我有一个解决方案,但是在距离足够远之前失败了:
// 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.
}
我也正在尝试使用.NET的Octokit,但我只能获得最新的内容。任何解决方案都将不胜感激。我承认,沉重的git术语可以使我难以理解。
您可以尝试这样的事情:查找在相关日期/时间时存在的最新提交(下面我将其称为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'
}