3

这里有个小SVN问题:

我在本地创建一个目录:

$ svn mkdir output
A         output

我不小心删除了它:

rm -rf output

现在,我该如何重新创建它?我试过这个:

$ svn mkdir output
svn: 'output' is already under version control

还有这个:

$ svn revert output
Reverted 'output'

但它仍然不存在。

更新:人们建议mkdir output删除它后简单应该就足够了。但在我的 SVN 版本中,情况并非如此。output/.svn它忽略了我也删除了一个目录这一事实。只是mkdir output不会把那个带回来,当然。所以,不知何故,SVN 必须参与该output 目录的重新创建。(我使用的是 SVN 1.4.6。)

4

4 回答 4

7

在 SVN 中正式删除它:

$  svn rm --force output
svn: 'output' does not exist

然后再次创建它:

$ svn mkdir output 
A         output

上面的输出svn remove有点误导。我认为删除失败了,它不会改变任何东西。

这不是 SVN 最直观的方法,但它是这样工作的。

于 2009-02-23T15:32:27.997 回答
2

mkdir output应该就够了。

于 2009-02-23T15:35:18.833 回答
1

您也可以尝试使用重新创建目录mkdir

svn mkdir创建目录并执行与 , 等效的操作svn add,但只需一步。

所以你遇到问题的原因是因为已经完成了“添加”。由于您没有提交,所以 revert 不会做任何事情,并且svn mkdir不会工作,因为 Subversion 已经列出了在下一次提交时添加的目录(因为您rm在 Subversion 之外)。

于 2009-02-23T15:35:46.303 回答
1

需要了解的是 SVN 维护的目录和本地文件系统维护的目录之间的区别。

在您的原始帖子中发出的四个命令执行以下操作

  1. 告诉 SVN 您希望将名为“输出”的目录添加到 SVN 存储库 - 它通过将该信息添加到其“更改列表”来响应
  2. 从本地文件系统中删除“输出” - SVN 不知道发生了这种情况
  3. 告诉 SVN 您希望将一个名为“输出”的目录添加到 SVN 存储库 - 它会抱怨,因为“你已经告诉我了!​​”
  4. 告诉 SVN,您已经改变了添加“输出”目录的想法——它通过从其“更改列表”中删除该信息来强制执行

如果您只是发布...

mkdir output

...作为您的第三步,一切都会好起来的 - 使用文件系统删除了目录,因此应该使用文件系统恢复它。没有理由让 SVN 参与修复,正如您所发现的,尝试这样做只会使事情变得混乱。

高温高压

于 2009-02-23T15:50:29.887 回答