GitSharp предоставляет перегрузку Create()
для своего типа Blob
, что позволяет осуществлять прямую запись в базу данных Git Object без необходимости промежуточного файл в рабочем каталоге.
В приведенном ниже модульном тесте (слегка исправленном из 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);
}
}
EDIT:
Возможно, вы также захотите взглянуть на NGit . Это автоматизированный порт JGit для .Net. В отличие от GitSharp, он все еще поддерживается.
ObjectInserter
(см. здесь ) выглядит как что-то многообещающее .
Примечание: Если вы хотите использовать Git в качестве базы данных объектов, непосредственно записывая объекты без использования Dance Dance, обязательно создайте ссылку (в .git/refs
), чтобы предотвратить их обрезается при git gc
запуске.
Примечание 2: Объекты Git доступны только для чтения, поэтому вы не сможете "изменить" Blob
. Однако, если вы создали ссылку, указывающую на нее, вы можете создать новую «обновленную» Blob
и изменить цель ссылки, чтобы она указывала на новую «версию».