【发布时间】:2012-05-22 15:44:46
【问题描述】:
我们在 git(hub) 中创建了一个项目,并希望在我们的 fork 中维护一些补丁,同时在其发布(标签)和发布分支中重新创建这些补丁。
初始存储库结构
上游结构非常简单:
origin/trunk A---B---D---F---H---...
\
origin/0.9 C---E---G---...
|
(tag 0.9)
问题
上游项目在提交 A 和 D 中增加了依赖项的版本,但这主要是为了方便,我们确信我们可以在一段时间内保持兼容性版本。
我创建了一个功能分支trunk_compat 并使用git revert --no-commit 为提交A 和D 创建补丁,因为我们需要它们。我已经把这个分支了origin/trunk
mine/trunk_compat A*---D*
/
origin/trunk A---B---D---F---H-...
\
origin/0.9 C---E---G---...
|
(tag 0.9)
所以现在我很容易关注origin/trunk 并根据我是否发布它来通过变基或合并来维护我的补丁。
我们的目标是为两个分支(trunk 和 0.9)维护这些补丁,并重新创建 0.9 的发布版本(因为它是从 E 标记的) .
我不知道如何正确地做到这一点。
- 我需要一个
0.9_compat分支,它的所有提交都高达G,但还包括我们的补丁A*和D*,以便我们可以将其放入我们的持续集成服务器中,看看它是否有效 - 我需要一个标签
0.9_compat,它的状态为E,并应用了A*和D*。- 为了让它更复杂,提交
E实际上是D到0.9分支的反向移植,所以我们的D*补丁也应该在这里应用 - 这不是正确的合并或变基,因为上游项目在 SVN 中,这是我们正在分叉的 git-svn 镜像
- 为了让它更复杂,提交
- 将来上游将分支
0.10等,我们也希望在这些分支上维护我们的补丁
我可以通过大量采摘或手动应用补丁来做到这一点(我认为),但这感觉不对,我认为我没有充分利用 git。
【问题讨论】:
-
没有什么比在这里采樱桃更好的了。
-
谢谢。我现在也是这样走的。它看起来相当笨重,但似乎有效。对于已经存在的分支,我挑选了我的补丁,然后重新调整它们的基础,使它们处于正确的顺序。
标签: git fork patch branching-and-merging