假设我在工作副本中并执行以下操作,我完全感到困惑:
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 最佳实践文档:
您的工作副本的目录和文件可以处于不同的"工作"版本:这是一个有意识的功能,允许您将旧版本的东西与新版本混合搭配.但是你必须注意的事实很少:
- 每次svn提交后,您的工作副本都有混合修订.您刚刚提交的内容现在是HEAD修订版,其他所有内容都是旧修订版.
- 某些提交是不允许的:
- 您不能提交删除没有HEAD工作版本的文件或目录.
- 您不能将属性更改提交到没有HEAD工作版本的目录.
- svn update会将您的整个工作副本带到一个工作版本,并且是第2点中提到的问题的典型解决方案.
书籍参考:混合修订的限制.
这篇文章也很好地解释了混合修订工作副本.