在一个变更集中使用 tf.exe 签入多个文件

Checkin multiple files with tf.exe in one changeset

在我们的一个构建中,我们正在启动一些自动签出和签入某些文件的自动化过程。

一切正常,但此时我们运行签入命令如下所示

tf.exe checkin /force /comment:"foo" /noprompt /bypass /override:"bar"

状态为 Pending 的所有文件都将签入。

我想让这个脚本更具体一些,只签入我们在构建过程中实际更改的文件(总共 2 个),所以我们确定不会签入任何文件 'by accident'.

我已经看到我们可以使用 checkin command 指定单个文件名,但这样做我们将在 TFS 中获得 2 个不同的变更集,而不是 1 个。我们真的很想有 1 个变更集,包含两个更改的文件,因为更改属于彼此。

关于如何处理这个问题有什么想法吗?

少量添加/短期解决方案

目前我已经通过指定修改文件所在的文件夹解决了我们的'problem',看起来像这样

tf.exe checkin "/my/folder/location/" /recurse /force /comment:"foo" /noprompt /bypass /override:"bar"

记下文件夹位置和添加的 /recurse 参数。

您只需用空格分隔文件:

tf.exe checkin file1.ext file2.ext /force /Comment:"foo" /noprompt /bypass /override:"bar"

documentation对这一点没有说清楚,但可能是一个itemspec的一般规范,它可以是多个项目。

查看关于结帐的类似问题:Is there a way to check-out multiple files from various folders in TFS in a single operation

正如其他人所提到的,您可能 运行 遇到命令行长度超过系统支持的问题,在这种情况下,您可能需要查看其他解决方案。

cmd.exe 对命令的长度有限制。使用版本控制 API,或简单地 'tf checkin /i'(无参数)可能是比传递大量长文件名更好的选择。

如果文件由于更改而自动签出,并且文件的内容最终更改回其原始状态,这都是正常的。那时你会看到关于比较相同内容的消息。您也可以使用 tfpt uu /noget /r * 命令忽略与原始文件相同的文件。您需要安装 TFS Power Tools 才能正常工作。 注意:没有TFS Power tool 2017。

更多详情请参考以下两个链接:

  • Visual Studio TFS shows unchanged files in the list of pending changes
  • Can TFS Pending Changes show files that are truly changed like SourceGear Vault?