2012-05-24 33 views
3

在这个libgit2sharp issue评论中的讨论中强调了我可以针对对象数据库创建提交?提交Git对象数据库有什么好处?

什么是提交到对象数据库?

为什么是在做一个普通的Git添加和git的承诺有利?

我试图导入其他源代码控制系统,SourceGear,到Git的提交历史。目前,我的逻辑只是简单地遍历其他源控制系统中的文件,获取某个版本及其提交信息,然后执行repo.Index.Stage,然后执行repo.Commit。我假设这是正确的,我应该使用对象数据库吗?

回答

4

工作对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,可以创建BlobsTrees。一些可能使用的样本可以在单元测试中找到。

什么是提交到数据库obect?

事实上,一个Commit总是被存储到对象数据库中。新的API公开了一些较低级别的操作,这些操作可能适用于某些高级脚本操作。

为什么优先于做一个正常的git add和git commit?

哇...这是一个广泛的子问题。并没有回答的有限列表;-)关闭我的头顶,这里有一些可能的答案:

  • 这使您可以直接创建Blob和/或树木独立于任何提交
  • 使用标准working directory -> index -> odb工作流程,一次只能准备一次提交。使用此API,您可以在非顺序流中创建Blob和树,然后在最后时刻决定哪个树将与Commit相关联。
  • 此API还允许明确选择承诺创建的父项应该承担的内容
  • Git是内容寻址文件系统,是一个不可变的只附加对象数据库。除了标准的源代码控制之外,这个API还有其他用途。

此刻我的逻辑循环遍历文件中的其他源代码控制系统,取得了一定的版本和它提交信息,并做了repo.Index.Stage然后repo.Commit。我假设这是正确的,我应该使用对象数据库吗?

考虑到您的使用情况,它看起来像标准工作流程就够了。

相关问题