2013-04-26 75 views
3

我想要并行放置文件并同时落入不同的分支。平行舞台的最佳方式?

会有多个访问在同一时间。 repo.Index.Stage/repo.Commit API工作在相同的当前目录,所以我认为这是不可能的。

你们可以给我一些关于如何实现这一点的提示吗?一个大概的想法?

回答

4

从可行性的角度来看,我能想到的两种不同的选择:

考虑到“并行阶段文件”作为约束

“上演”在git的说法意味着使用索引。

为了在文件中并行展开,可以打开许多存储库实例,每个实例都接受另一对工作目录/索引。他们都在相同的对象数据库中创建对象。

这可以通过Repository构造函数的可选参数RepositoryOptions来实现。

看到这个this test为了第一次看到这是如何实现的。

备选方案,准系统版

另一种选择是使用索引并直接在对象数据库中创建对象。然而,这意味着什么都不会“上演”,并且Blob,Trees和Commits将不得不手工创建。

较低级别的API允许进行这种类型的操作。这个API甚至允许一个“提交”针对裸仓库。

请参阅有关如何实现这一目标的详细信息,ObjectDatabaseFixtureTreeDefinitionFixture测试套件。

此API只会在数据库中创建对象。你将不得不自己更新分支的提示。这可以通过Repo.Refs.Add()Repo.Refs.UpdateTarget()方法来实现。

+0

这是我想到的,但我担心,当我创建相同的对象两次,它会以某种方式打破:https://gist.github.com/txdv/5474093 – 2013-04-27 18:28:48

+0

@AndriusBentkus您可以安全地创建相同的对象(Commit,Tree,Blob)多次。其内容将被散列。如果散列已经存在于对象数据库中,则返回现有对象。不会发生碰撞。 – nulltoken 2013-04-27 18:55:47

+0

@AndriusBentkus这个答案有帮助吗? – nulltoken 2013-08-17 19:56:34