如何找到所有';SVN工作副本';关于WinXP

如何找到所有';SVN工作副本';关于WinXP,svn,windows-xp,find,Svn,Windows Xp,Find,我有Windows XP。我想升级我的电脑。 为了做到这一点,我需要确保我可以在我的电脑上找到所有SVN工作副本。这样它们就可以更新 我找到了一个,但它是特定于Powershell的。所以,我想知道是否有一个更通用的解决方案来查找WinXP上的所有“SVN工作副本” 如果我知道windows上“linux find”的等价物,我可能会自己写。 但我希望已经有一个bash脚本(或者更简单的解决方案)可以供我和其他人使用 扫描计算机 如果它找到一个包含名为“.svn”的目录 呼应那个名字,然后

我有Windows XP。我想升级我的电脑。 为了做到这一点,我需要确保我可以在我的电脑上找到所有SVN工作副本。这样它们就可以更新

我找到了一个,但它是特定于Powershell的。所以,我想知道是否有一个更通用的解决方案来查找WinXP上的所有“SVN工作副本”

如果我知道windows上“linux find”的等价物,我可能会自己写。 但我希望已经有一个bash脚本(或者更简单的解决方案)可以供我和其他人使用

  • 扫描计算机
  • 如果它找到一个包含名为“.svn”的目录
    • 呼应那个名字,然后
    • 不再搜索该目录

要查找所有.svn文件,可以使用dir
dir.svn/s
就可以了(尽管它不会从扫描子目录中断),或者你可以使用Windows资源管理器让小狗找到所有的.svn文件


或者你可以下载并使用find

要查找所有.svn文件,可以使用dir
dir.svn/s
就可以了(尽管它不会从扫描子目录中断),或者你可以使用Windows资源管理器让小狗找到所有的.svn文件


或者你可以下载并使用find

对于Windows box上复杂而强大的搜索,我可以推荐(我在现实生活中使用它)

  • Total Commander内部的嵌入式搜索(您有公平的评估时间)
  • GrepWin(文件名模式使用通配符和regexp关键字)
你没抓住重点。SVN clients 1.7可以(而且确实必须)在安装后升级现有的工作副本,然后才能使用。另外,请注意:对于1.6之前版本,WC内部的所有目录都有.svn目录,您只对每一个最顶级的目录感兴趣

以后它可能会对你有用

1.6 svn目录

.svn>dir /B
all-wcprops
entries
prop-base
props
text-base
tmp
1.7高级副总裁

.svn>dir /B
entries
format
pristine
tmp
wc.db

对于Windows box上复杂而强大的搜索,我可以推荐(我在现实生活中使用它)

  • Total Commander内部的嵌入式搜索(您有公平的评估时间)
  • GrepWin(文件名模式使用通配符和regexp关键字)
你没抓住重点。SVN clients 1.7可以(而且确实必须)在安装后升级现有的工作副本,然后才能使用。另外,请注意:对于1.6之前版本,WC内部的所有目录都有.svn目录,您只对每一个最顶级的目录感兴趣

以后它可能会对你有用

1.6 svn目录

.svn>dir /B
all-wcprops
entries
prop-base
props
text-base
tmp
1.7高级副总裁

.svn>dir /B
entries
format
pristine
tmp
wc.db

我已设法在Win XP上找到所有“SVN工作副本”

我是用Alexey Shcherbak提供的

下面是使用PowerShell方法的流程摘要

测试以查看是否已安装PowerShell。 Windows PowerShell是一个命令行shell和脚本环境,它将.NET Framework的强大功能带给命令行用户和脚本编写者

通过尝试启动它来测试它是否已安装

要从运行框启动Windows PowerShell,请单击开始,单击运行,然后键入:

powershell
如果这不起作用

安装它
  • 从下载适用于Windows XP的Microsoft Windows PowerShell 1.0
  • (适用于Windows XP的PowerShell 2也可用,但我没有使用它。()
一旦安装了它

启动PowerShell并进行播放 启动所有程序Windows PowerShell 1.0Windows PowerShell

创建PowerShell脚本 将Alexey Shcerbak的(找到svn工作副本的)复制到文本文件中,并将其保存为类似于
C:\PowerShellScripts\FindsvnWorkingDirectory.ps1
的格式

我稍微修改了它以搜索我的C驱动器并抑制拒绝访问错误:

$prev = "^$"

Get-ChildItem -ErrorAction SilentlyContinue -Recurse -Force -Include ".svn" -Path "c:\" `
| ?{$_.PSIsContainer -and $_.Fullname.StartsWith($prev)-eq $false}`
| %{ $prev=$_.Fullname.TrimEnd(".svn"); $prev}
要详细解释此脚本的作用,请执行以下操作:

$prev=“^$”
初始化
$prev
以清空匹配的正则表达式
^$
将永远不会匹配任何有意义的值(STARTINE endline除外)。这是通过初步检查所必需的

Get-ChildItem -ErrorAction SilentlyContinue -Recurse -Force -Include ".svn" -Path "c:\" `
以递归方式从路径开始获取名为“.svn”的所有对象(在本例中,所有文件和文件夹的确切名称为“.svn”)

  • 默认情况下,
    Get ChildItem
    dir
    命令的别名
  • -ErrorAction SilentlyContinue
    -防止显示错误,例如访问路径“C:\System Volume Information”被拒绝
  • -Recurse
    表示重复搜索
  • -Force
    确保找到隐藏的文件
  • -Include“.svn”
    标识我们正在搜索的文件名
  • -Path“c:\”
    i标识要搜索的路径
  • `背景勾号的意思是
在下一行:

| ?{$_.PSIsContainer -and $_.Fullname.StartsWith($prev)-eq $false}`
管道符号
|
Get ChildItem
的输出管道化到下一个cmdlet中

?{…语句…}
是cmdlet的缩写

$是处理管道中“每个”条目的方法。它基本上说“如果条目是一个目录”和“fullname不以$prev的值开头”,然后“将条目传递到下一个构造”

然后该条目通过管道传输到下一条语句

%{}
是的缩写。此构造有两个功能:

  • 将当前文件夹的全名指定给
    $prev
    (不带“.svn”尾部)
  • $prev
    传递到下一个管道接收器
允许PowerShell运行该脚本 默认情况下,出于安全考虑,PowerShell的
ExecutionPolicy
不允许您运行PowerShell脚本。所以,你需要允许它这样做

有关更多信息,请参阅

我做了以下工作:

注意:散列符号(#)只是命令提示符的shorthand

确定当前的
执行策略

# Get-ExecutionPolicy
Restricted
# Get-ExecutionPolicy
RemoteSigned
如果像我一样,它是受限制的。更改采购订单
# Get-ExecutionPolicy
RemoteSigned
# Set-ExecutionPolicy Restricted
$prev = "^$"
$workingCopies = Get-ChildItem -Recurse -Force -Include ".svn" -Path "d:\Projects\" |?{$_.PSIsContainer -and $_.Fullname.StartsWith($prev)-eq $false} |%{$prev=$_.Fullname.TrimEnd(".svn"); $prev}

foreach($copy in $workingCopies)
{
    &"C:\Program Files\TortoiseSVN\bin\svn.exe" upgrade $copy;
}
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive -NoProfile -ExecutionPolicy Unrestricted -File “C:\Projects\ConvertSvnToVersion17.ps1”
$prev = "^$"
Get-ChildItem -Recurse -Force -Include ".svn" -Path "d:\Projects\" 
?{$_.PSIsContainer -and $_.Fullname.StartsWith($prev)-eq $false} 
foreach($entry in $entriesFromSomewhere)
{
    If($entry.PSIsContainer -eq $true -and $entry.Fullname.StartsWith($prev) -eq $false)
    {
        "If entry is directory" and  "fullname not start with value from $prev"
        ...Pass entry to next construct...
    }
}
%{$prev=$_.Fullname.TrimEnd(".svn"); $prev}
foreach($copy in $workingCopies)
{
    &"C:\Program Files\TortoiseSVN\bin\svn.exe" upgrade $copy;
}