题
我有一个DOS批处理文件形式的自行构建的自动构建脚本。在该脚本的一部分中,我查看(带有“svn checkout”)我们SVN存储库的一部分,其中包含我们项目中使用的一堆第三方内容。这个批处理文件很长一段时间表现不错,但现在人们已经检查了很多绒毛(文档,示例代码等)到第三方区域,并且这个脚本的结账部分变慢了很多。我想通过仅检查我们需要的东西来缓解这个问题 - 在我们的案例中主要是dll文件。所以,我的问题是:检查按文件扩展名筛选的SVN存储库的最佳方法是什么?
我没有在svn帮助中看到任何明显的方法。我有一个.NET实用程序库,它以某种方式包装svn.exe,我正在考虑扩展它以仅检索与我感兴趣的扩展名匹配的内容。但是如果存在的话,我更愿意使用更简单或现有的方法。
解决方案
这是可能的:你可以 svn checkout
一个空目录,然后 svn update filename
为你做想要的每个文件。
您的脚本可以执行以下操作:
-
svn checkout svn:// path / to / repos / directory --depth empty
-
svn list --recursive svn:// path / to / repos / directory
- 通过删除禁用文件扩展名的过滤器生成的管道,例如<代码>的grep 代码>
- 迭代这个新的过滤列表和
svn update --parents
每个文件
醇>
这样可以在没有特定文件或文件扩展名的情况下提供所需的工作副本结果。
当然,还有一个问题是你提到了人们[检查]大量的绒毛&#8221;但这是另一回事。
其他提示
正如我在这里所说,SVN本身只有一个选项:一个新的SVN 1.5中的功能称为稀疏结账,但是您只能在目录级别选择结帐,因此您必须在不同的目录中对不需要的文件进行排序。
您无法查看几个特定文件 - 您只能查看整个文件夹。您可以重新安排您正在检查的内容的组织,或者您可以从其他地方复制工作副本并进行更新。
对于来自 Michael Hackner 的答案的powershell特定实现,请尝试以下方法:
svn ls http://svn-server/src --recursive | Out-File svn.txt
Get-Content .\svn.txt | where {对于来自 Michael Hackner 的答案的powershell特定实现,请尝试以下方法:
<*>
我在这里的特殊用例是查找一堆类似命名的文件(在本例中为* special.xml)并将它们全部转储到一个文件夹中,其中包含基本唯一的名称。我使用了一个中间文件来存储整个仓库列表,但是如果这对你更好的话,也可以全部内联。
.toLower().EndsWith('special.xml')} | select -First 200 | foreach {New-Object PSObject -Property @{ Path = 对于来自 Michael Hackner 的答案的powershell特定实现,请尝试以下方法:
<*>
我在这里的特殊用例是查找一堆类似命名的文件(在本例中为* special.xml)并将它们全部转储到一个文件夹中,其中包含基本唯一的名称。我使用了一个中间文件来存储整个仓库列表,但是如果这对你更好的话,也可以全部内联。
; Munged = 对于来自 Michael Hackner 的答案的powershell特定实现,请尝试以下方法:
<*>
我在这里的特殊用例是查找一堆类似命名的文件(在本例中为* special.xml)并将它们全部转储到一个文件夹中,其中包含基本唯一的名称。我使用了一个中间文件来存储整个仓库列表,但是如果这对你更好的话,也可以全部内联。
.Replace('/', '_') } } | foreach { svn export "http://svn-server/src/$(对于来自 Michael Hackner 的答案的powershell特定实现,请尝试以下方法:
<*>
我在这里的特殊用例是查找一堆类似命名的文件(在本例中为* special.xml)并将它们全部转储到一个文件夹中,其中包含基本唯一的名称。我使用了一个中间文件来存储整个仓库列表,但是如果这对你更好的话,也可以全部内联。
.Path)" $(对于来自 Michael Hackner 的答案的powershell特定实现,请尝试以下方法:
<*>
我在这里的特殊用例是查找一堆类似命名的文件(在本例中为* special.xml)并将它们全部转储到一个文件夹中,其中包含基本唯一的名称。我使用了一个中间文件来存储整个仓库列表,但是如果这对你更好的话,也可以全部内联。
.Munged) }
我在这里的特殊用例是查找一堆类似命名的文件(在本例中为* special.xml)并将它们全部转储到一个文件夹中,其中包含基本唯一的名称。我使用了一个中间文件来存储整个仓库列表,但是如果这对你更好的话,也可以全部内联。
我刚试过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"
)
最简单,最正确的方法:不要做!
如果在第三方文件夹中有一些垃圾,假设是.dll文件需要结帐 - 将该垃圾删除到其他位置!它无论如何都不属于这里。