同步存储库git上的变体

时间:2016-09-21 22:09:26

标签: git merge synchronize codebase multiple-repositories

我试图弄清楚如何(如果可能的话)设置多个git存储库以特定的方式运行。基本上,我们为多个客户端提供了多个存储库,但它们都是共享一个系统目录。当对一个客户端的系统目录进行更改时,应将其更改为所有客户端的系统目录。现在,对于复杂性,我们有多个用于CI开发系统的环境。我们目前拥有生产环境,客户端环境,qa环境和开发环境。这些很好地转换为不同的分支,因为这意味着当工作流被批准用于下一个环境时,我们可以将该工作流分支合并到适当的环境分支中,并从该工作流添加到该环境中的变化。

问题是我们的代码结构的设置方式是我们的系统目录是我们的基本代码,一个具有客户端特定代码的自定义目录(包括用于替换系统代码中的文件的文件)和客户端特定的配置目录。请注意,我们不是面向对象的系统,这使得开发变得更加复杂,因为没有继承或扩展来使定制更容易。

我们的目标是将此开发系统转换为GIT。我们遇到的问题是维护共享系统目录。我们已经尝试过子模块,但是子模块需要大量的维护才能防止覆盖或误解它们,并且由于过多繁琐的工作需要确保客户端qa,因此不能与永久环境分支机构一起工作branch总是指向系统子模块中qa分支的前导提交,而不是指向WF分支中的引导提交。

我们当前的IDE是eclipse,它没有子树集成(虽然我读过的子树是他们可以像子模块一样复杂)。我们真正需要的是跨多个存储库的并行分支,这些存储库得到了传播。因此,例如,如果我在客户端仓库中创建工作流分支,则会在系统仓库和所有其他客户端仓库中生成WF分支。当我进行更改并将该工作流合并到qa时,系统repo的wf分支也会合并到qa分支中,但仅限于对系统文件夹的更改,而不是对自定义和配置目录。

我想知道是否有一个好的结构可以做出像这样的工作。我在其他网站和消息来源上阅读的所有内容都表示解决方案不是那样做的,但是我不会做出这个决定。上级决心保持我们目前的发展体系。

我有一个想法是看看是否有办法做一些像我们创建一个只有系统模块的存储库的直通。然后,对于每个客户端,我们克隆该repo并添加custom和config目录。然后,当我们进行开发时,我们克隆该客户端的回购。我想知道是否通过这种方法,如果我们进行了更改并提交并推送到上游,如果这会将更改一直推送到顶级回购。此外,当我们下调变化时,如果我们可以从顶级回购中一路拉下来。另一方面是必须在客户端repos中设置.gitignore,以便在向上推送它时忽略自定义和配置目录,但在向下游时它包含那些目录。

对此的任何想法将不胜感激。我们的代码主机也是私有的gitlab服务器。

对不起,这太长了,但我觉得我们有一个非常独特(不好)的系统需要一些解释。

未来的Git用户

1 个答案:

答案 0 :(得分:1)

这似乎更像是一个组织和架构问题,而不是git问题,但我会试一试。

您是否考虑为每个客户端创建分支,然后根据需要进行合并/拉取,然后推送,而不是创建仓库。

不建议通过git部署,git不是一种很好的部署方式。它的设计是开放的,记录更改并使代码共享变得容易,所以如果有人意外提交凭据,它们将被永久记录,除非你做一些疯狂的事情(而这些疯狂的事情会破坏其他人的代码)。大多数理智的用户使用git来提交和共享他们的更改,将特定的分支构建到模块/ pkg / image / container / something-stable-and-constant中,然后将该模块部署到其他客户端。

如果您仍希望将其用于部署,请结帐git-hooks。您可以设置一些挂钩(例如更新或预接收),以便在更新分支时自动提取代码。

另一种选择是将更多的共享目录放入云存储服务或基于文档的NoSQL服务器。它可以帮助您维护每个人都可以获取的单一来源。这将不是完美的,最终的一致性将在这里和那里引起一些麻烦,但是值得。我只建议反对它,因为客户端磁盘上的文件很重要。