我意识到这是一个非常模糊的问题,但我的团队很难想出一个好的计划来解决我们的问题。无论如何,我们都不是 git 或工作流专家,过去我们已经遇到过这方面的问题。
具体来说,我们有这种情况:
插件代码位于同一个私有存储库的不同文件夹中(出于各种原因,我们不希望每个项目都有单独的存储库。)
所以存储库结构如下所示:
- <REPO>/Plugin001/pom.xml
- <REPO>/Plugin001/src/main/java/...
- <REPO>/Plugin002/pom.xml
- <REPO>/Plugin002/src/main/java/...
- ...
- <REPO>/Plugin050/...
...
通常需要客户特定的补丁或增强功能,此外,我们通常必须支持给定客户的特定插件版本。
也就是说,我们需要一个有组织的结构和工作流程,它允许以下内容:
- 能够顺利地在单个插件上工作,而不会与人们对其他插件的提交发生冲突(例如,不需要在单独的插件中拉取更改以将更改推送到当前插件。)理想情况下,这将更加严格,以便 PluginA 的开发人员不能破坏 PluginB 中的任何内容。
- 最佳方法猜测: ???
- 能够使用客户特定的代码修补基本/核心插件代码;
- 最佳方法猜测:为每个客户创建一个新分支并从那里开始工作。
- 能够轻松获取最新的客户特定插件并对其进行修补(使用上游或其他方式);
- 最佳方法猜测:检查客户分支并将其与 master 的发布标签合并。标签必须非常容易识别,例如 $plugin_name.$build_number
- 通过将二进制文件发布到中心位置(例如 Box)来自动发布构建的方式。
- 最佳方法猜测:以某种方式通过 post-commit 钩子实现这一点。
- 构建应自动增加其构建编号。我猜这对于 Maven 大师来说是一个单独的问题,但只是把它扔在那里。
- 最佳方法猜测: ???
我一直在研究子模块、gitslaves、标签、分支等,试图提出解决所有这些问题的结构和开发过程的建议。
请记住,这些开发人员中没有一个对 git 或版本控制非常有经验,而且我们没有系统管理员来处理此类工作……所以越简单越好。
对以上任何一个有意见吗?我想最重要的项目是第一个子弹。