恢复具有指定名称的所有文件

Revert all files with a specified name

您好,我想恢复对本地存储库中具有特定文件名的文件的所有更改。 在这种情况下 AssemblyInfo.vb,我使用的是 TortoiseSVN cli。

我有以下目录结构

现在站在 Root 我 运行 命令 svn.exe revert --recursive AssemblyInfo.vb 我得到的输出是:

Skipped 'AssemblyInfo.vb'

我尝试在文件名前添加双倍和单倍 * 但没有成功,--recursive/-R 有效还是我缺少什么?

svn help revert 给出以下输出:

revert: Restore pristine working copy state (undo local changes).
usage: revert PATH...

  Revert changes in the working copy at or within PATH, and remove
  conflict markers as well, if any.

  This subcommand does not revert already committed changes.
  For information about undoing already committed changes, search
  the output of 'svn help merge' for 'undo'.

Valid options:
  --targets ARG            : pass contents of file ARG as additional args
  -R [--recursive]         : descend recursively, same as --depth=infinity
  --depth ARG              : limit operation by depth ARG ('empty', 'files',
                             'immediates', or 'infinity')
  -q [--quiet]             : print nothing, or only summary information
  --changelist [--cl] ARG  : operate only on members of changelist ARG

Global options:
  --username ARG           : specify a username ARG
  --password ARG           : specify a password ARG (caution: on many operating
                             systems, other users will be able to see this)
  --no-auth-cache          : do not cache authentication tokens
  --non-interactive        : do no interactive prompting (default is to prompt
                             only if standard input is a terminal device)
  --force-interactive      : do interactive prompting even if standard input
                             is not a terminal device
  --trust-server-cert      : deprecated; same as
                             --trust-server-cert-failures=unknown-ca
  --trust-server-cert-failures ARG : with --non-interactive, accept SSL server
                             certificates with failures; ARG is comma-separated
                             list of 'unknown-ca' (Unknown Authority),
                             'cn-mismatch' (Hostname mismatch), 'expired'
                             (Expired certificate), 'not-yet-valid' (Not yet
                             valid certificate) and 'other' (all other not
                             separately classified certificate errors).
  --config-dir ARG         : read user configuration files from directory ARG
  --config-option ARG      : set user configuration option in the format:
                                 FILE:SECTION:OPTION=[VALUE]
                             For example:
                                 servers:global:http-library=serf

如果我 运行 svn.exe revert --recursive AssemblyInfo.vb 在直接包含修改后的目录中 AssemblyInfo.vb 它会按预期工作。

在 Linux 上,这可以使用来自 findutilsfindxargs 命令的组合来完成:

find -name AssemblyInfo.vb | xargs svn revert

在 Windows 上,您可能可以安装和使用包含这些实用程序的 Cygwin

svn revert 旨在帮助 修复 错误,不会导致 "helping" 用户意外或无意地删除他们的本地和未提交的更改。

如果您想还原 所有 SVN 工作副本或目录及其所有子目录中的更改,您可以运行 svn revert . -R。但是,如果您的工作副本混合了您不想丢失的有效未提交更改和您想要恢复为未修改状态的更改,则您不能 运行 此命令。

还原本地更改是一项不可逆操作。因此,必须谨慎地通过 svn revert 恢复 SVN 工作副本中的本地更改。假设您正在处理一项任务并且尚未提交您已经处理了几个小时的一些重要更改。但与此同时,您对要还原的文件或目录进行了一些更改。不小心 运行ning svn revert . -R 在工作副本的根目录将恢复 all 工作副本中未提交的更改。

引用 SVNBook | svn revert

svn revert is inherently dangerous, since its entire purpose is to throw away data—namely, your uncommitted changes. Once you've reverted, Subversion provides no way to get back those uncommitted changes.

If you provide no targets to svn revert, it will do nothing. To protect you from accidentally losing changes in your working copy, svn revert requires you to explicitly provide at least one target.


Now while standing in Root i run the command svn.exe revert --recursive AssemblyInfo.vb and the output i get is:

svn revert 这样不行。默认情况下,它 运行 与 --depth=empty 确保它不会恢复超出用户预期的范围。但是 运行ningsvn revert-R 与 运行ning 与 --depth=infinity 相同。一般来说,在这种特殊情况下 --recursive--depth=infinity 的别名,其目的是帮助用户恢复所有本地修改(例如在无效合并之后)。

当您 运行 svn revert--recursive 时,该工具希望您指定工作副本中目录的路径,并且该操作将恢复 ALL 此目录及其子目录中的更改。 如果命令的目标是文件,则不会有任何效果。

您需要的是 --targets 和一些脚本。例如,运行 PowerShell 控制台中的以下命令(我确信它可以在 PowerShell 中比在本示例中更优雅地完成):

(dir -Path "files.html" -Recurse -File).FullName | Out-File -Encoding ASCII mytargets.txt
svn revert --targets mytargets.txt

dir 是 PowerShell 中 Get-ChildItem cmdlet 的别名。在这种情况下,它会获取名称为 files.html 的所有文件的列表,并将完整路径写入 mytargets.txt 文件。然后它 运行s svn revertmytargets.txt 读取路径并恢复对文件所做的本地修改。

我建议使用这种方法,而不是将输出通过管道传输到 svn revert,因为您可以(并且应该)查看 svn revert 将处理的项目列表。这可以帮助您确保不会还原更多您实际想要的内容。