1

我通常在项目中处理大量代码,并且不时必须将我的数据备份到补丁:

svn diff > /backups/assignment-XX_diff-YY.patch

然后我恢复并更新我的本地工作副本:

svn revert -R . && svn up

然后我开始处理我的其他任务,当它被提交时,我在本地清理并恢复,然后从我之前所做的工作中重新应用我的补丁:

svn revert -R .
svn up
patch -p0 < /backups/assignment-XX_diff-YY.patch

我注意到的一件事是,当我创建一个新文件时,然后添加该文件,例如:

touch newFile.cpp
svn add newFile.cpp

新添加的文件及其内容在我创建的补丁中,并且在我应用补丁时会重新创建文件,但是在我应用补丁时不会自动设置“已添加”状态。这导致我应用了一个准备好提交的补丁,但只有“修改”的文件被提交,而不是“添加的”文件。此外,“新”文件(如果它们已经存在)现在将整个补丁附加到 EOF,从而破坏它们。

因此,总而言之:当将补丁应用于我的本地工作副本时,是否可以patch自动对新/添加的文件发出命令?svn add

4

2 回答 2

4

是的,可以使用 svn 1.7 new command svn patch

运行svn patch /backups/assignment-XX_diff-YY.patch而不是patch -p0 < /backups/assignment-XX_diff-YY.patch. 来自Apache Subversion 1.7 发行说明

svn patch 将像第三方补丁工具一样将 unidiff 更改应用于现有文件。它还将新创建的文件添加到版本控制中,并删除修补后留空的文件和目录。

于 2012-05-12T11:25:45.223 回答
0

要在补丁中包含新添加的文件,我们可以使用 --show-copies-as-adds 选项

svn diff --show-copies-as-adds > TARGET_PATCH_FILE

于 2021-11-15T03:52:11.643 回答