需要在文件系统中的某个目录中递归运行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
例程。
答案 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;