我们有一个项目(它是Drupal,但我认为这不会影响答案)我们必须部署到6个国家。没什么好看的。
但这是抓住了。所有6,让我们称之为“版本”,有一些略有不同的代码。意思是,并非所有逻辑,模板,预处理,数据库模式,......都必须应用于所有6个平台。因此,我们在BitBucket上有6个独立的存储库。但这些差异只是少数。 99%的代码适用于所有平台。
换句话说,如果我们有常规错误,我们需要修复此问题并手动将其复制/粘贴到其他5个回购页面。如果我们有特定国家/地区的问题/功能请求,则只能应用于该特定的回购 我们花在这上面的时间和错误的余地是很高的,所以我们正在寻找更好的解决方案。
对于保持这些repo与一般功能同步并且不同步特定于国家/地区的代码,您有何建议?
也许我们需要制作一些部署脚本,它会在一些“After build”钩子中同步repo?是否有一些(第三方)工具,您认为可以帮助我们? 或者我们是否只需要查看我们的git-flow并尝试使用一个repo来解决所有问题?
答案 0 :(得分:2)
您可以在此方案中使用git分支。我建议以下分支布局:
基本工作流程如下:
答案 1 :(得分:1)
ideia有一个central
分支,它保留了99%的公共代码,而不是拥有6个独立的存储库,从该中心分支创建了6个分支(让我们称这些分支为version1
, version2
,...,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)轻松地对所有分支进行更改。您甚至可以使用某些脚本自动执行此操作。