我通常在项目上处理大块代码,并且不时需要将我的数据备份到补丁:
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,打破它们。
因此,总结一下:当{/ 1}}将补丁应用到我的本地工作副本时,是否可以在新/已添加文件上自动发出patch
命令?
答案 0 :(得分:3)
是的,可以使用svn 1.7新命令svn patch
。
运行svn patch /backups/assignment-XX_diff-YY.patch
而不是patch -p0 < /backups/assignment-XX_diff-YY.patch
。来自Apache Subversion 1.7 Release Notes:
svn补丁会将unidiff更改应用于现有文件,就像第三次一样 派对补丁工具。它还会将新创建的文件添加到版本中 控制,删除之后留空的文件和目录 修补。