4

我正在尝试设置三件事:

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

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

这里有更多细节:

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

一个单独的问题是我需要维护一个项目的私有分支,其中包含只有我的公司才需要的附加功能。但是我想要一个简单的方法让我的 fork 跟上来自主干的最新官方提交。

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

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

一些具体问题:

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

我阅读了@rq 对类似问题的回答,我怀疑它回答了上述大部分问题,但我是 Git 新手,我不确定他的回答是否适用于我的情况。

4

2 回答 2

2

我建议你看看SubGit。它是一个创建和保持同步链接到 SVN 存储库的 Git 存储库的工具。与其他解决方案相比,它具有以下优势:

  • 并发安全提交(因此,如果一个贡献者在同一毫秒内提交到 Git 和另一个提交到 SVN,不会发生任何不好的事情:如果他们的更改发生冲突,其中一个只会收到“过期”错误)
  • 更好的 SVN↔Git 概念翻译,如忽略、EOL、任意分支(不仅是主分支)和标签等。

但是有一个限制:您应该有权访问 SVN 服务器,因此您的基于 GitHub 的解决方案可能无法正常工作。但是你可以看看 GitHub 的替代品,比如 GitLab、Luna-tool 和其他(Git Server Like GitHub?)。

于 2012-05-12T17:18:31.303 回答
1

我无法给出完整的答案,因为您的设置要求很高。

我可能会尝试让一名 SVN 提交者加入。然后我会让他负责在 git-svn 克隆之上重新设置功能分支,然后将更改提交回 Subversion。我最近在截屏视频中做了这个工作流的一个非常简单的例子。

不过,这确实需要与 SVN 提交者之一进行非常紧密的反馈循环,并且为了保持历史线性,您必须进行大量的变基,这再次使得分布式存储库难以保持同步。我不确定这是否适合您。

于 2010-10-10T17:46:47.083 回答