在这个libgit2sharp issue评论中的讨论中强调了我可以针对对象数据库创建提交?提交Git对象数据库有什么好处?
什么是提交到对象数据库?
为什么是在做一个普通的Git添加和git的承诺有利?
我试图导入其他源代码控制系统,SourceGear,到Git的提交历史。目前,我的逻辑只是简单地遍历其他源控制系统中的文件,获取某个版本及其提交信息,然后执行repo.Index.Stage
,然后执行repo.Commit
。我假设这是正确的,我应该使用对象数据库吗?
在这个libgit2sharp issue评论中的讨论中强调了我可以针对对象数据库创建提交?提交Git对象数据库有什么好处?
什么是提交到对象数据库?
为什么是在做一个普通的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,可以创建Blobs
或Trees
。一些可能使用的样本可以在单元测试中找到。
什么是提交到数据库obect?
事实上,一个Commit总是被存储到对象数据库中。新的API公开了一些较低级别的操作,这些操作可能适用于某些高级脚本操作。
为什么优先于做一个正常的git add和git commit?
哇...这是一个广泛的子问题。并没有回答的有限列表;-)关闭我的头顶,这里有一些可能的答案:
working directory -> index -> odb
工作流程,一次只能准备一次提交。使用此API,您可以在非顺序流中创建Blob和树,然后在最后时刻决定哪个树将与Commit相关联。此刻我的逻辑循环遍历文件中的其他源代码控制系统,取得了一定的版本和它提交信息,并做了repo.Index.Stage然后repo.Commit。我假设这是正确的,我应该使用对象数据库吗?
考虑到您的使用情况,它看起来像标准工作流程就够了。