繁体   English   中英

TFS 删除,使用 minimatch 模式排除 obj 文件夹

[英]TFS drop, exclude obj folder using minimatch pattern

我正在本地设置 TFS 2015,但在我的最后一个构建步骤“发布构建工件”中遇到了问题。 出于某种原因,构建代理似乎正在归档旧的二进制文件,而我留下了一个巨大的文件路径:

E:\TFSBuildAgent\_work\1a4e9e55\workspace\application\Development\project\WCF\WCF\obj\Debug\Package\Archive\Content\E_C\TFSBuildAgent\_work\1a4e9e55\workspace\application\Development\project\WCF\WCF\obj\Debug\Package\PackageTmp\bin

我正在使用示例 minimatch 模式复制文件以开始:

**\bin

我目前只是在测试,所以这不是一个永久的解决方案,但我如何复制bin文件夹中的所有二进制文件但不是obj的后代?

从研究中我认为这应该有效,但它没有(它不匹配任何东西):

**!(obj)**\bin

我正在使用www.globtester.com进行测试。 有什么建议?

另外,我稍后会研究归档问题,但如果有人对此有任何指示,请随时发表评论。 谢谢

在 VSTS 中,SDK 中内置的 URL 有两种模式匹配。 现在大多数任务都使用马特的回答中描述Minimatch 模式。 但是,有些使用 1.x 代理的 Powershell SDK 使用的模式。 顺便说一下,该格式在 2.x Agent 的 Powershell SDK 中仍然可用。

所以这意味着有 5 种任务:

  • 1.x 代理 - Powershell SDK
  • 2.x 代理 - 节点 SDK
  • 2.x 代理 - Powershell 1 向后兼容性
  • 2.x 代理 - Powershell 3 SDK - 使用find-files
  • 2.x 代理 - Powershell 3 SDK - 使用find-match

粗体的不是 Minimatch ,而是VSTS-Task-SDK 的find-files方法中记录的格式。

最初的问题是在 2015 年发布的,当时 2.x 代理还没有出现。 在这种情况下,模式很可能是:

 **\bin\$(BuildConfiguration)\**\*;-:**\obj\**

-:从它前面的项目中排除项目。

根据 Microsoft 的文档,这里是您可以使用的文件匹配模式列表。 最重要的规则是:

?

  • ? 匹配文件或目录名称中的任何单个字符(零次或一次)。

*+匹配

  • *+匹配文件或目录名称中的零个或多个字符。

@符号匹配

  • @匹配一次。

与括号( , )|匹配

  • 如果您使用带有|括号它被视为逻辑 OR ,例如*(hello|world)表示“hello 或 world 出现零次或多次”

与双星号匹配**

  • **递归通配符。 例如, /hello/**/*匹配/hello所有后代。

!排除模式

  • 领先! 将包含模式的含义更改为排除。 支持交错排除模式。

带有[]字符集

  • []匹配文件或目录名称中的一组或一系列字符。

带有#评论

  • #开头的模式被视为注释。

逃跑

  • []包装特殊字符可用于转义文件名中的文字 glob 字符。 例如,文字文件名hello[az]可以转义为hello[[]az]

例子

可以在“复制文件”构建步骤的Contents字段中使用以下表达式为 Web 项目创建部署包:

**\\?( .config| .dll|*.sitemap)
**\\?(. exe| .dll| .pdb| .xml|*.resx)
**\\?( .js| .css| .html| .aspx| .ascx| .asax| .Master| .cshtml|*.map)
**\\?( .gif| .png| .jpg| .ico|*.pdf)

注意:您可能需要添加更多扩展,具体取决于您的项目需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM