当';svn清理';失败?

当';svn清理';失败?,svn,Svn,我在一个工作文件夹中做了很多更改,试图进行更新时出现了一些问题 现在,当我发布“svn清理”时,我得到: >svn cleanup . svn: In directory '.' svn: Error processing command 'modify-wcprop' in '.' svn: 'MemPoolTests.cpp' is not under version control MemPoolTests.cpp是另一个开发人员添加的新文件,在更新中被删除。它以前不存在于我的工作

我在一个工作文件夹中做了很多更改,试图进行更新时出现了一些问题

现在,当我发布“svn清理”时,我得到:

>svn cleanup .
svn: In directory '.'
svn: Error processing command 'modify-wcprop' in '.'
svn: 'MemPoolTests.cpp' is not under version control
MemPoolTests.cpp是另一个开发人员添加的新文件,在更新中被删除。它以前不存在于我的工作文件夹中

我可以做些什么来尝试向前推进,而不必签出存储库的新副本

澄清:感谢您提出建议,将目录移到一边,并下载新的副本。我知道这是一个选项,但我希望避免这样做,因为有许多更改嵌套在几个目录深处(这应该是一个分支…)

我希望有一种更积极的方式来进行清理,也许是强制文件SVN返回到已知状态的方式(我尝试删除它的工作副本…但没有帮助)。

如果所有其他方法都失败:

  • 签出到一个新文件夹
  • 把你修改过的文件复制过来
  • 回来登记
  • 在删除旧文件夹并使用新文件夹之前,将其压缩到某个位置(你永远不知道+偏执狂是好的)
  • 这个答案只适用于1.7之前的版本(谢谢@ŁukaszBachman)

    Subversion将其信息存储在每个文件夹中(在.svn中),因此,如果您只是处理一个子文件夹,则不需要签出整个存储库,只需签出已损坏的文件夹即可:

    cd dir_above_borked
    mv borked_dir borked_dir.bak
    svn update borked_dir
    
    这将为您提供一个borked文件夹的良好工作副本,但您仍然可以在borked_dir.bak中备份所做的更改。同样的原则也适用于Windows/TortoiseSVN

    如果在独立文件夹中有更改,请查看

    svn checkout -N borked_dir   # Non-recursive, but deprecated
    


    我也有同样的问题。我无法提交,清理工作将失败

    使用命令行客户端,我能够看到一条错误消息,表明它无法将文件从
    .svn/props
    移动到
    .svn/prop base


    我查看了特定的文件,发现它被标记为只读。删除只读属性后,我能够清理文件夹并提交我的更改。

    重新开始时不是一个选项


    我删除了
    .svn
    目录中的日志文件(我还删除了
    .svn/props base
    中有问题的文件),进行了清理,然后继续更新。

    它可能不适用于所有情况,但当我最近遇到这个问题时,我的“修复”是升级我系统上的Subversion包。我一直在运行1.4.6版本的东西,当我升级到最新版本(我的例子是1.6.6)时,结帐成功了


    (我确实尝试过重新下载它,但对一个干净目录的签出总是挂在同一个位置。)

    可能是因为两个文件名的大小写不同。如果遇到此问题,创建另一个工作副本目录并不能解决此问题

    当前的Windows(即蹩脚的)文件系统根本无法区分
    Filename
    Filename
    之间的区别。您有两种可能的修复方法:

  • 使用真正的文件系统(基于Unix)在平台上签出,重命名文件并提交更改
  • 当您储存到Windows时,您可以在Eclipse SVN存储库浏览器中重命名文件,该浏览器可以识别差异并在那里重命名文件
  • 您还可以使用
    SVN rename-m“breaked filename case”从任何命令行SVN客户端远程重命名有问题的文件http://server/repo/FILEname http://server/repo/filename

  • 使用Windows的网络驱动器上有时会发生只读锁定。尝试断开连接,然后重新连接。然后进行清理和更新。

    如果问题是区分大小写的(这在签出到Mac和Windows时可能是个问题),并且您没有签出到*nix系统的选项,则以下操作应该有效。以下是从一开始的过程:

    % svn co http://[domain]/svn/mortgages mortgages
    
    (结帐之后……然后……)

    在这里,SVN尝试签出两个名称相似但大小写不同的文件-
    Header\u 3\u noBookmark.gif
    Header\u 3\u noBookmark.gif
    。Mac文件系统默认不区分大小写,在这种情况下会导致SVN阻塞。所以

    % cd mortgages/trunk/images/rates/
    % svn up
    svn: Working copy '.' locked
    svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)
    
    但是,正如我们所知,运行
    svn cleanup
    不起作用

    % svn cleanup
    svn: In directory '.'
    svn: Error processing command 'modify-wcprop' in '.'
    svn: 'spacer.gif' is not under version control
    
    spacer.gif
    不是这里的问题……它只是无法将上一个错误移到下一个文件。因此,我删除了目录中除
    .svn
    以外的所有文件,并删除了svn日志。这使得清理工作得以进行,因此我可以签出并重命名有问题的文件

    % rm *; rm -rf .svn/log; svn cleanup
    % svn up Header_3_nobookmark.gif
    A    Header_3_nobookmark.gif
    Updated to revision 1087.
    % svn mv Header_3_nobookmark.gif foo
    A         foo
    D         Header_3_nobookmark.gif
    % svn up
    A    spacer.gif
    A    Header_3_noBookmark.gif
    
    接下来,我可以返回到项目的根目录,运行
    svn up
    查看其余部分

    $ ls -la .svn
    $ rm -f .svn/lock
    
    然后


    希望它能有所帮助

    在浏览了这里引用的大多数解决方案之后,我仍然发现了错误

    问题是。签出包含两个同名文件但大小写不同的目录会导致问题。例如,ApproximationTest.java和ApproximationTest.java不应位于同一目录中。一旦我们删除了其中一个文件,问题就会消失。

    (在您尝试移动文件夹和执行新签出之前。)

    删除有问题的文件所在的文件夹-是,甚至是
    .svn
    文件夹,然后
    在最上面的/父文件夹上执行
    svn清理

    我遇到一个问题,在更新后,svn显示一个文件夹冲突。奇怪的是,这只能通过命令行看到——乌龟认为一切都很好

    #>svn st
    !       my_dir
    !       my_dir\sub_dir
    
    svn cleanup
    svn revert
    svn update
    svn resolve
    都无法修复此问题

    我最终解决了以下问题:

    • 在.svn目录中查找“sub_dir”
    • 使用RC->Properties取消选中t上的“只读”标志
      $ ls -la .svn
      $ rm -f .svn/lock
      
      $ svn update
      
      #>svn st
      !       my_dir
      !       my_dir\sub_dir
      
      # Go to the parent directory
      cd dir_above_borked
      
      # Rename corrupted directory
      mv borked_dir borked_dir.bak
      
      # Checkout a fresh copy
      svn checkout svn://... borked_dir
      
      # Copy the modified files to the fresh checkout
      # - test rsync
      #   (possibly use -c to verify all content and show only actually changed files)
      rsync -nav --exclude=.svn borked_dir.bak/ borked_dir/
      
      # - If all ok, run rsync for real
      #   (possibly using -c again, possibly not using -v)
      rsync -av --exclude=.svn borked_dir.bak/ borked_dir/
      
      svn: E720002: Can't open file '..\.svn\pristine\40\40d53d69871f4ff622a3fbb939b6a79932dc7cd4.svn-base':
      The system cannot find the file specified.
      
      ~/path/to/svn-folder/$ svn cleanup