SVN删除头疼我做错了什么?

时间:2010-12-22 23:03:18

标签: svn

我很困惑,假设我在工作副本中并执行以下操作:

svn mkdir trunk 
svn mkdir tags 
svn mkdir branches 
svn commit -m "added trunk branches and trunk" 
cd trunk 
touch a b c d e f g 
svn add a b c d e f g 
cd .. 
svn commit -m "added files"
svn copy trunk tags/1.0 
svn commit -m "tagged 1.0"

现在我想删除一个文件并标记另一个版本

 svn delete trunk/e
 svn commit -m "deleted file e"
 svn copy trunk tags/1.1
 svn commit -m "created tag 1.1"

我收到类似于以下内容的错误消息:

  

/svn/repos/banana/!svn/wrk/1f39512a-0e1e-11e0-9d1f-5be991158436/63885/tags/1.1/e”   路径未找到

我在这里做错了什么?

更新

我发现如果我在删除后执行svn更新一切正常。我想解释一下这种行为。

2 个答案:

答案 0 :(得分:10)

这显然是Subversion的一个已知问题,在提交后使用删除。提交时,您的工作副本将成为混合修订工作副本,然后不允许提交删除。

您可以在执行更新/提交之前运行svnversion来验证这一点。您会注意到混合版本标记为“0:4”之类的工作副本版本。

来自Subversion best practices document

  

您的工作副本的目录和文件可以处于不同的“工作”版本:这是一个深思熟虑的功能,允许您将旧版本的东西与新版本混合搭配。但是你必须要注意的事实很少:

     
      
  1. 每次svn提交后,您的工作副本都有混合版本。您刚刚提交的内容现在是HEAD修订版,其他所有内容都是旧修订版。
  2.   
  3. 某些提交被禁止:   
        
    • 您无法提交删除没有HEAD工作版本的文件或目录。
    •   
    • 您无法将属性更改提交到没有HEAD工作版本的目录。
    •   
  4.   
  5. svn update会将您的整个工作副本带到一个工作版本,并且是第2点中提到的问题的典型解决方案。
  6.         

    图书参考The limitation of mixed revisions

这篇文章也很好地解释了mixed revision working copies

答案 1 :(得分:2)

错误消息也包含此

svn: Commit failed (details follow): 
svn: File '1.1/e' is out of date

我发现,如果我在复制到标签之前进行svn更新,那么

svn delete trunk/e   
svn commit -m "deleted file e"   
svn update 
svn copy trunk tags/1.1   
svn commit -m "created tag 1.1"

这很好用。对此行为的解释将不胜感激。