7

我正在编写一个脚本,该脚本仅在源代码发生更改时才运行构建。我需要知道自上次运行构建以来是否有变化。这曾经有效,因为文件夹不会被删除,因此很容易确定是否有更改,但现在每次运行构建时都会删除所有内容。我曾考虑使用 TFS TF 历史命令来查询最后一个变更集或最后两个变更集,但在仅解析输出中的变更集编号时遇到了问题。我也考虑过使用 changeset 命令。是否有任何命令行参数可用于回答问题,自日期或变更集编号以来是否发生了变化?

4

6 回答 6

6

对于没有本地工作空间的最新变更集编号,请使用以下命令:

tf history /collection:"http://server:8080/tfs/Collection" "$/Project" /recursive /stopafter:1 /noprompt /login:domain\user,password
于 2015-04-24T08:21:59.667 回答
3

摘自我要构建的批处理文件。

set _aPath="f:\TFS\a"
set _TFPath="c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE"

...

pushd %_aPath%
%_TFPath%\TF.exe history . /r /noprompt /stopafter:1 /Version:W > temp
FOR /f "tokens=1" %%a in ('findstr /R "^[0-9][0-9]*" temp') do set _BuildVersion=10.3.0.%%a
del temp
popd

使用临时文件,但效果很好。

于 2013-02-04T20:47:27.820 回答
2

正如 Andrew 所提到的,TFS 具有内置的持续集成功能。但是,是的,从某个时间点开始查询变更集很容易,无论是日期还是变更集。您想查看该变更集与最新版本之间的历史记录:

tf history <folder> /version:C<changeset>~T /noprompt /recursive

如果唯一的行输出是您查询的变更集,那么显然自签入以来没有任何更改。否则,您将看到额外的变更集,每行一个。

于 2012-04-26T18:47:06.373 回答
1

有一个适配器可以集成 BuildForge 和 Microsoft Team Foundation Server。如果您有兴趣,这里是网址... http://www-304.ibm.com/partnerworld/gsd/solutiondetails.do?&solution=46360&lc=en

Automatra TFS Adapter for Rational Build Forge 提供持续集成 (CI) 和报告功能。

TFS 适配器进一步在 TFS 源(更改集)和工作项级别启用 CI 功能。开箱即用的报告可提供清晰的物料清单 (BOM) 报告,这些报告可以交付给构建的下游消费者。

最后,您必须知道,Build Forge 的优势在于它能够将构建与部署(及其他)联系起来。显然,有了这些持续集成功能,您就可以继续使用我相信您希望实现的持续交付功能。

于 2012-12-05T07:13:54.683 回答
1

我的 PowerShell 脚本被调用GetVcsRevision.ps1并位于 VCS Root 的子文件夹中:

param (
    [string]$PathToTF='C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\TF.exe'
    ,[Parameter(Mandatory=$true)][string]$Login
    ,[Parameter(Mandatory=$true)][string]$Password
)
$result = &$PathToTF @("history","/stopafter:1","/recursive","..\*","/login:""$Login"",""$Password""") 2>&1 3>&1

if ($result.GetType().Name -eq "Object[]")
{
    <# $result format is:
        Changeset User              Date       Comment
        --------- ----------------- ---------- ----------------------------------------
        26038     user              24.06.2014 Sample commit comment

        $result[2] is:
        26038     user              24.06.2014 Sample commit comment

        $result[2].Split(" ")[0] is:
        26038
    #>

    $result[2].Split(" ")[0]
}
else
{
    "0"
}

它正在将最后一个变更集编号发送到输出管道。如果出现问题,则此数字为0

您可以从此脚本创建一个函数并在构建脚本中调用它。

于 2014-06-24T12:38:59.277 回答
1

我的单行命令:

for /f "usebackq tokens=*" %%a in (`tf history . /recursive /noprompt /stopafter:1 /version:T ^| powershell -Command "$input | ? { $_ -imatch '^(\d+)\s+' } | %% { $matches[0].Trim() } | Select-Object -First 1"`) do set TIP_CHANGESET=%%a

执行 TIP_CHANGESET 环境后。变量包含提示变更集

于 2015-06-16T16:30:04.270 回答