如何从两个不同的提交中获取同一文件的源代码?

格式

我试图找出从两个不同的提交中获取相同文件源的方法,但是我只是找不到关于此的任何文档。

我知道有Repository.Dif.Compare一个有用的方法,但是我只能从中获取Patch,并且没有太大帮助,因为我想实现自己的并排比较。

有人可以提供例子吗?在libgit2sharp中甚至可能吗?

空令牌

我正在尝试找出从两个不同的提交中获取同一文件源的方法[...]在libgit2sharp中甚至可能吗?

每种CommitTree类型都公开一个字符串索引器,该索引器允许一个人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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将同一文件包含到两个不同的程序包中-Yocto

如何在同一分支的两个不同提交之间区分同一文件?

如何检查两个不同的文件引用“字符串”是否引用同一文件?

从两个不同的程序访问同一文件是否正确?

检查两个文件指针是否指向Python中的同一文件

如何将两个txt文件中的数字相加并将其写入同一文件?

如何创建同一文件js的两个组件?

Java:如何处理试图修改同一文件的两个过程

如何区分同一文件的两个部分?

在Photoshop中并排打开同一文件的两个副本

如何从bash中的不同输出保存在同一文件的两列中

合并Linux中的两个目录以获取所有唯一文件

比较同一文件夹的两个版本,并获得不同文件的名称

为什么同一文件的两个tarball的md5哈希值不同?

在同一文件中有两个具有不同样式的链接

如何在同一个Activity中调用将在同一文件上但在不同时间使用的两个方法?

有没有办法用vim在两个不同的终端中同时编辑同一文件?

如何识别两个文件描述符是否指向同一文件

如何在同一文件系统上合并两个文件夹?

同一文件的两个文件描述符

如何查找同一文件的两个版本之间的块级别或磁盘级别更改?

是否可以在IDEA中为同一文件打开两个选项卡?

比较同一文件 Linux 中两个位置之间的 2 个值

读写两个进程的同一文件是否需要lockfile

同一文件上的两个连续fwrite

两个进程打开同一文件进行写入

同一fd在不同进程中如何指向同一文件?

如何将两个node.js链码放在同一文件夹中

sqlalchemy:在同一文件中创建两个数据库