确认提示后如何删除 SVN 目录?

Posted

技术标签:

【中文标题】确认提示后如何删除 SVN 目录?【英文标题】:How can I remove SVN directories after a confirmation prompt? 【发布时间】:2011-01-12 05:09:44 【问题描述】:

我希望能够从目录中删除 .SVN 文件夹。

我发现以下注册表黑客可以让您这样做...

http://weblogs.asp.net/jgalloway/archive/2007/02/24/shell-command-remove-svn-folders.aspx

但是,我不喜欢这个解决方案的一件事是它根本不提供任何确认。我希望它做这个 cmd 脚本所做的事情,但首先得到一个确认提示。

有什么想法吗?

编辑 我的理解是 SVN Export 不会复制出未版本控制的文件。这就是我要求这个的原因。

赛斯

【问题讨论】:

【参考方案1】:

你可以使用Subversion命令行并运行svn export如果你使用的是TortoiseSVN,你可以使用this。

【讨论】:

拉里,很好的答案。我确实使用 TortoiseSVN。我知道 svn Export 命令。我的理解是 SVN Export 不会复制未版本控制的文件。这就是我要问的原因(并且应该在问题中更清楚)。那就是说我不知道​​乌龟功能。这会使未版本化的文件完好无损吗? 我不需要这样做,所以我不知道。找出答案的一种方法是在您的环境中使用测试工作副本进行尝试。 如果您选择全部导出,它将包括未版本化的文件。【参考方案2】:

试试这个脚本的修改。它在运行目录删除之前添加了一个提示:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]
@="Delete SVN Folders"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command]
@="cmd.exe /c \"TITLE Removing SVN Folders in %1 && COLOR 9A && choice /m "Remove SVN folder" && if ERRORLEVEL 2 goto done && FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\" && :done \""

【讨论】:

这不起作用。没有提示就跑了。不过我喜欢这个主意。这正是我想要的。 语法似乎高度依赖于您运行的 Windows 版本,所以我放弃了...... :)【参考方案3】:

删除隐藏在该脚本中的 RD 命令上的 /q 选项。

这应该会导致每次调用 rd(删除目录)都询问...

不过,与此同时,我想问你为什么不使用 svn 导出选项。

【讨论】:

【参考方案4】:

如果你把脚本的内容放到 cmd 文件中,然后设置注册表让它指向这个 cmd 文件呢?然后,您可以添加各种操作,例如 Wikipedia 的示例。我希望这可以帮助您创建解决方案。

【讨论】:

【参考方案5】:

如果你完全使用 Perl,这里有一个小脚本我有这样做的,加上取出其他目录类型(方便 /bin 等.. 从 VS):

#!/usr/local/bin/perl -w
#-------------------------------------------------------------------------------
# removedirs.pl - Recursively removes directories from a given root folder
# Author: Nick Gotch
# Date: 07-13-2009
#-------------------------------------------------------------------------------
use strict;
use warnings;
use File::Path;

#-------------------------------------------------------------------------------
# User Setting Variables
#-------------------------------------------------------------------------------
my $basepath = 'C:\\Path\\to\\RootDir\\';

#-------------------------------------------------------------------------------
# Processing
#-------------------------------------------------------------------------------
# Prompt for Confirmation
syswrite(STDOUT, "Confirm removal of directories?\nPress 'Y' to confirm.\n");
$confirm = <STDIN>;
if($confirm =~ /^[Yy]$/)

    # Add lines here to remove other dirs...
    RemoveDir($basepath, ".svn");
    syswrite(STDOUT, "Done.\nPress <ENTER> to close.\n");

<STDIN>;

sub RemoveDir

    my ($directory, $dirtodelete) = @_;

    if(-e $directory.'\\'.$dirtodelete.'\\')
    
        rmtree($directory.$dirtodelete.'\\');
        syswrite(STDOUT, "Removed: ".$directory.$dirtodelete.'\\'."\n");
    

    opendir(DIR, $directory);
    my @subdirlist;

    while(my $subdir = readdir(DIR))
    
        if(($subdir ne '.') && ($subdir ne '..') && (-d $directory.$subdir))
        
            push(@subdirlist, $directory.$subdir.'\\');
        
    

    closedir(DIR);

    foreach my $subdir (@subdirlist)  RemoveDir($subdir, $dirtodelete); 

【讨论】:

【参考方案6】:

对 reg 值的 Powershell 命令试试这个:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command "& if ((read-host '确认删除 .SVN 文件夹。按 Y 或 N') -eq 'y') Get-ChildItem '%1' -r *.svn | ?$_.PSIsContainer | Remove-Item -r -force -verbose -ea 0; Read-Host 'Press enter to exit' "

如果您不想看到已删除的文件,请删除 -verbose。

【讨论】:

以上是关于确认提示后如何删除 SVN 目录?的主要内容,如果未能解决你的问题,请参考以下文章

svn如何删中文目录. 中文目录结构,UNICODE, 目录下建了(中文)文件.删除时路径无法解析.

如何删除已经上传SVN的内容

项目一众筹网04_4_角色维护删除_单条删除和批量删除怎么实现_确认提示,,你真的要删除吗__@RequestBody和@ResponseBody结合使用_全选功能_前端获取id发到后端_ajax发送

项目一众筹网04_4_角色维护删除_单条删除和批量删除怎么实现_确认提示,,你真的要删除吗__@RequestBody和@ResponseBody结合使用_全选功能_前端获取id发到后端_ajax发送

svn 删除项目

svn如何彻底删除目录