Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 提交到Git对象数据库的好处是什么?_C#_.net_Git_Libgit2sharp - Fatal编程技术网

C# 提交到Git对象数据库的好处是什么?

C# 提交到Git对象数据库的好处是什么?,c#,.net,git,libgit2sharp,C#,.net,Git,Libgit2sharp,在本文中的评论讨论中,突出强调了我可以针对对象数据库创建提交吗 什么是提交到对象数据库 为什么它比普通的git添加和git提交更有优势 我正在尝试将另一个源代码管理系统SourceGear的提交历史导入Git。此时,我的逻辑只是在另一个源代码管理系统中的文件上循环,获取某个版本及其提交信息,然后执行repo.Index.Stage,然后执行repo.commit。我假设这是正确的,我应该使用对象数据库吗?在使用LibGit2Sharp时,提交的标准方式实际上是以下工作流: using (var

在本文中的评论讨论中,突出强调了我可以针对对象数据库创建提交吗

什么是提交到对象数据库

为什么它比普通的git添加和git提交更有优势


我正在尝试将另一个源代码管理系统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和/或树
  • 使用标准的
    工作目录->索引->odb
    工作流,一次只能准备一个提交。使用此API,您可以在非顺序流中创建blob和树,然后在最新时刻决定哪个树将与提交关联
  • 此API还允许显式选择要创建的提交应该包含哪些父级
  • Git是一个内容可寻址的文件系统,是一个不可变的、仅附加的对象数据库。此API促进了标准源代码管理以外的其他类型的使用
此时,我的逻辑只是在另一个源代码管理系统中的文件上循环,获取某个版本及其提交信息,然后执行repo.Index.Stage和repo.commit。我假设这是正确的,我应该使用对象数据库吗

考虑到您的用例,看起来标准工作流已经足够了