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

ojb*_*ass 6 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"
Run Code Online (Sandbox Code Playgroud)

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

 svn delete trunk/e
 svn commit -m "deleted file e"
 svn copy trunk tags/1.1
 svn commit -m "created tag 1.1"
Run Code Online (Sandbox Code Playgroud)

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

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

我到底做错了什么?

更新:

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

Avi*_*Avi 10

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

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

从Subversion 最佳实践文档:

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

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

书籍参考:混合修订的限制.

这篇文章也很好地解释了混合修订工作副本.