【问题标题】:Best way to do parallel stages?进行并行阶段的最佳方法?
【发布时间】:2013-04-20 22:44:54
【问题描述】:

我想并行暂存文件并同时提交到不同的分支。

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

你们能给我一些关于如何实现这一目标的提示吗?大概的想法?

【问题讨论】:

    标签: c# libgit2 libgit2sharp


    【解决方案1】:

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

    将“并行暂存文件”视为约束

    git用语中的“staging”这个词暗示了索引的使用。

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

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

    请参阅此this test,以初步了解这是如何实现的。

    备用提案,准系统版

    另一个选择是使用索引并直接在对象数据库中创建对象。但是,这意味着不会“暂存”任何内容,并且必须手动创建 Blob、Trees 和 Commits。

    较低级别的 API 允许进行此类操作。该 API 甚至允许对一个裸存储库“提交”

    请参阅 ObjectDatabaseFixtureTreeDefinitionFixture 测试套件,了解有关如何实现此目的的更多信息。

    此 API 只会在数据库中创建对象。您必须自己更新分支的尖端。这可以通过Repo.Refs.Add()Repo.Refs.UpdateTarget() 方法来实现。

    【讨论】:

    • 这是我想出的,但我担心当我创建同一个对象两次时它会以某种方式中断:gist.github.com/txdv/5474093
    • @AndriusBentkus 您可以多次安全地创建同一个对象(Commit、Tree、Blob)。其内容将被散列。如果对象数据库中已经存在散列,则返回现有对象。不会发生碰撞。
    • @AndriusBentkus 这个答案有帮助吗?
    • 是的!谢谢你。我投了赞成票,所以我认为很明显我发现它很有帮助。
    • @AndriusBentkus 感谢您的支持!也许您也可以接受它;-) 顺便说一句,投票是匿名的(参见meta.stackexchange.com/questions/27534/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 2011-08-30
    • 2013-10-15
    • 1970-01-01
    相关资源
    最近更新 更多