合并 (版本控制)

✍ dations ◷ 2025-06-12 21:11:28 #版本控制系统,版本控制,形态管理

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

相关

  • 城市地理学城市地理学是研究在不同地理环境下,城市形成、发展、组合分布和空间结构变化规律的学科,既是人文地理学中聚落地理学的重要分支,又是城市科学群的重要组成部分。一般来讲,城市地
  • 冥卫冥王星目前已知的卫星总共有五颗,冥卫一是其中最大的一颗,它与冥王星的相对大小比太阳系其他已知的行星或矮行星都还要大。相较之下,冥卫二、冥卫三、冥卫四和冥卫五的体积则小
  • 电分析化学法电化学分析是分析化学的重要组成部分。电化学分析法是利用测量样品的电位(potential)、电流和电阻(或导电度),以分析样品中待测物组成及浓度的方法。电化学分析法测定结果是
  • 中国切音新字中国切音新字是清末拼音字方案中最早的一种。卢戆章创制,他用“两字合即成音”的方法,仿拉丁字母笔形制定字母55个,于1892年出版《一目了然初阶》,次年出版《新字初阶》(两书都是
  • 细鳞鲑属细鳞鲑属(学名:Brachymystax)为辐鳍鱼纲鲑形目鲑科的鱼类。以细鳞鲑来说,身体可长达0.7米,重达15公斤;背侧为紫灰色,具有黑色小圆斑,银灰色腹面,生殖期身体颜色变暗,并出现红色斑块;口
  • 攴部攴部,为汉字索引中的部首之一,康熙字典214个部首中的第六十六个(四划的则为第六个)。就繁体和简体中文,攴部归于四划部首。攴部通常从右方为部字。攴和攵均可为部字。且无其他部
  • 恩田尚之恩田尚之(1962年12月17日-)是日本的动画师、人物设计、作画监督。出生于北海道。和漫画家安彦良和、同是动画师的湖川友谦这两位前辈人物,均为北海道远轻高等学校的毕业生。1979
  • 罗纳德·德沃金罗纳德·德沃金(英语:Ronald Myles Dworkin,1931年12月11日-2013年2月14日),美国法理学家,纽约大学和伦敦大学学院法学院教授。德沃金1931年生于美国罗德岛州普洛威顿斯。于哈佛大
  • 波顿峰波顿峰(英语:Boulton Peak)是南极洲的山峰,座标,位于葛拉汉地的柯蒂斯湾东南部,海拔高度1,050米(3,440英尺),该山峰根据英国公司拍摄的空中照片被绘入地图,以该国的副翼发明家命名。坐
  • 芙蓉山 (江原道)芙蓉山(韩语:부용산)是一座位于韩国江原道春川市和华川郡之间的山峰,主峰海拔882米。