乌龟SVN与自身存在树冲突

3

有没有人在使用tortoise SVN时遇到过这种情况:移动文件并成功提交,但后来提交另一个更改时却被告知存在树冲突,其中:

  1. 原始位置的文件已被删除,但在tortoise中标记为丢失
  2. 新位置的文件已经存在,但被标记为已添加。

(我使用的是tortoise SVN,我们的客户端和服务器版本均>1.60)

没有其他人更改过目录或文件(根据svn日志)。

  1. 为什么会出现这种情况?
  2. 有没有办法避免它发生?
  3. 如果确实发生了,是否有比删除整个文件夹并重新更新更优雅的解决方法?
3个回答

3
  1. 听起来你可能是使用了Windows资源管理器的“移动”命令,而不是TortoiseSVN的“移动”命令。前者只是在文件系统中移动文件,而没有更新版本控制树(删除旧文件的版本控制并将旧文件的历史链接到新文件)。

  2. 始终使用TortoiseSVN的“移动”命令,或者如果您想要移动文件但不需要历史记录,则使用Windows资源管理器复制文件,使用Tortoise添加新版本,然后使用Tortoise删除旧版本。

  3. 您可以右键单击旧文件的父文件夹,选择“检查修改”,然后从版本控制中删除标记为缺失的文件。


1
不对。我使用右键拖动“与svn一起移动”。第3步只解决了一半的问题,因为我仍然无法提交文件,因为存储库认为已经检入的文件正在等待检入。我能想到的唯一解决这个明显错误的方法是删除文件夹并更新。 - Jesse Pepper
@Jesse,当您在移动后成功提交时,您从哪个级别进行提交?是您的工作副本的顶层,子目录还是其他什么? - Nick Meyer
我从我的源代码树的根目录提交。 - Jesse Pepper

1
听起来你已经提交了文件,但是没有提交它被移动到/从哪个目录。你需要一并提交这些目录。

不,我从源代码树的根目录提交。像往常一样。 - Jesse Pepper
2
谢谢您的 -1。我很感激您的努力。 - Andriy Volkov

0

我在右键单击文件夹,选择“重命名”,并将“newpath\to\folder”用作参数时遇到了树冲突。经过多轮失败的清理命令和其他一些操作后,我最终通过以下步骤恢复了正常:

  1. 在不同的文件夹中打开新的干净检出
  2. 从干净检出中删除并提交损坏的“newpath\to\folder”
  3. 选择“oldpath\folder”右键拖动并svn移动到新位置
  4. 立即提交更改,中间没有其他操作
  5. 转到损坏的检入“oldpath\folder”,手动复制被丢弃或留下的文件到“newpath\to\folder”
  6. 将手动复制的文件添加为新文件。

手动更新的文件的无缝历史链已经断开,但至少现在我可以继续工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接