【问题标题】:Reverting changes failed with some skipped paths由于某些跳过的路径,还原更改失败
【发布时间】:2017-06-30 11:52:55
【问题描述】:

我已阅读此答案:How do I return to an older version of our code in Subversion? 并使用命令 svn merge -r 150:140 . 恢复到旧版本(我不需要提交恢复的更改,只需访问旧版本的文件)。在此之前,我在修订版 150 中有一个干净的 repo 版本(无需手动更改文件)。不幸的是,我收到了以下警告:

...
Skipped 'some/file.h'
Skipped 'some/file2.h'
...
Skipped 'some/file3.h'
Skipped 'some/file4.h'
...
Summary of conflicts:
Skipped paths: 4

这让我感到惊讶,因为我想做的只是回到某个旧版本的文件(而且我事先没有进行任何更改)。

是什么原因造成的?如何进入旧版本?

编辑:我已经检查过,显然这些文件在当前版本 (150) 中不存在(在磁盘上或在 SVN 中):

svn: warning: W155010: The node 'some/file.h' was not found.

但它们确实存在于修订版 140 中。所以在某个地方它们被删除了。但是为什么 SVN 不能直接恢复它们呢?

【问题讨论】:

  • 有文件重命名吗? Subversion 不能很好地处理重命名。
  • 不,这些文件刚刚被删除。
  • svn stat 的输出是什么?
  • 不幸的是,我不再拥有这个存储库 - 不得不继续我的工作。所以恐怕我们不能继续这个话题了。但我不认为我现在可以关闭赏金。
  • 这可能是您推迟的合并冲突引起的,然后您在本地删除了文件,现在它不会检出文件,不会更新它并跳过它。

标签: svn merge revert


【解决方案1】:

这种树冲突的最常见根本原因是,您的工作副本发生了一些更改,然后您尝试合并 - 可能会发生不好的事情。只是从输出中猜测,它可能与“某些”文件夹有关(即,如果整个文件夹在修订 140 和 150 之间被删除 - 不仅仅是文件;或者如果您在合并之前对跳过的文件进行了一些本地更改)。

如果将来再次发生这种情况,请尝试通过执行以下操作来恢复失败的合并:

svn revert --recursive

回到第 150 版,从您的工作副本中删除所有未版本控制的文件和文件夹,然后使用重新运行合并

svn merge -r 150:140 -v --force .

-v 将显示更详细的信息,--force 将从您的工作副本中删除文件,即使它们是在本地修改的)

万一其他一切都失败了,最后的手段总是使用 140 版将新的工作副本签出到新的本地文件夹中

svn checkout -r 140 $your_url

【讨论】:

  • “在此之前,我有一个干净的版本 150 的 repo(没有手动更改文件)。”
  • 没有更多关于 svn 变化和工作副本状态的信息,我们只能猜测真正的根本原因是什么
  • 我知道,我在对我的问题的评论中写道。
  • 我不明白为什么这个答案得到了任何赞成 - 我们可能无法找到根本原因,但我明确表示回购是一个没有修改的干净结帐,这个答案指向修改作为潜在的根本原因。
猜你喜欢
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 2018-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多