不同版本框架的Git工作流程

6
我们有以下设置:三个应用程序相似,公共代码提取到一个框架中。每个应用程序都在自己的git仓库中进行管理,并将框架作为git子模块包含在内。
问题在于,这些应用程序现在是并行开发的,框架中添加的新功能其他应用程序不需要立即支持。目前,我们为所有应用程序拥有不同的框架分支。一种应用程序使用框架的主分支,因为大多数情况下新功能首先在该应用程序中引入。
框架分支:
- 主分支(由App A使用) - App B - App C
当在App B中引入了一个需要对框架进行更改的新功能时,这些更改被加入到App B分支中。如果稍后这些更改在App A中也需要,那么就将App B分支合并到主分支中。这意味着必须将App B中的所有更改合并到主分支中。
这个系统虽然可行,但存在一些缺陷:
- 从一个分支合并一个功能意味着我们必须合并所有更改 - 很容易失去追踪已经合并或将要合并的内容 - 使用提交消息来标记破坏性更改,这使得最后一点变得更加重要
我们目前正在寻找新的工作流。我考虑拥有以下分支:
- 主分支 - App A - App B - App C
因此,每个应用程序都有一个分支和一个包含所有更改的主分支。当开发新功能时,应该创建一个功能分支,然后将其应用于主分支以及需要立即使用该功能的所有应用程序分支。其他应用程序可以在稍后需要该功能时合并该功能分支。
我认为这样存在以下问题:
- 如何将一个功能分支合并到多个分支中,并仅合并在该分支中发生的更改。我知道“git rebase onto…”但我不确定是否可以多次使用此命令。 - 对于将功能合并到多个分支中,是否应该使用git cherry-pick?我宁愿不这样做,因为我认为如果没有选择在功能分支中进行的所有更改,那么这将容易出现错误。 - 如何跟踪哪个特性(分支)已被应用于哪个应用程序。我可以使用“branch --no-merge”,还是只能在分支具有相同祖先的情况下才能使用?
我的提议是实现这个的最佳方式,还是应该彻底重新思考我的策略?

2
嗨Silver,你能否更新一下这些问题,包括你最终采用的工作流程及其运作情况?我也面临着相同的情况,但是做错了。因此,我对你的解决方案很感兴趣。 - BlinkyBill
1个回答

0
如 "Git & Working on multiple branches" 中所解释的,将提交应用于多个分支(这是您使用“功能分支”选项时要做的)的两种实际解决方案是:
  • 合并(这应该允许您继续重复使用该功能分支,因为它会跟踪已经合并到特定分支的内容):您可能需要进行 rebase --interactive 以重新排序提交,首先放置您想要合并的提交,然后再放置您尚未准备好合并的提交。
  • cherry-picking(现在支持一系列提交),但我总是对 cherry-picking 持谨慎态度

rebase --interactive 看起来是一个不错的工具。在使用它时,我需要注意哪些影响吗? - sliver
@sliver:只是你不应该对已经与其他人共享(推送到另一个仓库)的分支进行变基(详见http://stackoverflow.com/a/2825924/6309)。在你的情况下,这不应该是个问题。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接