gpt4 book ai didi

Mercurial - 在新代码提示之上重新设置旧代码分支,忽略分支与旧代码的 merge

转载 作者:行者123 更新时间:2023-12-04 18:30:16 24 4
gpt4 key购买 nike

我正在玩弄 Adium source code并发现他们在 adium-1.4 中有一个未发布的分支,它通过使用 XMPP 修复了 facebook 聊天集成,称为 facebook-xmpp。一切都很好,遵守它并且它有效。

问题是,如果我想在最新的 Adium 1.5 中拥有相同的功能,它的代码大约在两年前从旧版本中分离出来(不时移植旧版本的一些变更集),我我想我必须以某种方式重新调整构成 facebook-xmpp 分支的整个变更集范围,并将其应用到较新的 adium-1.5 分支的顶端。我认为这可能有效,因为 facebook-xmpp 看起来主要是添加新代码,因此它应该很容易与最新的开发代码集成。

但是,由于 facebook-xmpp 分支多次与 adium-1.4 merge ,我发现 rebase 会从 adium-1.4< 中提取 merge 的更改 也添加到 adium-1.5 上,这会导致很多 merge 冲突。

---------------------------------------  adium-1.4
| \--- facebook-xmpp (created 1 month ago)
|
\----------------------- adium-1.5
^ sometime in 2009

问题是,有没有办法只将添加到 facebook-xmpp 分支的变更集移植到 adium-1.5,不包括与 merge 的变更集>adium-1.4

最佳答案

方法一(手动打补丁)

如果您只想要 facebook-xmpp audium-1.5 中可用的功能, 你可以

  1. merge audium-1.4的提示进入facebook-xmpp , 然后
  2. audium-1.4 的提示之间创建差异和 facebook-xmpp
  3. 尝试将该补丁应用到 adium-1.5 的尖端。

这应该可行,但新补丁与原始开发历史脱节。

--------o---o    <- tip of audium-1.4
\ \ \
\ o---o <- tip of facebook-xmpp (all audium-1.4 changes merged in)
\
o-------o <- tip of audium-1.5 (apply patch here)

基本上这些命令应该做到这一点:

$ hg up facebook-xmpp
$ hg merge audium-1.4
$ hg commit -m "Merge audium-1.4 into facebook-xmpp"
$ hg diff -r audium-1.4 -r facebook-xmpp > fbx.patch # facebook-only changes
$ hg up audium-1.5
$ hg import fbx.patch # good luck

方法二(选择性 merge )

另一种更尊重历史图的解决方案是直接 merge facebook-xmpp进入audium-1.5在使用 merge tool configuration 时使用internal:local作为默认 merge 工具(以阻止您的 merge 工具弹出 1000 次),但它会定期 merge 任何 facebook-xmpp相关文件(如果您知道哪些文件与其功能相关)。然后,在提交 merge 之前,还原所有与 facebook 无关的文件。

更新:这是第二种解决方案的一些示例说明。假设 facebook-xmpp分支创建了一些名为 fb-<something>.c 的新文件并更改了现有文件 foo.cbar.c (您可以从 facebook-xmpp 及其与 audium-1.4 的最新 merge 之间的差异中获取这些文件)。 merge 时facebook-xmpp进入audium-1.5 ,使用以下 merge 工具配置:

$ hg up audium-1.5
$ hg --config ui.merge=internal:local \
--config merge-patterns.fb-*.c=internal:merge \
--config merge-patterns.foo.c=internal:merge \
--config merge-patterns.bar.c=internal:merge \
merge facebook-xmpp

第一个 merge 配置通常确保 audium-1.5更改保留在两个audium-1.4中更改的文件上和 audium-1.5 .其他配置选项确保对于 facebook-xmpp 触及的任何文件分支执行常规 merge ,可能存在需要手动解决的冲突。例如如果 foo.c引发冲突,运行

$ hg resolve foo.c

用您最喜欢的手动 merge 工具解决冲突。最后,您必须提交 merge ,同时不提交源自 audium-1.4 的任何新文件。 .只需提交 facebook-xmpp东西:

$ hg ci -I "fb-*.c" -I foo.c -I bar.c
$ hg up -C # get rid of remaining new files from audium-1.4

关于Mercurial - 在新代码提示之上重新设置旧代码分支,忽略分支与旧代码的 merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5953071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com