合并 (版本控制)

✍ dations ◷ 2025-02-24 04:42:44 #版本控制系统,版本控制,形态管理

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

相关

  • 意大利天主教教区列表下列意大利天主教教区列表。意大利的天主教会共设有16个区域性教会、42个教省,大部分是由主教管理的教区,由总主教管理的教区称为总教区。
  • 罗伯特·查尔斯·加洛罗伯特·查尔斯·加洛(英语:Robert Charles Gallo,1937年3月23日-),美国病毒学家。早期研究白血病,后转向肿瘤病毒的研究。生于康涅狄格州沃特伯里。加洛最出名的贡献是发现第一个
  • 陈锦锭陈锦锭(1954年-),台湾台北人,亚东工专(今亚东技术学院)毕业。夫婿为前立法委员张庆忠、儿子为张庆忠国会助理张钧咏以及将以政二代身份参选2020立委的张智伦。中国国民党党籍,曾任
  • 革命党革命党可以指:
  • 三等士官长军士长(英语:Sergeant Major),又称士官长,是军衔之一。在一般国家的军队体制里,军人分为军官、士官及士兵三大系统,各有其任务执掌,士官又可区分为军士长及士官。在中华民国的相关军
  • 杰罗姆·罗宾斯杰罗姆·罗宾斯 (Jerome Robbins,1918年10月11日 – 1998年7月29日) 是一位美国戏剧制作人、导演、舞蹈指导,其成就主要在百老汇戏剧和芭蕾舞方面,此外,他也是影视导演和监制。
  • 草间弥生草间弥生(日语:草間 彌生/くさま やよい ,1929年3月22日-),被称为日本现存的经典艺术家,出生于日本长野县松本市,在1957年移居美国纽约市,并开始展露她占有领导地位的前卫艺术创作,现
  • 程敏政《篁墩程先生文粹》之程敏政像程敏政(1445年-1499年),字克勤,号篁墩,又号留暖道人,直隶河间人,生于京师(今北京市),祖籍直隶休宁(今安徽),明朝文学家、政治人物。程敏政为南京兵部尚书程信
  • 英国城市地位英国城市地位(英语:City status in the United Kingdom),地方自治实体获得英国君主颁发授权证明的地位,这些实体可以称为自治城市。城市地位没有特定颁发条件,传统上只颁发给有主
  • 布伦丹克朗弗特的圣布伦丹(爱尔兰语:Naomh Breandán;冰岛语:Brandanus,约484年–约577年),亦称“航行者”,“旅行者”,或“莽夫”,爱尔兰早期圣徒,是大西洋探险故事的英雄。圣布伦丹曾在爱尔