还原具有指定名称

时间:2017-01-30 14:22:24

标签: windows svn tortoisesvn command-line-interface revert

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

我有以下目录结构

    • 项目1
      • FILE1.TXT
      • 我的项目
        • AssemblyInfo.vb中
    • 项目2
      • FILE2.TXT
      • 我的项目
        • AssemblyInfo.vb中

现在站在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,则按预期工作。

2 个答案:

答案 0 :(得分:2)

svn revert旨在帮助修复错误,而不是通过"帮助"用户意外或无意中删除了本地和未提交的更改。

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

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

引用SVNBook | svn revert

  

svn revert本质上是 dangerou ,因为它的全部目的是   丢弃数据 - 即您未提交的更改。一旦你有了   还原,Subversion没有办法找回那些未提交的   变化。

     

如果您没有向svn revert提供任何目标,它将无效。至   保护您免受意外丢失工作副本的更改,svn revert要求您明确提供至少一个目标。

  

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

svn revert无法正常工作。默认情况下,它与--depth=empty一起运行,以确保它不会比用户预期的还原更多。但使用svn revert运行-R与使用--depth=infinity运行--recursive相同。一般来说,在这种特殊情况下,--depth=infinitysvn revert的别名,其目的是帮助用户恢复所有本地修改(例如,在无效合并之后)。

当您使用--recursive运行--targets时,该工具希望您指定工作副本中目录的路径,然后该操作将还原 ALL 所做的更改在此目录及其子目录中。 如果命令的目标是文件,则无效。

你要找的是(dir -Path "files.html" -Recurse -File).FullName | Out-File -Encoding ASCII mytargets.txt svn revert --targets mytargets.txt 和一些脚本。例如,在PowerShell控制台中运行以下命令(我确信它在PowerShell中可以比在此示例中更优雅地完成):

dir

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

我建议使用此方法,而不是将输出汇总到svn revert,因为您可以(并且应该)查看myfunc将处理的项目列表。这有助于确保您无法实现更多实际意图。

答案 1 :(得分:1)

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

find -name AssemblyInfo.vb | xargs svn revert

在Windows上,您可以安装并使用包含这些实用程序的findutils