合并 (版本控制)

✍ dations ◷ 2025-07-30 11:21:16 #版本控制系统,版本控制,形态管理

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

相关

  • 关节积血关节积血(英语:Hemarthrosis)是指关节内出血。这是血友病的常见症状。通常在损害受伤后发生,但主要在有出血倾向的患者,例如,使用华法林(warfarin,或其他抗凝剂)的患者和血友病患者。
  • 艾福特爱尔福特(德语:Erfurt),又译埃尔福特,是德国中部的一个城市。它是图林根州的首府,并是一个有196,500人口的制造业中心。爱尔福特东北100公里是莱比锡,向西113公里是卡塞尔和向西北1
  • 脸盲症脸盲症,即面部识别能力缺乏症。英文学名为prosopagnosia,亦可称为face blindness,该症状表现一般分为两种:患者看不清别人的脸;患者对别人的脸型失去辨认能力。Template:Lesions
  • 华纳兄弟华纳兄弟互动娱乐(英语:Warner Bros. Interactive Entertainment,或简称WBIE)是华纳兄弟家庭娱乐集团下属的一个部门,成立于1993年,目前该部门负责的业务包括电子游戏开发及发行,授
  • 2013年摩尔龙卷风2013年穆尔龙卷风(英语:2013 Moore Tornado)发生在2013年5月20日,主要袭击美国俄克拉何马州奥克拉荷马市南方郊区的穆尔市,强度EF5级,造成至少24人死亡,240人受伤。该龙卷风在美国
  • 美国公共卫生服务军官团军官团人员及应变部 美国公共卫生服务军官团,是美国公共卫生局隶下的联邦制服部队(英语:Uniformed services of the United States),亦是美国八支制服军种之一。与国家海洋和大气
  • 麟游郡麟游郡,中国隋朝时设置的郡。义宁二年(618年),改凤栖郡置,治所在麟游县(今陕西省麟游县西)。唐朝武德元年(618年)改为麟州。领上宜县、麟游县和普闰县。
  • 亚铁氰酸铵亚铁氰酸铵是一种无机化合物,化学式为(NH4)4。亚铁氰酸铵可由亚铁氰酸和氨反应得到。
  • 中国人民解放军海军西沙水警区中国人民解放军海军西沙水警区,机关驻地海南省三沙市西沙区永兴岛,是中国人民解放军海军榆林基地的水警区。1972年11月28日,海军遵照中央军委1971年1月14日和中国人民解放军总
  • 麻豆仁厚宫麻豆仁厚宫主祀天上圣母,位在台南市麻豆区油车里9邻油车47号,传系林姓祖先随身携妈祖香火,渡海来台,而保祐子孙一路顺风,于清乾隆十三年(1748年)回福建漳州府“龙溪县”所奉请入祀