合并 (版本控制)

✍ dations ◷ 2025-08-20 21:48:51 #版本控制系统,版本控制,形态管理

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

相关

  • 内共生共生体学说(英语:Symbiogenesis),又称内共生学说(英语:endosymbiotic theory),是关于真核生物细胞中的一些自主细胞器ㄧ线粒体和叶绿体起源的学说。根据这个学说,它们起源于共生于真
  • 多孔菌多孔菌,属多孔菌科一种,是木栖腐生的中型菇类。该菇类生长于如台湾等地之低中海拔林区,生长期间约是在春夏两季之间。
  • ð̠浊齿龈擦音是辅音的一种。和此音对应的国际音标符号会因为此音是否有咝音还是无咝音而有所改变:吴语中的属有咝音,据邪俟船子音而定,均属阳调。浊齿龈有咝音的特征:英语中有此音
  • 舌蝇科23舌蝇属(属名:Glossina,即采采蝇,来自英语:Tsetse /ˈsiːtsi/,美国 /ˈtsiːtsi/, 或 英国 /ˈtsɛtsi/)是双翅目舌蝇科(Glossinidae)下唯一的一个属,其下的蝇广泛分布于从撒哈拉沙漠
  • 南海岛南海岛(朝鲜语:남해도/南海島 Namhae do */?)又称宝物岛位于韩国南部庆尚南道,是韩国第五大岛屿,是南海郡的主要所在地。南海岛与陆地有南海大桥相连。坐标:34°47′N 127°55′E
  • 里部里部,为汉字索引中的部首之一,康熙字典214个部首中的第一百六十六个(七划的则为第二十个)。就繁体和简体中文中,里部归于七划部首。里部只以下方为部字。且无其他部首可用者将部
  • 食品容器食品容器(英文:Food contact materials、日文:食品用器具材料)为用来装载并会与食物直接接触的容器。例如:玻璃、装饮料的罐子;也包括工厂中生产食物的机械和咖啡机。食品与容器接
  • 让·路易斯·玛丽·波伊列让·路易斯·玛丽·波伊列(Jean Louis Marie Poiret,1755年6月11日-1834年4月7日)为法国牧师,植物学家和探险家。1785年至1786年,他被路易十六派往阿尔及利亚研究植物。法国大革命
  • 布鲁诺·朱米诺布鲁诺·朱米诺(意大利语:Bruno Zumino,1923年4月28日-2014年6月24日),意大利理论物理学家,伯克利加州大学教授。他和德国物理学家朱利斯·外斯(Julius Wess)是超对称的创始人(有争议)
  • 以色列之声会堂以色列之声会堂(Kol Israel Synagogue)是美国纽约的一座犹太会堂和历史建筑,位于布鲁克林皇冠高地(Crown Heights)的圣约翰坊603号,建于1928年。它是一座两层的矩形建筑,表面不规则