如何在确认提示后删除SVN目录?
问题描述:
我希望能够从目录中删除.SVN文件夹。如何在确认提示后删除SVN目录?
我发现下面的注册表开刀,让你能够做到这一点......
http://weblogs.asp.net/jgalloway/archive/2007/02/24/shell-command-remove-svn-folders.aspx
然而,有一件事我不喜欢这个解决方案是可以让没有确认在所有。我希望它能够执行此cmd脚本,但首先会收到确认提示。
有什么想法吗?
编辑 我的理解是,SVN导出不会复制未版本控制的文件。这就是我为什么要这样做的原因。
赛斯
答
删除该脚本中隐藏的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); }
}
答
尝试对脚本进行此修改。它运行的目录删除之前添加一个提示:
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 \""
答
尝试此了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。
拉里,很好的答案。我使用TortoiseSVN。我知道svn Export命令。我的理解是,SVN导出不会复制未版本控制的文件。这就是为什么我问(而且应该在问题中更清楚)。那说我不知道乌龟功能。这是否使未版本控制的文件保持完好? – 2010-02-02 20:39:30
我没有必要这样做,所以我不知道。找出答案的一种方法是在您的环境中使用测试工作副本进行试用。 – 2010-02-02 22:33:22
如果您选择**全部导出**,它将包含未版本控制的文件。 – RedFilter 2010-02-03 02:09:34