如何在TFS Build(Git)中单独获取修改的文件

时间:2018-07-28 03:29:18

标签: git tfs tfs2018

我需要在TFS构建获取源任务中单独获取修改后的/新文件。

到目前为止,我发现我们可以通过定义variable Build.SyncSources = false

来禁用“获取源”任务

这将忽略获取所有源,最终将使我的CopyFile任务失败,因为它使用$(Build.SourcesDirectory)作为源

> 2018-07-28T03:13:46.5709194Z Task         : 
> Copy Files 2018-07-28T03:13:46.5709194Z Description  : Copy files from source
> folder to target folder using match patterns (The match patterns will
> only match file paths, not folder paths) 2018-07-28T03:13:46.5709194Z
> Version      : 2.117.0 2018-07-28T03:13:46.5709194Z Author       :
> Microsoft Corporation 2018-07-28T03:13:46.5709194Z Help         :
> [More Information](https://go.microsoft.com/fwlink/?LinkID=708389)
> 2018-07-28T03:13:46.5709194Z
>     ============================================================================== 2018-07-28T03:13:47.1855024Z ##[error]Unhandled: Not found
> SourceFolder: $(Build.SourcesDirectory)

我的Git源代码管理中的问题有很多我不想在构建时全部获取的文件,而不是我需要在该commit / PR合并时修改的文件。

我该如何实现?

1 个答案:

答案 0 :(得分:0)

一旦构建服务器同步了Git存储库,它将能够获取上一个构建之间的差异。由于Git依赖于存在的完整存储库状态(提交是指向工作文件夹状态的指针,该状态包括该状态下的所有文件),因此不可能仅获取更改的文件。

“代理阶段”步骤中有一个开关,用于控制是否将清理工作目录,在这种情况下,代理将必须同步整个git repo。还有一个选项可以仅获取最新快照,而不是完整的历史记录:

Control clean and fetch

浅提取:仅允许您下载存储库的最新快照。下载速度会更快,但可能会导致GitVersion之类的工具失败(它依靠历史数据来计算版本号)。

清除:False:将保留先前构建的内容,使您可以增量获取源代码,并使用支持该工具的工具进行增量构建。您可以将Clean:False与自定义步骤结合使用,该步骤可以执行更有针对性的清理。

如果需要更改的文件,可以发出git命令从同步的git repo复制它们。参见:https://stackoverflow.com/a/4126342/736079

或者,不要同步源,并在Powershell中使用基于VSTS Git REST API的自定义脚本来获取您要查找的确切文件。请参阅:https://docs.microsoft.com/en-us/rest/api/vsts/git/items?view=vsts-rest-4.1