我正在玩Adium source code并发现他们在adium-1.4
中有一个未发布的分支,它通过使用名为facebook-xmpp
的XMPP修复了Facebook聊天集成。一切都很好,遵守它并且有效。
问题是,如果我想在最新的Adium 1.5中拥有相同的功能,其代码在大约两年前从旧版本拆分(旧版本的某些更改集会不时移植),我想想我必须以某种方式重新组合构成facebook-xmpp
分支的整个变更集范围,并将其应用到较新的adium-1.5
分支的顶端。我认为这可能有用,因为facebook-xmpp
看起来主要是添加新代码,所以它应该很容易与最新的开发代码集成。
但是,由于facebook-xmpp
分支多次与adium-1.4
合并,我发现重新定位会将合并后的更改从adium-1.4
提升到adium-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
合并的变更集?
答案 0 :(得分:3)
如果您只想在facebook-xmpp
中使用audium-1.5
功能,则可以
audium-1.4
的提示合并到facebook-xmpp
,然后audium-1.4
和facebook-xmpp
以及这应该有效,但新补丁与原始开发历史记录断开连接。
--------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 tool configuration作为默认合并的{{3}}时,将facebook-xmpp
直接合并到audium-1.5
工具(阻止您的合并工具弹出1000次),但会定期合并任何internal:local
相关文件(如果您知道哪些文件与其功能相关)。然后,在提交合并之前,还原所有与facebook事物无关的文件。
更新:以下是此第二种解决方案的一些示例说明。假设facebook-xmpp
分支创建了一些名为facebook-xmpp
的新文件并更改了现有文件fb-<something>.c
和foo.c
(您从bar.c
之间的差异中获取这些文件最新合并facebook-xmpp
)。将audium-1.4
合并到facebook-xmpp
时,请使用以下合并工具配置:
audium-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.4
次更改。其他配置选项确保对audium-1.5
分支触及的任何文件执行常规合并,可能需要手动解决冲突。例如,如果facebook-xmpp
引发冲突,请运行
foo.c
解决与您最喜欢的手动合并工具的冲突。最后,您必须提交合并,而不提交源自$ hg resolve foo.c
的任何新文件。只需提交audium-1.4
内容:
facebook-xmpp