奇数SVN反向合并错误消息

时间:2011-12-19 23:17:02

标签: svn merge restore revert

尝试反向合并以恢复1个特定文件。我相信我理解它应该如何运作,但却会出现奇怪的错误。

我重读了svn书,Google和堆栈等等。

问题:

我想指定要恢复的1个特定文件。

SVN不喜欢本地文件引用,因为该文件不存在,但在线示例似乎使用本地文件名。

它也不喜欢完整的http路径,因为它在存储库中不存在。我知道它现在不存在,但它就在那里。即使使用@peg语法仍然会出错。

示例:

  • 在修订版 100 中,我删除了一堆文件,因此 r99 是它存在的最后一个时间点。
  • 我们现在处于修订版 150 ,我只想要一个文件。
  • 假设该文件名为 .myFile (带有一个前导点,不要认为重要)
  • 项目网址和“工作目录”为http://server/repo/Project/trunk
  • 文件的网址应为http://server/repo/Project/trunk/.myFile
  • 假设我在等效的文件系统目录中,没有待处理的更新或提交,换句话说 svn status --show-updates。显示我是最新的。
  • 我能做svn cat http://server/repo/Project/trunk/.myFile@99

尝试失败:

svn merge -c -100 .myFile
Error: .myFile not under version control

svn merge -c -100 http://server/repo/Project/trunk/.myFile
Error: svn: '/repo/!svn/bc/120/Project/.myFile' path not found
Note that rev 120 is between the delete (r100) and now (r150)

svn merge -c -100 http://server/repo/Project/trunk/.myFile@99
Error: svn: File not found: revision 100, path '/Project/trunk/.myFile'

svn merge -c -100 . .myFile
Don't recall specific error.

svn merge -c -100 . http://server/repo/Project/trunk/.myFile@99
Error: svn: Cannot specify a revision range with two URLs

......以及各种其他组合......

我真的很难过。我相信我理解反向合并,以及为什么有时需要@pegs,但这个特殊的组合非常令人烦恼。

我有解决方法:我可以恢复所有文件然后清理。或者只是复制并粘贴旧版本,我可以使用svn cat命令。

但我想了解“正确”的方式。

1 个答案:

答案 0 :(得分:1)

今天处理一个稍微不同的问题,我相信我终于找到了答案。

我正在合并来自单个文件的更改,而不是恢复已删除的副本,所以不完全相同。

我做了一个关键的改变:

  • 我使用了明确的-r FROM:TO范围,而不是仅使用-c快捷方式。

其他要点:

  • 来源应采用网址格式
  • 目的地应为本地./filename格式

假设示例修订概述:

  • 目前系统为r150
  • 在r100
  • 中删除了文件
  • 文件最后出现在r99中(虽然没有修改)
  • 上次在r85
  • 中添加/更新了文件
  • 注意:我的示例文件名是Unix隐藏文件,因此它以点开头 - 大多数文件都没有。

撤消删除,我认为会是:

cd localWorkDir/Project/trunk
svn update
svn merge -r100:85 http://server/repo/Project/trunk/.myFile ./.myFile
svn commit -m "restoring files"
(message saying committed r151)

所以我认为合并单个文件时的-c语法是有问题的。