【问题标题】:Applying patch does not create files with "add" status应用补丁不会创建具有“添加”状态的文件
【发布时间】:2012-05-20 12:01:12
【问题描述】:

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

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 将补丁应用到我的本地工作副本时,是否可以让 patch 自动对新/添加的文件发出 svn add 命令?

【问题讨论】:

    标签: svn versioning patch


    【解决方案1】:

    是的,可以使用 svn 1.7 新命令 svn patch

    运行 svn patch /backups/assignment-XX_diff-YY.patch 而不是 patch -p0 &lt; /backups/assignment-XX_diff-YY.patch。来自Apache Subversion 1.7 Release Notes

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

    【讨论】:

    • 版本 1.9.5 svn 补丁跳过未找到的文件.. 不从补丁添加新文件。这似乎是一个错误。
    • @kchoi,是的,这是一个错误:issues.apache.org/jira/browse/SVN-4525
    • @kchoi 我在 SVN 1.9.7 中也遇到了这种情况,但在我的情况下,添加的文件已经在本地添加为未版本化。删除后,补丁已成功应用。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多