在"更新"时"working copy locked"将目录替换为外部结果



(与:SVN Externals Repo"已经锁定"

我从这样的存储库结构开始:

^/
├ 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 1.8。

是的,这就是原因。目录是在外部内容试图在同一位置产卵的同时锁定删除的目录。

您可以通过无外部更新来使您的工作目录进入可承诺的状态:

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

和提交。

最新更新