3

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

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

但是,由于facebook-xmpp分支合并adium-1.4了多次,我发现变基也会将合并的更改从 on 拉入adium-1.4adium-1.5这会导致很多合并冲突。

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

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

4

1 回答 1

3

方法一(手动补丁)

如果您只希望该facebook-xmpp功能在 中可用audium-1.5,您可以

  1. 合并audium-1.4into的尖端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

方法2(选择性合并)

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

更新:这是第二个解决方案的一些示例说明。假设facebook-xmpp分支创建了一些新文件fb-<something>.c,并更改了现有文件foo.cbar.c(您从 diff 之间获取这些文件,facebook-xmpp并且它的最新合并与audium-1.4)。合并时facebook-xmppaudium-1.5使用以下合并工具配置:

$ 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

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

$ hg resolve foo.c

使用您最喜欢的手动合并工具解决冲突。最后,您必须提交合并,同时不提交任何源自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
于 2011-05-10T18:41:54.013 回答