首页 > 解决方案 > 如何在 TFS Build (Git) 中单独获取修改后的文件

问题描述

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

到目前为止,我发现我们可以通过定义变量来禁用 Get Source 任务 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 源代码控制中的问题有很多文件我不希望在构建时全部获取,而不是在提交/PR 合并中修改的文件我需要获取。

我怎样才能做到这一点?

标签: gittfs

解决方案


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

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

控制 clean 和 fetch

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

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

如果您需要更改的文件,您可以发出 git 命令从同步的 git 存储库中复制它们。请参阅: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 。


推荐阅读