TF错误:没有剩余的更改需要签入

Tru*_*ill 5 nant teamcity tfs

我们有一个NAnt脚本来更新我们在TFS中的"预构建"程序集作为我们的TeamCity构建项目之一.构建由其他构建触发.它会进行TF检查,移动一些文件,然后进行TF检查.

相关目标(tf解析为TF.exe的路径):

<target name="checkin.assemblies">
  <exec program="${tf}">
    <arg value="checkin" />
    <arg value="${dir.assemblies}" />
    <arg value="/comment:${message}." />
    <arg value="/noprompt" />
    <arg value="/recursive" />
   </exec> 
</target>
Run Code Online (Sandbox Code Playgroud)

我们经常得到:

Checking in edit: ...
The following changes were not checked in because the items were not modified.
Undoing edit: ...
There are no remaining changes to check in.
External Program Failed: E:\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe (return code was 1)
Process exited with code 1
BUILD FAILED - 0 non-fatal error(s), 1 warning(s)

我认为正在发生的是构建被触发一次太多次(有几个构建可以触发它).如果我们要更新的文件没有更改,TFS会跳过签入并"帮助"返回错误代码.不幸的是,它也将返回1"锁定退房"错误,这是严重的.

供参考:TF命令行退出代码

解决方法很简单但很烦人 - 触发其中一个构建,这将构建程序集的版本号,然后触发此构建.

我们如何可靠地完成这项工作?

更新:我们最终修改了TeamCity的构建触发配置,以创建构建"链",确保只有一次触发签入.

Gra*_*day 9

有一种记录的命令行参数用于tf checkin被调用/force.它已在使用情况和MSDN中列出,但在任何地方都没有描述.

这将设置CheckinParameters.AllowUnchangedContent标志,并允许您签入没有更改的文件.这应该可以解决您的问题.