繁体   English   中英

如果需要,如何创建和应用补丁文件,跳过文件版本?

[英]How to create and apply patch files, skipping over file versions, if needed?

首先,用一个例子来澄清我的问题。 我创建了一个名为file1 ,其中的数字表示文件版本。 该文件仅包含一行:

~$ cat file1
test1

我修改该文件,并添加包含test2的行。 我将该文件保存在新修订版下,称为file2 在该文件上调用cat将产生:

~$ cat file2
test1
test2

然后,我进行第三次更改,再次将该文件保存在新修订版file3 ,内容如下:

~$ cat file3
test1
test2
test3

所以我的问题是这样的:如果我想创建一个补丁,以应用在file1上对file3所做的更改,跳过修订file2 ,该怎么做? 可能吗?

基本上,我需要一个可从以下位置更新file1内容的补丁:

~$ cat file1
test1

~$ cat file1
test1
test3

这可行吗? 谢谢。

您正在执行的操作看起来像一个穷人的VCS,每个文件代表一个修订版本。 两个连续文件(修订版)之间的差异表示一个变更集。 听起来您想为特定变更集创建补丁:

$ diff file2 file3 > changes.patch

并将其应用于早期版本:

$ patch file1 < changes.patch
$ cat file1
test1
test3

或者,也许您想创建一个补丁来撤销特定的变更集:

$ diff file2 file1 > changes.patch

并将其应用于您的最新修订版:

$ patch file3 < changes.patch
$ cat file3
test1
test3

对于此特定示例,如果您使用上下文或统一差异,则第一种方法将失败。 在更一般的情况下,这两种方法都不是特别可靠。 例如,如果您需要修补整个源代码树而不是单个文件,则要更新的文件的名称将从修补程序文件本身中拉出。

您应该使用真实的版本控制系统,这样就不必手动跟踪修订。 svn merge允许您使用特定的变更集来“修补”工作副本。 您可以执行此操作以“回滚”一个或多个变更集。 假设您的回购包含一个文件file ,并且您已提交了三个修订版:

# file at r1:
test1

# file at r2:
test1
test2

# file at r3:
test1
test2
test3

您要撤消第二个变更集。 首先在r3(HEAD)检出文件:

$ svn checkout svn://path/to/repo
A    repo/file
Checked out revision 3.

接下来,将变更集2中的更改(即,修订1和修订2之间进行的更改)反向合并到您的工作副本中:

$ cd repo
$ svn merge -c -2 svn://path/to/repo

在这种情况下,您将遇到冲突,必须手动解决。 在实际的存储库中,当您尝试撤消较早的变更集时,可能会或可能不会发生冲突。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM