如何引用刚刚签入源代码管理的文件?

Posted

技术标签:

【中文标题】如何引用刚刚签入源代码管理的文件?【英文标题】:How to reference a file that was just checked in to source control? 【发布时间】:2020-04-25 10:23:57 【问题描述】:

我有一个 Azure 管道,它在“签入”到 TFS 源代码控制时触发。它还运行一个简单的 PowerShell 脚本。

在该签入触发器上,我还想获取签入的文件,并在我的 PowerShell 脚本中引用它。该文件是一个 SQL 脚本,我将通过 PowerShell 对 SQL 服务器运行。

如何在我的 PowerShell 代理作业任务中引用该签入文件? 例如,您可以在 PowerShell 任务中使用 $(Build.Repository.LocalPath) 之类的内容引用您的工作文件夹。

然后$(Build.Repository.LocalPath)/mypath/myfile.sql 用于特定文件。我假设有某种“工作”变量可以引用刚刚触发触发器的项目。

【问题讨论】:

在我看来,您将源代码控制和代码生成纠缠在一起。这对我来说似乎是一种反模式。我建议您只遍历一个文件夹并运行其中找到的所有脚本(并记录运行的脚本)。添加和删​​除文件时,它们会正确运行。您无需将它们显式添加到 powershell 脚本中。 【参考方案1】:

您似乎已在构建管道中启用 CI 触发器。如果您只是修改源代码管理中存在的文件,则可以在脚本中使用 $(Build.SourcesDirectory)/myfile.sql 之类的内容。

如果您签入一个新文件(只有一个文件),那么您可以在脚本中获取此构建中包含的变更集/提交并获取该文件。

如果您签入多个文件,这会很复杂,您需要获取此构建中包含的变更集/提交并查询文件以获取您需要的文件。

【讨论】:

【参考方案2】:

如果你看这里:https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&tabs=yaml 这有一个在构建时可用的所有变量的列表,无论是在任务中还是在脚本中作为环境变量。其中之一是触发构建“Build.SourceVersion”的变更集/提交 ID。使用此值,您可以获取属于该变更集/提交的任何文件并在您的脚本中使用它。

祝你好运

ET

【讨论】:

以上是关于如何引用刚刚签入源代码管理的文件?的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2015 新文件未自动添加到源代码管理

Heroku 构建失败:“node_modules 已签入源代码管理”

TFS命令tf:undo(强制签入别人签出的文件)(转)

避免在签入或合并时不同开发人员之间的意外覆盖

VS2019 Professional 的源代码管理设置中缺少签入策略选项卡

TFS 签入 RSS 提要