我试图找出从两个不同的提交中获取相同文件源的方法,但是我只是找不到关于此的任何文档。
我知道有Repository.Dif.Compare
一个有用的方法,但是我只能从中获取Patch,并且没有太大帮助,因为我想实现自己的并排比较。
有人可以提供例子吗?在libgit2sharp中甚至可能吗?
我正在尝试找出从两个不同的提交中获取同一文件源的方法[...]在libgit2sharp中甚至可能吗?
每种Commit
或Tree
类型都公开一个字符串索引器,该索引器允许一个人TreeEntry
通过其路径直接访问a 。ATreeEntry
可以是一个Blob
(即文件),另一个Tree
(即目录)或一个GitLink
(即子模块)。
下面的代码提供了一个快速示例,说明如何在两次不同的提交中访问同一文件的内容。
[Fact]
public void CanRetrieveTwoVersionsOfTheSameBlob()
{
using (var repo = new Repository(BareTestRepoPath))
{
var c1 = repo.Lookup<Commit>("8496071");
var b1 = c1["README"].Target as Blob;
var c2 = repo.Lookup<Commit>("4a202b3");
var b2 = c2["README"].Target as Blob;
Assert.NotEqual(b1.ContentAsText(), b2.ContentAsText());
}
}
我想实现自己的并排比较
根据要处理的Blob的大小,您可能不愿意在内存中检索全部内容。在这种情况下,blob.ContentStream
可能会派上用场。
我错过了演员的斑点,以找出其余的
FWIW,您可以依靠revparse表达式直接访问Blob
。结果,以下内容也应工作;-)
[Fact]
public void CanRetrieveTwoVersionsOfTheSameBlob_ReduxEdition()
{
using (var repo = new Repository(BareTestRepoPath))
{
var b1 = repo.Lookup<Blob>("8496071:README");
var b2 = repo.Lookup<Blob>("4a202b3:README");
Assert.NotEqual(b1.ContentAsText(), b2.ContentAsText());
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句