结合和混合版本控制的变化?

时间:2015-02-13 11:02:38

标签: git svn version-control

由于版本控制系统要么将提交存储为更改列表,要么至少能够确定文件的不同版本之间的更改,是否可以从任何分支中选择任何更改(不一定是顺序的),只要它们都会影响同一个文件,并以任何顺序将它们应用于文件的任何版本,不存在冲突吗?

例如,假设我有一个带有一些初始内容的文件A(版本0),然后我创建一个分支并在两个分支中进行一些更改(版本1,2和1',2')。现在,我想混合使用这些更改来获得文件A的“自定义”版本。

File A, version 0:
------------------
sample text

File A, version 1 (main branch):
------------------
sample text
new text 1        <-- added line

File A, version 2 (main branch):
------------------
sample text
new text 1
new text 2        <-- added line

File A, version 1' (new branch):
------------------
sample text
new text A        <-- added line

File A, version 2' (new branch):
------------------
sample text
new text A
new text B        <-- added line

假设我从主分支开始使用版本2并应用更改(按顺序):2',1。在此示例中,我应该得到:

File A, "custom" version:
------------------
sample text
new text 1
new text 2
new text B
new text 1

至少在某种程度上,SVN或git(或其他人)现在可以使用这样的东西吗?这样的事情是否可能(是否可以创建这样的版本控制系统)?

1 个答案:

答案 0 :(得分:2)

版本控制系统中的Diffs几乎总是包含一些上下文。差异不会说&#34;在文件的末尾添加一行&#34;,而是&#34;在包含该文本的行之后和包含此其他文本的行之前添加一行&# 34 ;.出于这个原因,您的具体示例将导致冲突,并且差异不会干净地应用。

如果您的差异实际应用得很干净,您可以在大多数版本控制系统中执行此操作。它被称为&#34; cherry picking&#34;,并不仅限于单个文件。您还可以通过向VCS请求您感兴趣的修订版之间的统一差异来手动应用差异,然后使用patch命令行工具将该差异应用于您喜欢的基本状态。