2008-10-10 81 views
9

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

我没有看到任何明显的方式来做到这一点在svn帮助。我有一个.NET实用程序库,它以某种方式封装了svn.exe,并且我正在考虑扩展它,以便只检索符合我感兴趣扩展名的内容。但是如果存在的话,我宁愿使用更容易或现有的方法。

+0

这太本地化了。问题是指第三方svn增加 – AlxVallejo 2013-08-01 19:09:22

+0

@AlxVallejo不,它不是。它指的是svn.exe。 – 2013-08-01 19:12:26

回答

21

这是可能的:你可以为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每个文件

这将使工作拷贝你想要的结果没有某些文件或文件扩展名。

当然,还有一个问题是你提到“人们在检查很多绒毛”,但这是一个单独的问题。

0

你不能检出一些特定的文件 - 你只能检出一个整个文件夹。您可以重新排列您正在检查的内容的组织结构,也可以从其他位置复制工作副本并进行更新。

3

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

+2

感谢您指出稀疏目录 - 它们是非常强大的功能。对于所有感兴趣的http://bit.ly/99Nblk是svn-book的相关章节。 – 2010-06-01 14:57:28

-3

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

如果第三方文件夹中有一些垃圾,假设是需要签出的.dll文件 - 将垃圾删除到不同的位置!无论如何它不属于这里。

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)和倾销它们全部放到一个单独的文件夹中,具有基本上唯一的名称我已经使用中间文件来存储整个回购列表,但如果这对您更好,也可以内联。

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" 
)