在单个存储库中使用多个自治插件文件夹构建git和工作流

在单个存储库中使用多个自治插件文件夹构建git和工作流,git,github,workflow,Git,Github,Workflow,我意识到这是一个相当模糊的问题,但我的团队很难拿出一个好的计划来解决我们的问题。我们中没有一个人是git或工作流专家,而且我们在过去已经遇到过这方面的问题 具体来说,我们有这样一个场景: 插件代码驻留在同一个私有存储库中的不同文件夹中(出于各种原因,我们不希望每个项目都有单独的存储库) 因此,存储库结构如下所示: /Plugin001/pom.xml /插件001/src/main/java/ /Plugin002/pom.xml /插件002/src/main/java/ /插件050/。

我意识到这是一个相当模糊的问题,但我的团队很难拿出一个好的计划来解决我们的问题。我们中没有一个人是git或工作流专家,而且我们在过去已经遇到过这方面的问题

具体来说,我们有这样一个场景:

插件代码驻留在同一个私有存储库中的不同文件夹中(出于各种原因,我们不希望每个项目都有单独的存储库)

因此,存储库结构如下所示:

  • /Plugin001/pom.xml
  • /插件001/src/main/java/
  • /Plugin002/pom.xml
  • /插件002/src/main/java/
  • /插件050/。。。
通常情况下,需要特定于客户的补丁或增强功能,而且,我们通常必须支持特定客户的特定插件构建

也就是说,我们需要一个有组织的结构和工作流程,以实现以下目标:

  • 能够在单个插件上顺利工作,而不会与其他插件的用户提交冲突(例如,不需要在单独的插件中拉取更改以将更改推送到当前插件)。理想情况下,这将更加严格,这样PluginA的开发人员就不能破坏PluginB中的任何内容。
    • 最佳接近猜测:
  • 能够用客户特定代码修补基本/核心插件代码;
    • 最佳方法猜测:为每个客户创建一个新的分支机构,并从那里开始工作
  • 能够轻松获取最新的客户特定插件并对其进行修补(使用上游或其他方式);
    • 最佳方法猜测:检查一个客户分支,并将其与master的发布标签合并。标签必须非常容易识别,比如$plugin\u name.$build\u number
  • 通过将二进制文件发布到中心位置(例如Box)来自动发布版本的方法
    • 最佳方法猜测:通过post-commit钩子以某种方式实现这一点
  • 构建应自动增加其构建编号。我猜这对Maven大师来说是一个单独的问题,但是把它放进去。
    • 最佳接近猜测:
我一直在研究子模块、GitSlave、标记、分支等,试图提出一个解决所有这些问题的结构和开发过程的建议

请记住,这些开发人员中没有一个对git或版本控制非常有经验,我们也没有一个系统管理员来处理这类工作。。。所以越简单越好


对以上任何一项有什么意见?我想最重要的是第一个项目。

首先:如果插件是真正独立的项目(在某种意义上说,它们是独立版本、分支和发布的),那么你真的想把它们放在单独的repo中。例如,分支机构总是按回购进行

如果您觉得必须使用单一回购:

能够顺利地在单个插件上工作,而不会产生冲突 from People向其他插件提交(例如,不需要拉取更改 在单独的插件中,将更改推送到当前插件。) 这将更加严格,以至于PluginA的开发人员无法做到 在插件中破坏任何东西

我认为不会有问题。是的,您需要先拉后推(这是使用一个回购协议的结果),但对其他项目的承诺不会导致冲突,因此不会造成伤害

能够用客户特定代码修补基本/核心插件代码; 最佳方法猜测:为每个客户和工作创建一个新分支 从那里开始

是的,这里没有零钱。只有分支机构将适用于所有项目的轻微烦恼;但是您可以对分支采用一些命名约定

能够轻松获取最新的客户特定插件和补丁 它们(上游或其他);最佳方法猜测:检查 退出客户分支,并将其与master的发布标签合并。 标签必须非常容易识别,比如 $plugin\u name.$build\u number

通过将二进制文件发布到 中心位置(如盒子)最佳接近猜测:以某种方式完成 这是使用post-commit钩子实现的

“最佳”取决于许多因素,但您很可能需要一个服务器,即构建守护进程。 Post-commit钩子也应该可以工作,但是您需要相当多的基础设施来运行构建、存储日志等。如果您可以使用CI服务器,您真的不希望自己这样做

构建应自动增加其构建编号。我猜这是 Maven大师还有一个单独的问题,但就在这里


这确实是一个单独的问题。首先,如果插件是真正独立的项目(在某种意义上说,它们是独立的版本、分支和发布的),那么你真的想把它们放在单独的repo中。例如,分支机构总是按回购进行

如果您觉得必须使用单一回购:

能够顺利地在单个插件上工作,而不会产生冲突 from People向其他插件提交(例如,不需要拉取更改 在单独的插件中,将更改推送到当前插件。) 这将更加严格,以至于PluginA的开发人员无法做到 在插件中破坏任何东西

我认为不会有问题。是的,您需要先拉后推(这是使用一个回购协议的结果),但对其他项目的承诺不会导致冲突,因此不会造成伤害

能够用客户特定代码修补基本/核心插件代码; 最佳方法猜测:为每个客户和工作创建一个新分支 从那里开始

是的,这里没有零钱。只有分支机构将适用于所有项目的轻微烦恼;但是您可以采用一些命名约定