合并 (版本控制)

✍ dations ◷ 2025-12-05 01:15:49 #版本控制系统,版本控制,形态管理

在版本控制中,合并(英语: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实现了修补包交换.

相关

  • 东海大学东海大学可以指:
  • 平民会议平民会议(拉丁语:Concilium Plebis)是古代罗马共和国的主要大会和立法机构,平民可以通过该机构通过法律,选举地方行政官,审理司法案件。唯有平民保民官有权召开大会。会议可选举平
  • 均四甲苯均四甲苯,即1,2,4,5-四甲苯,是一种有机化合物,化学式为C6H2(CH3)4。它是带有甜气味的无色固体。它是四甲苯的三种同分异构体之一,其余两种为1,2,3,4-四甲苯(熔点−6.2 °C)和1,2,
  • 氯苯氯苯是苯的一个氢被氯原子取代后形成的化合物,分子式为C6H5Cl,室温下为无色易燃的液体。氯苯用于生产杀虫剂,与三氯乙醛反应得到DDT,也可作为制取苯酚、硝基氯苯、二苯醚的原料,
  • 前王朝时期第八第十前王朝时期是埃及文明的第一时期。约前40世纪,埃及人开始在各地建立城邦,当中包括底比斯、孟斐斯、布陀、希拉康波利斯、厄勒芬廷、阿拜多斯、提尼斯、赛伊斯、索伊斯
  • 光学史人类对光学(optics)的研究开始于古代。最晚于公元前700年,古埃及人与美索不达米亚人便开始磨制与使用透镜;之后前6~5世纪时古希腊哲学家与古印度哲学家提出了很多关于视觉与光线
  • 潘奕如潘奕如(1978年3月19日-),台湾女演员,毕业于台北艺术大学戏剧系,主修表演。2018年以《清风无痕》入围第53届金钟奖最佳女配角。 2014 udn talks联合大讲堂【潘奕如:面对恐惧的终极法
  • 普鲁士科学院普鲁士科学院(德语:Preußische Akademie der Wissenschaften)是一座于1700年7月11日建立在德国柏林的科学院。在被任命为主席的戈特弗里德·莱布尼茨(Gottfried Leibniz)的建议
  • 春野菜菜美春野菜菜美(1993年12月17日-)是日本的女性声优,宫崎县出身。目前为自由身。2011年曾获得“第5回81试镜会”特别赏与小学馆赏。2018年8月10日在自己的推特上宣布退出81 Produce。
  • 醉鱼草属参见正文醉鱼草属(学名:)是唇形目玄参科的一属,自成一个醉鱼草族(Buddlejeae),约100余种,广泛分布在全世界热带和亚热带等温暖地区。醉鱼草科的拉丁名Buddleja是林奈为了纪念英国植