乌龟SVN不允许我添加任何文件

15
我正在尝试使用TortoiseSVN 1.8.1将文件添加到SVN存储库中。我右键单击文件,选择TortoiseSVN->添加。然后,在弹出的窗口中选择所有文件,然后单击“确定”。单击“确定”后,会弹出另一个对话框,所有文件似乎都已成功添加,因为每个文件旁边都显示“已添加”,最后在底部显示“已完成!”。我单击“确定”,然后右键单击父目录,再单击“提交”。我填写消息框,并确保我添加的所有文件都被选中,并且它们在“状态”下都说“已添加”。最后,我单击“确定”。一个框弹出来,正常情况下会显示“您还没有输入问题号”,我点击“继续不带问题号”。接下来弹出的框中有一行文字,显示我正在尝试添加的文件,后面跟着:
Error: Commit failed (details follow):  
Error: File '%Path to my file%' is  
Error:  out of date  
Error: File '%File name%' already exists  
Error: You have to update your working copy first.  

我成功更新了没有改变的工作副本。我也进行了成功的清理操作。我已尝试删除父目录以及彻底删除基础文件夹并重新检出基础文件夹。

我检查了存储库,没有上传与添加的文件名称相同的文件。

以上所有操作都是通过图形用户界面完成的。使用命令提示符,我得到以下结果:

svn status:
svn: E155037: Previous operation has not finished; run 'cleanup' if it was interrupted

svn cleanup 5.0.1:
svn: E155009: Failed to run the WC DB work queue associated with '%PathToBaseRepoFolder%', work item 12841 (sync-file-flags 56 %Path to another file I was unable to add from the base repo folder%)
svn: E720003: Can't set file '%Full path to the other file I was unable to add%' read-write: The system cannot find the path specified.

如果我从图形用户界面执行更新和清理操作,它会显示两者都成功。

我们正在使用http://协议。

我认为权限是正确的。


1
svn status显示什么?然后你执行了svn update,对吧?没有冲突?你的服务器使用什么类型的协议?是file://http://还是svn:?仓库中文件的权限在服务器上设置正确了吗? - David W.
请查看我的问题更新。 - Matt_Bro
有趣的帖子,出现了相同的错误信息:http://svn.haxx.se/users/archive-2013-07/0125.shtml。这可能与编码/语言有关吗?您在命令行上成功运行了 svn cleanup 吗? - David W.
5个回答

40

我使用TortoiseSVN 1.8.2-1.8.10遇到过这个问题很多次了。我找到了这篇博客文章,它解决了这个问题,但后来问题又出现了。这让我感到非常恼火,所以我写了一个快速的批处理文件脚本,从桌面运行。

前提条件

  1. 下载并解压缩sqlite3 shell工具,例如sqlite-shell-win32-x86-3080803.zip
  2. 根据下面的命令调整路径以匹配您的环境

修复(手动)

如果您只想测试这是否有用,请运行此操作

  1. 在CMD中执行C:\Downloads\sqlite3.exe "C:\src\.svn\wc.db"
  2. 进入sqlite shell后运行delete from WORK_QUEUE;
  3. 运行tortoise svn清理

修复(自动化)

如果上一步对您有用,请考虑使用以下步骤自动化该过程

  1. 转到您的.svn文件夹,例如C:\src\.svn
  2. 将sqlite3 shell工具复制到那里
  3. 在该文件夹中创建一个fix-svn.bat文件
  4. 插入脚本代码,并调整路径

"C:\src\.svn\sqlite3.exe" wc.db "delete from WORK_QUEUE"
"C:\Program Files\TortoiseSVN\bin\svn" cleanup "C:\src"
  • 保存bat文件并在桌面上创建一个快捷方式

  • 下一次需要修复它时,只需运行桌面上的快捷方式

  • 1
    抱歉,这在答案中已经有了,但文本格式并不太清晰。现在已更新。.quit.exit都可以使用。 - oleksii
    我在使用 SVN 1.8.10 客户端时遇到了问题。在从带有本地更改的工作目录创建一个特性分支后,尝试解决由 svn switch 引起的冲突时出现了问题。我认为我从错误的版本创建了特性分支。 - Martin Serrano
    我在删除我的.svn目录后遇到了这个问题(不要问为什么)- 这个方法完美地解决了这种情况,我能够进行干净的检出。谢谢你节省了我很多时间! - Paul Witherspoon

    9

    问题出在我升级到了有一个bug的版本1.8.1。我下载了版本1.8.0,它可以正常工作。


    1
    我在使用TortoiseSVN 1.8.2时遇到了同样的问题,但只有某些文件(而非所有文件)出现该问题。我重新安装了TortoiseSVN 1.8.0,现在它可以正常工作了。 - Jonas at Software Journey
    这个问题在1.8.3中似乎仍然存在,我在合并到主干时遇到了它,将主干删除后重新检出并重新合并,问题得以解决! - Peter

    2

    好的,我不知道这是否可能是一个问题。我见过在使用稀疏检出时发生此错误。您可以通过 --depth 标志来调整在检出期间看到的文件,并通过 --set-depth 标志来调整更新期间看到的文件。如果您在某些文件上使用 --set-depth=exclude,则如果尝试添加文件,则会看到此错误。

    请从命令行尝试此操作。从您的工作目录的根目录:

    $ svn cleanup
    $ svn update --set-depth=infinity
    $ svn status
    

    确保这三个命令都能正常运行。然后,尝试提交。


    2

    谢谢,这解决了我的问题。链接似乎已经过时了。当前的候选版本可以在以下目录中找到:http://nightlybuilds.tortoisesvn.net/1.8.x/x64/full/ - tea2code

    0
    sudo svn cleanup 
    

    解决我的问题


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