合并 (版本控制)

✍ dations ◷ 2025-04-27 17:05:37 #版本控制系统,版本控制,形态管理

在版本控制中,合并(英语:merging),也称为整合(integration),是指当一个文件在多个独立分支中被修改后如何合并这些修改成为一个文件的操作。

合并可以是版本控制软件自动执行,但如果有冲突(英语:conflict (version control)),就需要考虑手工合并。

合并算法是一个热点研究领域,有多种不同的算法。

三路合并(three-way merge),首先考虑对文件A、文件B以及它们的共同祖先文件C做差异分析。对于文件中的每节(sector),如果上述三个文件中有两个文件该节的内容一致,那么抛弃文件C中该节的内容,保留与文件C中不同的内容放到结果文件中。如果该节在三个文件中都不同,那么这个冲突需要手工合并。

三路合并被程序diff3(英语:diff3)实现,是基于文件锁的版本控制系统到基于合并的版本控制系统转变的核心。被CVS广泛使用.

三路合并算法的基础技术是找到被合并文件的共同祖先文件。在遇到十字交叉合并(criss-cross merge)时,不存在独一无二最小共同祖先。

Git采取了递归三路合并(Recursive three-way merge),对没有共同祖先的一对文件递归创建虚拟祖先。这一方法还可以用于有向无环图。

修补包是一个文件,包含另一个文件的改变的描述。Unix传统使用修补包传播一个文本文件的改变,这个修补包可用命令"diff -u"生成,然后用命令patch把修补包应用到一个文本文件。

但patch程序也可以把一个修补包用于与最初产生该包的文件不是完全相同的文件。这称作模糊修补包应用(fuzzy patch application)。 GNU arch采用了这种方法。但模糊修补包应用是一种不太可信的办法,在上下文太少情况下可能会误用。

编织合并(Weave merge)算法跟踪每行是被增加或是删除,产生结果信息。如果在一个版本中该行被删除,则结果文件就不包含该行。BitKeeper、GNU Bazaar、Codeville采用了此方法,对三路合并出错的情形能产生正确结果。

修补包交换(Patch commutation)改变修补包的应用顺序,形成一线性历史。效果上,当两个修补包产生于同一个环境,合并时,一个修补包被重写以便它可以在另一个修补包执行完毕后才使用。例如,修补包A在文件F的行7之后增加了行"X",修补包B在文件F的行310之后增加了行"Y",B需要重写为对文件F的行311之后增加行"Y",以便能在修补包A使用后再使用修补包B。

Darcs、Git (称作"rebasing")采用了这一方法。

"patchutils" package中的Unix程序flipdiff实现了修补包交换.

相关

  • 甲卡西酮甲卡西酮(英语:Methcathinone)α-甲基氨基苯丙酮,又称甲基卡西酮,是中国Ⅰ类精神管制药物、台湾第二级毒品。因类似浴盐,故俗称“浴盐”。甲卡西酮于1928年首次合成。1982年在列宁
  • 科廷科技大学坐标:32°00′19″S 115°53′33″E / 32.0053844°S 115.8925629°E / -32.0053844; 115.8925629科廷大学(Curtin University),是位于澳大利亞西澳大利亚州的治所珀斯之公立大
  • 岩相学岩象学(英语:Petrography)是岩石学的一个分支,专注于岩石的详细描述。研究岩相学的人被称为岩象学家(英语:petrographer)。岩石中的矿物含量和组织(texture)的关系被详细的描述。岩
  • 蒂克路德维希·蒂克(Ludwig Tieck)(1773年5月31日- 1853年4月28日)是德国诗人,翻译家,编辑,小说家,作家和评论家,是18世纪末和19世纪初的浪漫主义运动的元勋之一。路德维希·蒂克出生于柏
  • 辛烷正辛烷的化学式C8H18,直连烷烃中的第八个成员。有18种同分异构体(若包括立体异构则有24种)。其中的异构物2,2,4-三甲基戊烷作为汽油引擎燃料使用时,震爆现象很低,因此被定为辛烷
  • 恐怖主义与中国恐怖主义在中国不仅局限在西域、局限在特定目标、局限在中小城市,2008年以来,中国的恐怖主义活动出现明显增加。中华人民共和国政府将北京、上海、天津、武汉、广州、沈阳、重
  • 叠氮化亚铜叠氮化亚铜的化学式为CuN3,是叠氮酸的亚铜盐。在叠氮化钠的存在下,亚硫酸氢钾还原硫酸铜(II)产生白色叠氮化亚铜沉淀:叠氮酸的水溶液与铜粉反应也得到同样的爆炸性产物叠氮化亚
  • 罗伯特·斯科特罗伯特·法尔肯·斯科特,CVO(英语:Robert Falcon Scott,1868年6月6日-1912年3月29日)是一位英国海军军官和极地探险家,他曾带领两支探险队前往南极地区,它们分别是1901-1904年的发现
  • 迈克尔拉·福克索娃迈克尔拉·福克索娃(捷克语:Michaela Fuchsová,1999年10月27日-),捷克女子羽毛球运动员。2016年9月,迈克尔拉·福克索娃出战斯洛伐克羽毛球公开赛,与阿尔泽比塔·巴索娃打进女子双
  • 合肥绕城高速公路合肥绕城高速公路是位于安徽省合肥市的一条绕城高速公路,国家高速公路网编号为G4001,全长105公里,设计时速每小时100至120公里。连接 京台高速、 沪陕高速、 沪蓉高速、 合安高