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

时间:2012-01-30 19:41:04

标签: c# git version-control

有没有人知道C#的Git库允许客户端代码添加&修改内存中的存储库文件?我有一个裸存储库,我想以实用的方式进行添加和修改。因为它是一个裸存储库,所以我不想将文件写入文件系统。这样的事情是否存在?

谢谢!

2 个答案:

答案 0 :(得分:2)

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(请参阅here)看起来像 something promising

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

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

答案 1 :(得分:0)

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