2010-02-02 65 views
2

我希望能夠從目錄中刪除.SVN文件夾。如何在確認提示後刪除SVN目錄?

我發現下面的註冊表開刀,讓你能夠做到這一點......

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

然而,有一件事我不喜歡這個解決方案是可以讓沒有確認在所有。我希望它能夠執行此cmd腳本,但首先會收到確認提示。

有什麼想法嗎?

編輯 我的理解是,SVN導出不會複製未版本控制的文件。這就是我爲什麼要這樣做的原因。

賽斯

回答

4

可以使用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

0

刪除該腳本中隱藏的RD命令上的/ q選項。

這應該引起RD(刪除目錄)問的每次調用...

與此同時,雖然,我會問你爲什麼不使用SVN導出選項,而不是。

0

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

,如果你有什麼將腳本的內容放到cmd文件中,然後設置註冊表以使其指向此cmd文件?然後你可以在Wikipedia的例子中添加各種動作。我希望這可以幫助你創建一個解決方案。

1

嘗試對腳本進行此修改。它運行的目錄刪除之前添加一個提示:

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

0

嘗試此了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。