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

问题描述:

我希望能够从目录中删除.SVN文件夹。如何在确认提示后删除SVN目录?

我发现下面的注册表开刀,让你能够做到这一点......

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

然而,有一件事我不喜欢这个解决方案是可以让没有确认在所有。我希望它能够执行此cmd脚本,但首先会收到确认提示。

有什么想法吗?

编辑 我的理解是,SVN导出不会复制未版本控制的文件。这就是我为什么要这样做的原因。

赛斯

可以使用Subversion命令行,如果您使用TortoiseSVN运行svn export,您可以使用this

+1

拉里,很好的答案。我使用TortoiseSVN。我知道svn Export命令。我的理解是,SVN导出不会复制未版本控制的文件。这就是为什么我问(而且应该在问题中更清楚)。那说我不知道​​乌龟功能。这是否使未版本控制的文件保持完好? – 2010-02-02 20:39:30

+0

我没有必要这样做,所以我不知道。找出答案的一种方法是在您的环境中使用测试工作副本进行试用。 – 2010-02-02 22:33:22

+2

如果您选择**全部导出**,它将包含未版本控制的文件。 – RedFilter 2010-02-03 02:09:34

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

这应该引起RD(删除目录)问的每次调用...

与此同时,虽然,我会问你为什么不使用SVN导出选项,而不是。

如果你使用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); } 
} 

,如果你有什么将脚本的内容放到cmd文件中,然后设置注册表以使其指向此cmd文件?然后你可以在Wikipedia的例子中添加各种动作。我希望这可以帮助你创建一个解决方案。

尝试对脚本进行此修改。它运行的目录删除之前添加一个提示:

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 \"" 
+0

这没有奏效。没有提示就跑了。我喜欢这个主意。这正是我想要的。 – 2010-02-02 20:47:54

+0

给我一秒钟,我会测试一下...... – RedFilter 2010-02-02 21:20:09

+0

语法似乎高度依赖于您正在运行的Windows版本,所以我放弃了...... :) – RedFilter 2010-02-02 21:55:02

尝试此了reg值的PowerShell命令:

C:\ WINDOWS \ SYSTEM32 \ WindowsPowerShell \ 1.0 \ powershell.exe - 命令“& {if((read-host'确认删除.SVN文件夹。按Y或N')-eq'y'){Get-ChildItem'%1'-r * .svn |?{$ _。PSIsContainer } | Remove-Item -r -force -verbose -ea 0; Read-Host'按回车退出'}}“

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