2013-04-26 78 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