由于版本控制系统要么将提交存储为更改列表,要么至少能够确定文件的不同版本之间的更改,是否可以从任何分支中选择任何更改(不一定是顺序的),只要它们都会影响同一个文件,并以任何顺序将它们应用于文件的任何版本,不存在冲突吗?
例如,假设我有一个带有一些初始内容的文件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(或其他人)现在可以使用这样的东西吗?这样的事情是否可能(是否可以创建这样的版本控制系统)?
答案 0 :(得分:2)
版本控制系统中的Diffs几乎总是包含一些上下文。差异不会说&#34;在文件的末尾添加一行&#34;,而是&#34;在包含该文本的行之后和包含此其他文本的行之前添加一行&# 34 ;.出于这个原因,您的具体示例将导致冲突,并且差异不会干净地应用。
如果您的差异实际应用得很干净,您可以在大多数版本控制系统中执行此操作。它被称为&#34; cherry picking&#34;,并不仅限于单个文件。您还可以通过向VCS请求您感兴趣的修订版之间的统一差异来手动应用差异,然后使用patch
命令行工具将该差异应用于您喜欢的基本状态。