(与SVN externals repo "is already locked" on update相关)
我开始使用这样的存储库结构:
^/
├ 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。
答案 0 :(得分:1)
是的,这就是原因。在外部内容试图在同一位置产生的同时,该目录被锁定以进行删除。
您可以通过无外部更新来使您的工作目录进入可提交状态:
svn update --ignore-externals
这可以防止传入的bar
外部与传出目录冲突。但是,当然,这意味着您的外部内容不会出现。你现在可以提交了,但是你可能会在SVN的剩余时间内被修复破坏,因为你无法构建&先测试一下。
围绕这种方法有一种不太理想的方法,但至少会让你知道你的新代码是否正常工作。它涉及在工作目录中移动文件夹:
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
并提交。