您好我想恢复对本地存储库中具有特定文件名的文件的所有更改。
在这种情况下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
,则按预期工作。
答案 0 :(得分:2)
svn revert
旨在帮助修复错误,而不是通过"帮助"用户意外或无意中删除了本地和未提交的更改。
如果要还原所有 SVN工作副本或目录及其所有子项中的更改,您可以运行svn revert . -R
。但是,如果您的工作副本混合了您不想丢失的有效未提交更改以及您希望恢复为未修改状态的更改,则不得运行此命令。
还原本地更改是不可逆操作。因此,必须谨慎地通过svn revert
恢复SVN工作副本的本地更改。假设您正在完成一项任务,并且尚未承诺您在几个小时内完成的一些重要更改。但与此同时,您要对要还原的文件或目录进行一些更改。在工作副本的根目录下不小心运行svn revert . -R
将恢复所有工作副本中未提交的更改。
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=infinity
是svn 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)