【问题标题】:How to get modified files alone in TFS Build (Git)如何在 TFS Build (Git) 中单独获取修改后的文件
【发布时间】:2019-01-05 03:47:05
【问题描述】:

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

到目前为止,我发现我们可以通过定义 variable Build.SyncSources = false 来禁用 Get Source 任务

这将忽略获取所有源,这最终将使我的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 合并中修改的文件我需要获取。

我怎样才能做到这一点?

【问题讨论】:

    标签: git tfs


    【解决方案1】:

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

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

    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

    【讨论】:

    • 感谢您的回复。实际上,我使用的是本地 TFS 而不是 VSTS。您共享的第一个链接将用于未提交的本地修改,但是,在我已经提交和推送文件的情况下,这将无济于事。第二个链接完全基于VSTS
    • 第一个链接也解释了上次提交中的修改:git diff --name-only HEAD^。 VSTS rest api 也适用于 tfs,具体取决于您使用的版本。
    • 是的,你说得对,我修改了上面的 git 命令,如 cp -pv --parents git diff --name-only HEAD^` DESTINATION-DIRECTORY` 以单独复制所有修改后的内容。但我无法在 TFS 中执行 cp 命令,因为它是 UNIX command,您能帮我在 Cmd/Powershell 中告诉一些等效的命令吗?
    猜你喜欢
    • 2017-03-08
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    相关资源
    最近更新 更多