C# 提交到Git对象数据库的好处是什么?
在本文中的评论讨论中,突出强调了我可以针对对象数据库创建提交吗 什么是提交到对象数据库 为什么它比普通的git添加和git提交更有优势C# 提交到Git对象数据库的好处是什么?,c#,.net,git,libgit2sharp,C#,.net,Git,Libgit2sharp,在本文中的评论讨论中,突出强调了我可以针对对象数据库创建提交吗 什么是提交到对象数据库 为什么它比普通的git添加和git提交更有优势 我正在尝试将另一个源代码管理系统SourceGear的提交历史导入Git。此时,我的逻辑只是在另一个源代码管理系统中的文件上循环,获取某个版本及其提交信息,然后执行repo.Index.Stage,然后执行repo.commit。我假设这是正确的,我应该使用对象数据库吗?在使用LibGit2Sharp时,提交的标准方式实际上是以下工作流: using (var
我正在尝试将另一个源代码管理系统SourceGear的提交历史导入Git。此时,我的逻辑只是在另一个源代码管理系统中的文件上循环,获取某个版本及其提交信息,然后执行
repo.Index.Stage
,然后执行repo.commit
。我假设这是正确的,我应该使用对象数据库吗?在使用LibGit2Sharp时,提交的标准方式实际上是以下工作流:
using (var repo = new Repository("path/to/a/repository"))
{
// do stuff
repo.Index.Stage("path/to/file1");
repo.Index.Stage("path/to/file2");
repo.Commit("This is my commit", ....);
// more stuff
}
但是,这需要一个非裸存储库:一个具有工作目录和索引的存储库
Stage()
调用将文件从工作目录注册到索引中。Commit()
调用将索引内容的不可变时间戳快照创建到对象数据库中
从v0.9版开始,LibGit2Sharp允许直接创建提交到对象数据库中,而无需Stage()
任何操作。事实上,这甚至适用于裸存储库
除了提交之外,使用新的ObjectDatabase
API,还可以创建blob
或树
。可以在单元测试中找到一些可能使用的示例
什么是提交到obect数据库
事实上,提交最终总是存储到对象数据库中。新的API公开了一些较低级别的操作,这些操作在一些高级脚本操作中可能很方便
为什么它比普通的git添加和git提交更有优势
哇。。。这是一个广泛的子问题。答案的列表不是有限的;-)我脑海中浮现出一些可能的答案:
- 这允许您独立于任何提交直接创建blob和/或树
- 使用标准的
工作流,一次只能准备一个提交。使用此API,您可以在非顺序流中创建blob和树,然后在最新时刻决定哪个树将与提交关联工作目录->索引->odb
- 此API还允许显式选择要创建的提交应该包含哪些父级
- Git是一个内容可寻址的文件系统,是一个不可变的、仅附加的对象数据库。此API促进了标准源代码管理以外的其他类型的使用