(与:SVN Externals Repo"已经锁定" 我从这样的存储库结构开始: 目录 设置此操作顺利进行: 现在我想更新工作目录,以便可以执行构建&提交之前使用新代码进行测试。 但是, 我在每个目录中尝试了 这是因为我在同一提交中试图用同名的外部名称替换目录?是我想做的吗? 我正在使用SVN 1.8。^/
├ module1/
│ ├ foo/
│ ├ bar/
│ ├ baz/
├ module2/
^/bar
实际上是module2
的略微过时的副本,我认为它是现代版本的外部,而不是字节式副本:^/
├ module1/
│ │ (external: "^/module2 bar")
│ ├ foo/
│ ├ baz/
├ module2/
svn co svn://module1 module1
cd module1
svn delete bar
svn propset svn:externals "^/module2 bar" .
svn update
导致以下错误:Fetching external item into 'module1/bar'
svn: warning: Working copy 'module1/bar' locked
svn cleanup
,但是随后的更新仍然失败,同样的错误。
是的,这就是原因。目录是在外部内容试图在同一位置产卵的同时锁定删除的目录。
您可以通过无外部更新来使您的工作目录进入可承诺的状态:
svn update --ignore-externals
防止传入的bar
外部与外卸下目录相抵触。但是,当然,这意味着您的外部内容将不存在。您将能够立即提交,但是由于无法构建&首先测试。
围绕此问题有一种骇人听闻的方法,但至少会让您了解您的新代码是否有效。它涉及您的工作目录中的移动文件夹:
svn propset svn:externals "^/module2 bar_tmp" .
svn update
rm -rf bar
mv bar_tmp bar
现在您可以进行构建&通过合理的保证测试您正在测试您要承诺的事情,尽管这有点不合常规。
您的工作目录结构看起来像这样:
~/
├ module1/
│ ├ foo/
│ ├ bar/ (external to "^/module2")
│ ├ baz/
不要做svn update
!您(故意)屠杀了您的工作目录在某种程度上,较少的SVN知道这一点越好。您不需要SVN即可进行构建&测试。
但是,当您完成并感到高兴时,您确实需要按照这些方式将事情放回:
:svn propset svn:externals "^/module2 bar" .
rm -rf bar
svn update --ignore-externals
和提交。