公共GIT-SVN创建的仓库的公共和私人分支的推荐工作流程

时间:2010-10-04 06:12:12

标签: git github git-svn rebase

我正在尝试设置三件事:

  1. 公共SVN回购的公共GIT镜像
  2. 该repo的pubilc分支,其中多个贡献者可以发布补丁
  3. 来自#2
  4. 的公共回购的私人分支

    我知道如何做#1但我正在寻找关于#2和#3的建议:如何配置,如何保持同步,要避免的事情等等。

    以下是更多详情:

    我正在使用基于SVN的开源Web应用程序,其补丁提交机制缓慢且效率低下:补丁附加到问题跟踪系统中提交的错误,几周或几个月后这些补丁进入后备箱。

    一个单独的问题是我需要维护项目的私有分支,其中包含只有我公司需要的其他功能。但是我想要一个简单的方法让我的前叉保持与最新的官方提交保持同步。

    我想找出一个基于GitHub的解决方案来解决这两个问题。我想最终得到三件事:

    • “镜像” - SVN的GitHub镜像,通过我或其他补丁撰稿人运行的自动过程(如this article)自动与最新的SVN更改保持同步。这将使我或其他任何人可以轻松地创建项目的公共或私人分支,而无需乱搞SVN。
    • “contrib” - 对于我自己和我信任的一些补丁提交者,我想设置一个“镜像”的公共分支(或分支?),我们可以在其中提交补丁我希望看到最终出现在SVN中。这也可以使核心提交者更容易,更有效地将补丁拉回SVN。
    • “ourfork” - 最后,我们公司希望设置一个“contrib”的私有分支,其中多个开发人员可以添加仅适用于我们公司实施的私有功能

    一些特定问题:

    • 这种方法有意义吗?我们应该使用更简单的解决方案吗?
    • 如何确保“contrib”与“镜像”保持同步?只要它们不冲突,是否有GitHub魔法自动应用新提交?假设不是,确保contrib与其父级保持同步的良好工作流程是什么?
    • “ourfork”在逻辑上将成为“镜子”的孙子。什么是正确的工作流程,以保持它与“镜像”和“贡献”的变化保持同步?我应该将“contrib”设置为我唯一的遥控器吗?或者将两者都设置为遥控器 - 如果是这样,合并的正确过程是什么?

    我在@ rq的answer读到了一个类似的问题,我怀疑它回答了上面的大多数问题,但我是一个Git新手,我不确定他的回答是否适用于我的情况。

2 个答案:

答案 0 :(得分:2)

我建议您查看SubGit。它是一个创建并保持与SVN存储库链接的Git存储库同步的工具。它比其他解决方案更具优势:

  • 并发安全提交(如果贡献者中的一个提交到Git中 另一个在同一毫秒内进入SVN,没什么不好的 会发生:如果他们的变化发生冲突,他们中的一个就会得到一个 “过时的”错误)
  • 更好的SVN↔Git概念翻译,如忽略,EOL,任意 分支(不仅是主)和标签等。

但是有一个限制:你应该有权访问SVN服务器,所以也许你的基于GitHub的解决方案不起作用。但是你可以看看GitHab,Luna-tool和其他人(Git Server Like GitHub?)之类的GitHub替代品。

答案 1 :(得分:1)

我无法给出完整的答案,因为您的设置非常苛刻。

我可能会尝试让其中一个SVN提交者加入。然后我会让他负责在git-svn克隆顶部修改功能分支,然后将更改重新提交回Subversion。我最近做了一个非常简单的工作流示例in a screencast

这确实需要与SVN提交者之一进行非常紧密的反馈循环,并且为了使历史保持线性,您将不得不进行大量的重新定位,这再次使得难以使分布式存储库保持同步。我不确定这会对你有用。