SVN结帐按文件扩展名过滤?

时间:2008-10-10 19:49:28

标签: svn svn-checkout

我有一个DOS批处理文件形式的自行构建的自动构建脚本。在该脚本的一部分中,我查看(使用“svn checkout”)我们的SVN存储库的一部分,其中包含我们项目中使用的一堆第三方内容。这个批处理文件很长一段时间表现不错,但是现在人们已经在第三方区域检查了很多绒毛(文档,示例代码等),并且这个脚本的结账部分变慢了很多。我想通过仅检查我们需要的东西来缓解这个问题 - 在我们的案例中主要是dll文件。所以,我的问题是:检查按文件扩展名筛选的SVN存储库的最佳方法是什么?

我没有在svn帮助中看到任何明显的方法。我有一个.NET实用程序库,它以某种方式包装svn.exe,我正在考虑扩展它以仅检索与我感兴趣的扩展名匹配的内容。但是如果存在的话,我更愿意使用更简单或现有的方法。

6 个答案:

答案 0 :(得分:26)

这是可能的:您可以svn checkout一个空目录,然后svn update filename为您想要的每个文件。

您的脚本可以执行以下操作:

  1. svn checkout svn://path/to/repos/directory --depth empty
  2. svn list --recursive svn://path/to/repos/directory
  3. 通过删除禁用文件扩展名的过滤器生成的管道,例如grep
  4. 迭代这个新的过滤列表和svn update --parents每个文件
  5. 这样可以在没有特定文件或文件扩展名的情况下提供所需的工作副本结果。

    当然,还有一个问题是你提到“人们[检查]大量的绒毛”但这是一个单独的问题。

答案 1 :(得分:3)

正如我告诉here,SVN本身只有一个选项:SVN 1.5中的一个新功能叫做稀疏结账,但是你只能选择目录级别的结账,所以你必须在不同的目录中对不需要的文件进行排序。

答案 2 :(得分:0)

您无法查看几个特定文件 - 您只能查看整个文件夹。您可以重新安排您正在检查的内容的组织,或者您可以从其他地方复制工作副本并进行更新。

答案 3 :(得分:0)

对于来自Michael Hackner的答案的powershell特定实现,请尝试以下内容:

svn ls http://svn-server/src --recursive | Out-File svn.txt
Get-Content .\svn.txt | where {$_.toLower().EndsWith('special.xml')} | select -First 200 | foreach {New-Object PSObject -Property @{ Path = $_; Munged = $_.Replace('/', '_') } } | foreach { svn export "http://svn-server/src/$($_.Path)" $($_.Munged) }

我在这里的特殊用例是查找一堆类似命名的文件(在本例中为* special.xml)并将它们全部转储到一个文件夹中,其中包含基本唯一的名称。我使用了一个中间文件来存储整个仓库列表,但是如果这对你更好的话,也可以全部内联。

答案 4 :(得分:0)

我刚试过Michael Hackner提出的方法。下面是DOS系统的实现。请注意,您必须在运行此脚本之前签出空文件夹。

@echo off

svn list --recursive https://path_to_repository_folder | find /I ".sql" > filelist.txt

REM Specify a custom delim. Otherwise space in filename will be treated as a delimiter.
FOR /F "delims=|" %%i  IN (filelist.txt) DO (
    echo -------------
    echo %%i
    svn update --parents "%%i"
)

答案 5 :(得分:-3)

最简单,最正确的方法:不要做!

如果在第三方文件夹中有一些垃圾,假设是.dll文件需要结帐 - 将该垃圾删除到其他位置!它无论如何都不属于这里。