1

在寻找 SVN revert 命令解释时,我看到了以下解释:

此子命令不需要网络访问,并解决任何冲突状态。但是,它不会恢复已删除的目录。

我想知道,为什么它不需要网络访问,以及为什么它不恢复已删除的目录。

4

2 回答 2

1

svn将有关工作副本的信息保存在.svn文件夹中,并使用它对工作副本执行一些管理任务,而无需访问存储库,即通过网络。如果您浏览这些目录,您会发现那里有一个本地数据库文件和一堆带有一堆文件的子目录.svn-base。这些反映了您上次执行svn updateor时工作副本的状态svn checkout。因此,如果您更改工作副本中的文件,svn则可以根据相应的本地保存.svn-base文件来区分差异,从而可以恢复更改。

不保存有关目录结构的信息。如果要还原目录上的更改,最简单的方法是svn update 从该目录的父目录执行 - 这显然需要存储库,因此需要网络连接。

您似乎正在阅读该问题的答案中发布的旧版 svn 客户端的帮助。

使用 1.7 版(至少,我无法确认此更改究竟来自哪个版本)及以上svn help revert状态:

注意: 此子命令不需要网络访问,并解决任何冲突状态

在对我的一个本地副本进行一些测试之后:

使用文件系统删除

Cmd-$> rd /Q /S <working copy>

或使用 svn 命令删除

Cmd-$> svn remove <working copy>
D         <working copy>
D         <working copy>\<file1>
D         <working copy>\<file2>

使用命令

Cmd-$> svn revert -R .

在这两种情况下我都能恢复。

于 2013-09-22T14:23:22.740 回答
1

svn revert不需要网络访问,因为每个工作副本都存储每个文件的“原始”副本,因为它是在上次更新时从存储库下载的。因此revert,将该文件复制到您的工作副本中。

至于删除的目录,这可能不再是真的了。在 1.7 之前的版本中,每个目录都可以被视为一个独立的工作副本,因此它可能无法恢复这些,因为它没有原始副本。

于 2013-09-22T14:12:34.907 回答