有没有人知道C#的Git库允许客户端代码添加&修改内存中的存储库文件?我有一个裸存储库,我想以实用的方式进行添加和修改。因为它是一个裸存储库,所以我不想将文件写入文件系统。这样的事情是否存在?
谢谢!
答案 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的最新功能。