.Net Git库,允许在内存中添加/修改文件

本文关键字:添加 修改 文件 内存 Git Net | 更新日期: 2023-09-27 18:22:06

有人知道C#的Git库吗?它允许客户端代码添加&修改内存中的存储库文件?我有一个空的存储库,我想务实地对其进行添加和修改。因为它是一个裸存储库,所以我不想将文件写入文件系统。这样的东西存在吗?

谢谢!

.Net Git库,允许在内存中添加/修改文件

GitSharp在其Blob类型上暴露了Create()重载,这允许直接写入Git对象数据库,而不需要工作目录中的中间文件。

下面的单元测试(从BlobTests.cs略微修补)展示了这样的功能:

[Test]
public void WriteBlob()
{
    using (var repo = GetTrashRepository())
    {
        blob = Blob.Create(repo, "and this is the data in me'r'n'r'n");
        Assert.AreEqual("95ea6a6859af6791464bd8b6de76ad5a6f9fad81", blob.Hash);
        var same_blob = new Blob(repo, blob.Hash);
        Assert.AreEqual(Encoding.UTF8.GetBytes("and this is the data in me'r'n'r'n"), same_blob.RawData);
    }
}

编辑:

您可能还愿意查看NGit。它是JGit到.Net的一个自动化端口。与GitSharp相反,它仍然得到维护。

ObjectInserter(请参见此处)看起来像是有前途的。

注意:如果您愿意使用Git作为对象数据库,通过直接编写对象而不使用Commit舞蹈,请确保创建一个引用(在.git/refs中),以防止它们在git gc启动时被修剪。

注意2:Git对象是只读的,因此您将无法"修改"Blob。但是,如果创建了指向它的引用,则可以创建新的"更新"Blob,并将引用的目标更改为指向新的"版本"。

文件系统上的裸存储库IS。如果您想要一些快速的内存操作,请使用ram磁盘。通过这种方式,您仍然可以获得git的最新功能。