在修订之间创建“补丁”?

Posted

技术标签:

【中文标题】在修订之间创建“补丁”?【英文标题】:Create "patch" between revisions? 【发布时间】:2014-02-14 20:06:53 【问题描述】:

看来 SVN 的“补丁”功能并不是我想要的。我真正想要的是在修订之间创建文件差异。所以,我会选择 rev1 和 rev 2 并最终得到一个文件夹,其中包含在这些修订之间更改或添加的所有文件。

这可以用 Tortoise SVN 或普通的 svn 完成吗?

【问题讨论】:

两次修订之间删除的文件怎么办? 【参考方案1】:

您可以从命令行执行以下操作。

文件夹中的所有文件

在您的主文件夹中创建一个补丁,其中包含来自“my_project”文件夹中所有已更改文件的修订 123 和 124 之间的所有更改:

svn diff -r123:124 path/to/my_project > ~/my_project_changes_123_124.patch

一个特定的文件

在您的主文件夹中创建一个补丁,其中包含仅来自一个文件的修订 123 和 124 之间的所有更改,名称为“my_project.php”:

svn diff -r123:124 path/to/my_project/my_project.php > ~/my_project_changes_123_124.patch

【讨论】:

我不想要一个“补丁”文件,我想要在修订之间更改的原始文件。接受的答案解决了我的问题。谢谢。 要在当前版本和旧版本 116615 之间打补丁,你可以这样做: svn diff -r 116615 svn-branch-url > file.diff【参考方案2】:

这可以在乌龟SVN本身中实现。右键单击要从中创建补丁的分支(文件夹)>>Show Log>>选择您需要为其创建补丁的所有修订>>右键单击并选择Compare revisions>>这将显示更改的文件>>选择所有文件>>右键单击并选择Export Revision To>>在您的机器中提供任何路径>>文件将在相应的文件夹结构中导出。

您也可以通过脚本来实现这一点。请参考以下链接:

http://www.electrictoolbox.com/subversion-export-changed-files-cli

【讨论】:

或者代替Export Revision To,你可以选择Show differences as unified diff来创建补丁文件。【参考方案3】:

嗯...svn diff 怎么样?只需将所需的修订传递给它。

http://svnbook.red-bean.com/en/1.7/svn.ref.svn.c.diff.html

在 TortoiseSVN 中,如果您在“显示日志”对话框中突出显示您想要的修订,甚至还有一个上下文菜单项可以将更改显示为差异,然后您可以将其保存在某个地方。

【讨论】:

我不想要“补丁”文件,我想要在修订之间更改的原始文件。接受的答案解决了我的问题。谢谢。 啊,所以“文件差异”实际上是指“更改的文件列表”。是吗? 不,更改的实际文件。接受的答案完成了这一点。谢谢!

以上是关于在修订之间创建“补丁”?的主要内容,如果未能解决你的问题,请参考以下文章

从 git 存储库创建补丁或差异文件并将其应用到另一个不同的 git 存储库

创建新的 mercurial 存储库克隆 SINCE 修订版

人为增加SVN(FSFS)存储库中的修订号

在 postgresql 中跟踪修订

还原特定修订并提交新修订

错误:无法创建符号链接,致命:无法将索引文件重置为修订版“HEAD”