有一个裸存储库,我有一个提交ID,并希望在没有克隆的情况下读取该提交的所有文件。
这个repository.Lookup<Tree>(repository.Commits.First().Tree.Sha)
代码只提供了提交中的文件,但我还想要该级别存在的其他文件。
怎么做?
答案 0 :(得分:0)
我对您的问题的理解是,您愿意访问提交的全部内容,而不仅仅是提交的第一级。下面的代码将对裸(或标准)存储库起作用,并允许用户递归访问和检查提交的内容。
为了让您更容易测试它,它会在控制台输出中转储信息(git对象元数据和blob内容)。
RecursivelyDumpTreeContent(repo, "", commit.Tree);
[...]
private void RecursivelyDumpTreeContent(IRepository repo, string prefix, Tree tree)
{
foreach (var treeEntry in tree)
{
var path = prefix + treeEntry.Name;
var gitObject = treeEntry.Target;
var meta = repo.ObjectDatabase.RetrieveObjectMetadata(gitObject.Id);
Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", gitObject.Id, treeEntry.Mode, treeEntry.TargetType, meta.Size, path);
if (treeEntry.TargetType == TreeEntryTargetType.Tree)
{
RecursivelyDumpTreeContent(repo, path + "/", (Tree)gitObject);
}
if (treeEntry.TargetType == TreeEntryTargetType.Blob)
{
Console.WriteLine((((Blob)gitObject).GetContentText()));
}
}
}
您是否准确了解您要访问的特定文件的路径,请使用Commit
类型公开的索引器,以便直接访问您GitObject
的{{1}}后。
例如:
var blob = commit["path/to/my/file.txt"].Target as Blob;