Svn 将目录替换为“中的外部结果”;“工作副本已锁定”;关于`更新`

Svn 将目录替换为“中的外部结果”;“工作副本已锁定”;关于`更新`,svn,svn-externals,Svn,Svn Externals,(有关:) 我从这样的存储库结构开始: ^/ ├ module1/ │ ├ foo/ │ ├ bar/ │ ├ baz/ ├ module2/ ~/ ├ module1/ │ ├ foo/ │ ├ bar/ (external to "^/module2") │ ├ baz/ 目录^/bar实际上是模块2的一个稍微过时的副本,我决定它最好是现代版本的外部版本,而不是字节副本: ^/ ├ module1/ │ │ (external: "^/module2 bar") │ ├ foo/

(有关:)

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

^/
├ module1/
│ ├ foo/
│ ├ bar/
│ ├ baz/
├ module2/
~/
├ module1/
│ ├ foo/
│ ├ bar/    (external to "^/module2")
│ ├ baz/
目录
^/bar
实际上是
模块2
的一个稍微过时的副本,我决定它最好是现代版本的外部版本,而不是字节副本:

^/
├ module1/
│ │ (external: "^/module2 bar")
│ ├ foo/
│ ├ baz/
├ module2/
这一设置进展顺利:

svn co svn://module1 module1
cd module1
svn delete bar
svn propset svn:externals "^/module2 bar" .
现在我想更新工作目录,以便在提交之前使用新代码执行构建和测试

但是,
svn更新
会导致以下错误:

Fetching external item into 'module1/bar'
svn: warning: Working copy 'module1/bar' locked
我在每个目录中尝试了
svn cleanup
,但后续更新仍然失败,并出现相同的错误

这是因为我试图在同一个提交中用同名的外部目录替换目录吗?我想做的事可能吗


我正在使用SVN 1.8。

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

您可以在不使用外部文件的情况下进行更新,从而使工作目录进入可提交状态:

svn update --ignore-externals
防止传入的
外部目录与传出目录冲突。然而,当然,这意味着你的外部内容不会出现。您现在就可以提交了,但在接下来的时间里,您可能会被SVN中的一个坏版本所困扰,因为您无法先进行构建和测试

有一种不太理想的方法可以解决这个问题,但至少可以让您了解新代码是否正常工作。它涉及在工作目录中移动文件夹:

svn propset svn:externals "^/module2 bar_tmp" .
svn update
rm -rf bar
mv bar_tmp bar
现在,您可以合理地保证您正在测试您将要提交的内容来进行构建和测试,尽管这有点非正统

您的工作目录结构如下所示:

^/
├ module1/
│ ├ foo/
│ ├ bar/
│ ├ baz/
├ module2/
~/
├ module1/
│ ├ foo/
│ ├ bar/    (external to "^/module2")
│ ├ baz/
不要执行
svn更新
!你[故意]破坏了你的工作目录 在某种程度上,SVN知道的越少越好。您不需要SVN来进行构建和测试

但是,当你完成并感到高兴时,你确实需要将事情恢复原状:

svn propset svn:externals "^/module2 bar" .
rm -rf bar
svn update --ignore-externals
并承诺