提交后创建SVN补丁

64

是否可以事后创建补丁?我们使用的Tortoise SVN客户端给了我们在提交时或提交期间创建补丁的选项。

我想使用主干修复问题,在提交修复后让构建服务器运行所有测试和度量以确认修复结果可接受。然后,如果第一次尝试修复只解决了部分问题,我希望能够选择几个版本并从更改的文件中创建补丁文件。

然后,我可以将补丁应用于其他几个分支。这个操作是可能的吗?


4
你可以通过在 SVN 中执行 svn diff 命令来创建补丁,以比较任意两个版本之间的差异。 - Robert
请注意,在其他需要在提交后打补丁的用例中,如果此补丁是针对另一个分支的,则可以合并特定的修订版本或一系列修订版本,这更符合 SVN 的健康原则(显示在日志中,单个提交或一组提交而不是重复等)。 - Andrew
4个回答

113

展示日志,选择版本号,右键点击 “显示统一差异”。


4
补丁文件是否只是统一的差异文件,或者“另存为补丁”会以某种方式更改其内容? - fluent
9
我遇到了和Ilya一样的问题——我将统一的diff保存成补丁文件后,无法将其应用到不同的分支上。我最终解决了这个问题——统一的diff包含一些绝对路径,而普通的补丁文件则没有。我进行了查找和替换操作,将绝对路径删除后,便可以正确地应用了。 - RickL
2
在新的Tortoise SVN版本中,“show unified diff”已经被翻译为“显示统一差异”。 - Long Rainbow

2
如果您遇到路径问题,您可以单独显示每个文件的差异。

0

如果您想比较来自不同分支的两个文件,也可以在Windows上使用WinMerge:

  1. 检出每个分支
  2. 标记应该进行比较的两个文件
  3. 通过WinMerge进行比较
  4. 然后单击:工具 -> 生成补丁

通过这种方式,您可以为来自不同分支的已提交文件创建补丁。


0
我倾向于使用 svn diff 命令行创建补丁。因此,以下示例可供使用,但需要您知道修订号 - 这应该不难确定。
为了回答这个问题,让我们假设以下情况:
  • 您的提交的修订号是1234。
  • 您的 SVN 存储库位于 https://mySvnServer/myRepository/trunk
  • 您将在 C:\Path\To\Patches\ 中放置您的补丁。
创建仅包括修订号 1234 的补丁。请注意 -c 1234
svn diff -c 1234 https://mySvnServer/myRepository/trunk > "C:\Path\To\Patches\1234.patch"

创建一个补丁,包括从你的提交到最新提交(HEAD)之间的所有版本。请注意使用-r 1234:HEAD
svn diff -r 1234:HEAD https://mySvnServer/myRepository/trunk > "C:\Path\To\Patches\1234_head.patch"

据我所知,没有一种单行方法可以从多个非连续修订号创建补丁,而不创建分支,逐个合并所需的修订版本,然后执行 svn diff(类似于上面)来创建补丁。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接