如何在 Win XP 上查找所有“SVN 工作副本”

2024-03-16

我有Windows XP。我想升级我的TortoiseSVN 至版本 1.7 http://tortoisesvn.net/tsvn_1.7_releasenotes.html。 为此,我需要确保可以在我的 PC 上找到所有 SVN 工作副本。所以它们可以被更新。

我找到了一个类似的问题 https://stackoverflow.com/questions/9015393/powershell-script-to-find-all-svn-working-copies但它是 Powershell 特有的。所以,我想知道是否有一个更通用的解决方案来查找 Win XP 上的所有“SVN 工作副本”。

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

  • 扫描计算机
  • if it finds a directory that contains a directory called ".svn"
    • 呼应这个名字,并且
    • 不再搜索该目录

一旦您拥有 powershell,我就可以提供完整的脚本来将工作副本升级到 1.7

$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;
}

我对“系统卷”目录的访问权限没有问题(这只是偶然的,因为我将所有源存储在一个我拥有完全权限的文件夹中..)。 至于您的执行策略问题 - 这里有一个很好的技巧来避免来回设置它。 您可以使用特殊选项运行 powershell,以避免执行策略、用户特定配置文件设置(可能因不同原因而损坏)等问题:

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive -NoProfile -ExecutionPolicy Unrestricted -File “C:\Projects\ConvertSvnToVersion17.ps1”

我还可以澄清这个脚本到底做了什么(如果您有兴趣):

$prev = "^$"

将 $prev 初始化为空匹配正则表达式 - ^$ 永远不会匹配任何含义值(除了 startline-endline)。这是通过初步检查所必需的

Get-ChildItem -Recurse -Force -Include ".svn" -Path "d:\Projects\" 

获取名称为“.svn”的所有对象(在我们的例子中 - 名称为“.svn”的所有文件和文件夹),从 Path 开始,递归地。 并将其传送到下一个构造:

?{$_.PSIsContainer -and $_.Fullname.StartsWith($prev)-eq $false} 

?{...statements... } 是“Where-Object”cmdlet 的快捷方式,$_ 是寻址管道中“每个”条目的方式。 它可以被重写为类似

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 =) 的快捷方式 这个构造做了两件事:

  1. 将不带“.svn”尾部的文件夹全名分配给 $prev
  2. 将 $prev 进一步传递到下一个管道接收器。

并将整个结果集作为数组分配给 $workingCopies(任何超过 1 项的结果都将是数组)

foreach($copy in $workingCopies)
{
    &"C:\Program Files\TortoiseSVN\bin\svn.exe" upgrade $copy;
}

Foreach 数组中的元素 - 执行命令(& 表示“作为命令执行”)“...\svn.exe 升级”

这里所有的魔力都在于回溯 $prev 元素: 在第一个“.svn”条目上 $prev 包含不匹配的值,因此首先检查“where”将减少为“如果条目是目录”。然后分配步骤将放置文件夹父目录。前任。如果发现目录全名是c:\projects\project1.root\trunk.svn- $prev 将被分配给“c:\projects\project1.root\trunk\”。 这个技巧将帮助我们过滤所有较低级别的 .svn 目录:c:\projects\project1.root\trunk\SubProject1.svn条目 - 将无法通过检查“不以 $prev 开头” 这样我们将只过滤第一级 .svn 目录,因为所有嵌套的 .snv 将被过滤StartsWith($prev) -eq $false

所以它非常简单,但看起来有些神奇 =)

顺便说一句,谢谢您在这里的回答 - 您的努力极大地启发了我写这篇评论并澄清整个脚本。

语法极客应该被召集到这个评论来清理和改写我的“所谓的英语”;)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Win XP 上查找所有“SVN 工作副本” 的相关文章

  • “查找”或任何其他工具可以广度优先搜索文件吗?

    有时我知道某个文件并不那么深 但是非常密集的子目录不允许我轻松找到我想要的文件 Can find http www gnu org software findutils manual html mono find html 或任何其他工具
  • Python 中的 MATLAB 风格的 find() 函数

    在 MATLAB 中 很容易找到满足特定条件的值的索引 gt gt a 1 2 3 1 2 3 1 2 3 gt gt find a gt 2 find the indecies where this condition is true 3
  • 如何获取 PHP 中的 Subversion 修订号?

    我想让我的 PHP 应用程序标有它使用的修订号 但我不想使用巡航控制 http en wikipedia org wiki CruiseControl或每次更新文件并上传 我该怎么做呢 SVN关键字并不是一个好的解决方案 正如其他人指出的那
  • 在 Windows XP 上安装 JDK8 - advapi32.dll 错误

    我下载了JDK8 https jdk8 java net download htmlbuild b121 并在尝试安装时出现以下错误 the procedure entry point RegDeleteKeyExA could not b
  • 将 ls 输出转换为 csv

    我将如何转换 find ls gt tmp files txt 这给了我类似的东西 908715 40 rwxrwxr x 1 david staff 16542 Nov 15 14 12 dump info py 908723 0 drw
  • 如何继续 Subversion 中失败的加载

    我已经开始将颠覆转储加载到存储库中 在它完成之前 我耗尽了配额 命令停止了 我已要求更多配额 但现在我不知道如何继续进口 我应该简单地重做相同的命令吗 svnadmin load parent dir Software xxx module
  • Windows XP 上 WPD/WIA 的替代品?

    WPD http www microsoft com whdc device wpd default mspx在 Windows XP SP1 如果重要的话 上无法正常工作 即使微软表示确实如此 http msdn microsoft co
  • 如何搜索包含2个特定字符串的所有文件?

    在我的 Visual Studio 中 我想找到包含 2 个特定单词的所有文件 例如 UpdatePanel and DropDownCheckList在解决方案或项目中 换句话说 我喜欢使用我自制的网络服务器控件来查找所有文件DropDo
  • SVN 清理导致“处理命令‘modify-wcprop’时出错”

    我试图签出一个大目录 中途 SVN 服务器崩溃了 我尝试执行清理 但每次都会出错 提示文件不受版本控制 root mitydsp dev nvsp2 svn cleanup svn In directory Platform qt5 qtd
  • 如何阻止 SVN Checkout 恢复从项目中删除的文件?

    我们是 subversion tortoisesvn ankhsvn 堆栈的新手 虽然在 Studio 2008 中我们从项目中删除了文件 但问题是当我们在 CI 构建中执行 svn checkout 时 我们会得到已删除的文件 如何防止这
  • 如何使用java访问SVN中的文件

    我需要你的帮助 我想使用 java 代码从 SVN 打开一个文件 任何人都可以告诉我访问文件的流程 或者任何人都可以向我发送该文件的示例代码 任何人都可以向我发送使用java通过HTML访问svn的示例代码吗 你需要看看SVNKIT Jav
  • 如何使用 SVN 和 .NET 以编程方式进行文件版本控制?

    我们有一个报告生成器 每天 它都会将数据写入 Excel 文件 出于版本控制和文件数据安全的原因 我们需要更改此文件 并将更改提交到存储库中 您推荐您使用过的任何 net SVN API 吗 你应该看看SharpSvn http sharp
  • Subversion (svn + tortoiseSvn) 提交未锁定文件

    我经历过颠覆的奇怪功能 我们使用最新的 1 6 Svn 服务器 Visualsvn 和 tortoisesvn 1 6 6 我们已经为文件定义了属性 svn needs lock 那么如果您从不同位置复制文件 它会显示本地更改 如果您尝试提
  • 更改 Subversion 错误消息的语言

    由于某种原因 subversion 返回了我认为是德语的错误消息 svn up svn Zielpfad existiert nicht 不幸的是 我不懂那种语言 在我诉诸使用在线翻译引擎来解决这个问题之前 我想我会尝试修复它 我想我只是做
  • 将 trunk 合并到 SVN 中的功能分支时,如何避免出现大量 svn:mergeInfo

    我试图通过将主干合并到分支中来保持功能分支最新 问题是 创建分支时存在的大约 2000 个文件 并且在分支和主干上都保持不变 除了 svn mergeinfo 之外什么都没有更新 该项目规模相当大 对我们的 SVN 历史记录的影响如此之大
  • 如何在 svn 存储库中搜索任何修订版中是否存在文件

    如何搜索名为foo txt曾经提交到我的 svn 存储库 在任何修订版中 右键单击签出文件夹的根目录 gt TortoiseSVN gt 显示日志 您也可以在那里输入文件名
  • python 课堂上有太多自我

    我正在学习 Python OOP 并尝试将 Java 类转换为 Python 类 请参阅此 PDF 中的第 15 页了解 Java 代码 google 文档link https docs google com open id 1eqzajO
  • 如何正确创建可通过http访问的SVN存储库? (在 public_html 内)?

    情况是这样的 subversion 已安装在服务器中 并且我可以访问服务器中的共享帐户之一 不是 root 并且该共享托管帐户具有 SSH 访问权限 我想创建一个存储库 我可以在其中提交我正在处理的 PHP 文件 当我提交时 它应该可以在浏
  • 对于单个开发人员来说,是否值得从 SVN 转向 Git?

    自 2013 年起 此线程很可能已过时 当存储库主要由单个开发人员访问时 是否值得从 SVN 转到 GIT 我有几台用于开发的机器 主要不是用 C 开发 但我的存储库中混合了 VB VB Net PHP C C HTML Batch BAS
  • 使用 git 客户端和 SVN 存储库的最佳工具/方法

    我已经使用 SVN 大约两年了 主要是通过 TortoiseSVN 和 IntelliJ 并尝试了 git 主要是通过 TortoiseGIT 在这里检测到模式 我们公司正在使用 SVN 作为存储库 他们不会考虑很快进行切换 在本地使用 g

随机推荐