本地文件系统(Win32)中的递归svn升级

时间:2013-11-18 13:55:52

标签: windows svn batch-file recursion cmd

需要在文件系统中的某个目录中递归运行svn upgrade,忽略非svn子目录:

C:\a>svn upgrade
C:\a\b>svn upgrade
<skip non-svn dir>
C:\a\b\c>svn upgrade
...

这意味着我们需要在其中包含.svn的每个文件夹中运行svn upgrade命令。如何在win32中完成此操作?找到了posix OS的for d in find . -name .svn -type d; do svn upgrade $d/..; done例程。

1 个答案:

答案 0 :(得分:2)

svn upgrade需要在每个工作副本的顶层运行 - 你不想进入深层WC 3级别,然后在那里运行,因为你将使用WC。原因:SVN 1.7之前在工作副本的每个目录中都有一个.svn目录,而1.7+在WC的根目录中使用了一个.svn

所以,你的递归必须保证你先触摸顶级 - 然后当你找到一个.svn目录时你会更深入,你知道它是一个单独的WC而不是另一个的孩子。< / p>

批处理已死,请使用PowerShell。将其放在.ps1文件(或PowerShell ISE)中并运行它:

function upgrade-svndirs {
param (
    [string]$PathToUpgrade
    )
    $Dirs = get-childitem $PathToUpgrade|where-object{$_.PSIsContainer};
    foreach ($dir in $dirs) {
        $DirName = $dir.FullName;
        $isWC = Get-ChildItem $DirName -Filter ".svn" -Force;
        if ($isWC) {
            svn upgrade "$DirName";
        }
        upgrade-svndirs -PathToUpgrade $DirName;
    }

}

upgrade-svndirs C:\a;