【问题标题】:How can I remove SVN directories after a confirmation prompt?确认提示后如何删除 SVN 目录?
【发布时间】: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 不会复制出未版本控制的文件。这就是我要求这个的原因。

赛斯

【问题讨论】:

    标签: svn powershell scripting command


    【解决方案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。

          【讨论】:

            猜你喜欢
            • 2016-12-15
            • 2011-09-02
            • 1970-01-01
            • 2011-01-06
            • 2011-04-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-06-28
            相关资源
            最近更新 更多