用于多个repo的Git方法,99%的代码相同

时间:2017-08-01 14:19:24

标签: git bitbucket git-flow

我们有一个项目(它是Drupal,但我认为这不会影响答案)我们必须部署到6个国家。没什么好看的。

但这是抓住了。所有6,让我们称之为“版本”,有一些略有不同的代码。意思是,并非所有逻辑,模板,预处理,数据库模式,......都必须应用于所有6个平台。因此,我们在BitBucket上有6个独立的存储库。但这些差异只是少数。 99%的代码适用于所有平台。

换句话说,如果我们有常规错误,我们需要修复此问题并手动将其复制/粘贴到其他5个回购页面。如果我们有特定国家/地区的问题/功能请求,则只能应用于该特定的回购 我们花在这上面的时间和错误的余地是很高的,所以我们正在寻找更好的解决方案。

对于保持这些repo与一般功能同步并且同步特定于国家/地区的代码,您有何建议?

也许我们需要制作一些部署脚本,它会在一些“After build”钩子中同步repo?是否有一些(第三方)工具,您认为可以帮助我们? 或者我们是否只需要查看我们的git-flow并尝试使用一个repo来解决所有问题?

4 个答案:

答案 0 :(得分:2)

您可以在此方案中使用git分支。我建议以下分支布局:

  • 你有一个分支,作为" base"分支。
  • 所有具体"版本"将有自己的分支,这将基于这个分支。

基本工作流程如下:

  • 如果您对特定的"版本进行了更改"你在特定的分支上做到了。
  • 如果您对所有"版本进行了更改"你在" base"中做了这个改变。分支并合并(或变基)到所有特定的"版本"分支。

答案 1 :(得分:1)

ideia有一个central分支,它保留了99%的公共代码,而不是拥有6个独立的存储库,从该中心分支创建了6个分支(让我们称这些分支为version1version2,...,version6)。

因此,当您需要修复公共部分的错误时,您只需要对central分支进行更改,并将rebase这些更改添加到给定版本的每个分支中。例如,对于version1

git checkout version1
git rebase central

因此,您可以轻松地将所有这些分支与来自central分支的更改同步(并且此过程可以轻松实现自动化)。

答案 2 :(得分:1)

特定于Drupal,您可以考虑将所有国家项目放入一个没有代码重复的大型仓库中。使用Drupal's multi-site feature或自定义模块来处理每个国家/地区的内容。这可能是最简单的解决方案。

否则我已根据项目以两种方式之一解决了这个问题。

如果项目的语言和框架成为可能,我的偏好是将公共代码放入一个repo中,该repo作为每个最终项目的包依赖项包含在内。在PHP的情况下,composer完美地工作,因为它将克隆必要的repos并且每个库自动包含在自动加载器中。您的每个国家项目都将获得自己的回购,核心将是一个依赖包。至少有一个template for managing drupal with composer。对于Drupal来说这可能有点棘手,具体取决于你如何编写特定于区域的代码,所以这个解决方案可能并不理想。您可以随时向编辑器安装添加脚本以在必要时移动文件,例如将特定于国家/地区的模块放入Drupal模块的子目录中。

另一个可以保证工作的解决方案是使用git子模块。公共代码再次进入一个仓库,每个特定国家/地区的项目都有自己的代码。公共代码作为子模块被拉入目录。在这种情况下,复杂性就在于如何组织代码和目录结构。

答案 3 :(得分:0)

我建议将所有内容合并到一个repo中,并为不同版本创建多个分支。这样,您可以通过合并(或根据您的喜好使用rebase)轻松地对所有分支进行更改。您甚至可以使用某些脚本自动执行此操作。