在 `update` 中用外部结果替换目录 "working copy locked"
Replacing directory with external results in "working copy locked" on `update`
(相关: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。
是的,就是这个原因。该目录被锁定删除,同时外部内容试图在同一位置生成。
您可以通过不使用外部更新来使您的工作目录进入可提交状态:
svn update --ignore-externals
这可以防止传入的 bar
外部目录与传出目录发生冲突。但是,当然,这意味着您的外部内容不会出现。您现在可以提交,但在接下来的时间里您可能会在 SVN 中遇到损坏的修订,因为您无法先构建和测试。
有一种不理想的 hacky 方法可以解决这个问题,但至少可以让您了解新代码是否有效。它涉及在您的工作目录中移动文件夹:
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
并提交。
(相关: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。
是的,就是这个原因。该目录被锁定删除,同时外部内容试图在同一位置生成。
您可以通过不使用外部更新来使您的工作目录进入可提交状态:
svn update --ignore-externals
这可以防止传入的 bar
外部目录与传出目录发生冲突。但是,当然,这意味着您的外部内容不会出现。您现在可以提交,但在接下来的时间里您可能会在 SVN 中遇到损坏的修订,因为您无法先构建和测试。
有一种不理想的 hacky 方法可以解决这个问题,但至少可以让您了解新代码是否有效。它涉及在您的工作目录中移动文件夹:
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
并提交。