合并 (版本控制)

✍ dations ◷ 2025-11-14 16:32:23 #版本控制系统,版本控制,形态管理

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

相关

  • TDsub50/sub半数中毒量(median toxic dose,TD50)为毒理学名词,是指一药物或是毒素造成50%比例中毒的剂量。不过若要数值有意义或是可以用在实际应用上,需说明其中毒的种类。半数中毒量的剂量
  • 木百灵板块木百灵板块(Woodlark Plate)是位于新畿内亚东半部的板块,加洛林板块沉入木百灵板块的北部边缘,木百灵板块的西部和南部是分别与毛克板块和澳洲板块形成的聚合板块边缘,东面与所罗
  • 阴地蕨属阴地蕨是蕨类植物的一个属,属于瓶尔小草科,阴地蕨属的植物被通称为阴地蕨,个体通常较小,叶片分为孢子叶与营养叶,具有肉质根,通过向空气中散发孢子进行繁殖。
  • 苏赫巴托尔省苏赫巴托尔省(蒙古语:Сүхбаатар аймаг,转写:Sükhbaatar aimag)位于蒙古国东部,面积82,287平方公里,人口54,363。首府西乌尔特。省名来自蒙古人民共和国建国领袖苏赫
  • 阿齐济耶阿齐济耶(阿拉伯语:العزيزية‎ ʿAziziya)是利比亚吉法拉省的一个城市,为该省首府,北距首都的黎波里41公里。人口约28万。这里亦是全球有纪录以来最热的地方。(1922年9月1
  • 衡阳保卫战中华民国大日本帝国日方资料: 19,380人伤亡衡阳保卫战是发生在1944年6月22日到1944年8月8日之间中国抗日战争后期最惨烈的一场城市争夺战。衡阳保卫战是中国抗战史上最成功的
  • 音猬因子3HO5, 3M1N, 3MXW· signal transducer activity · patched binding · calcium ion binding · protein binding · glycosaminoglycan binding · peptidase activi
  • 安哥尔语未知(1,300 根据 1990 census)e18安哥尔语(Angor或Anggor,又作Senagi)是巴布亚新几内亚赛纳几语言家族中的一个成员。
  • 韦内齐亚诺模型粒子物理学中,韦内齐亚诺模型(英语:Veneziano model)是一个简单的4粒子散射模型,特征是它明显有s-channel和t-channel的交叉对称性。它由加布里埃莱·韦内齐亚诺在1968年提出。经
  • 李·阿尔文·杜布里奇李·阿尔文·杜布里奇(英语:Lee Alvin DuBridge,1901年9月21日-1994年1月23日),美国物理学家和教育家,1946年至1969年担任加州理工学院的主席。