在跨平台命令行客户端中编写脚本(对于 Team Foundation Server)

是否自动化任务,如签入和签出源代码?您可以使用外部或内部自动获取所做的工作。首先,让我们检查这两种自动化模式。或者,您可以直接跳到 pros and cons

外部自动化

外部自动化将其他进程配置为每次都利用完全上下文参数重复调用 tf 命令行工具。您不需要任何特殊语法便可启动此模式。您可以使用以下外部进程之一实现此方法:

  • UNIX 外壳程序,例如 sh、ksh、bash 或 csh

  • 用于编写脚本的 Perl 或其他编程语言

  • Apache 蚂蚁或另一个生成面向工具

  • 开始 tf 程序和提供参数的其他工具

内部自动化

内部自动配置 tf 命令行工具来驱动该自动进程并解释通过作为参数的命令文件。您可以通过提供本地路径紧跟的 @ 符号到命令文件调用内部自动。在此命令行提供的其他参数作为位置实参可用于命令文件中的命令。

说明说明

若要将标准输入处理为命令文件,提供跟在文件名 (tf@) 后的 @ 符号。根据您平台的默认编码和字符集将输入流解释为文本。

以下命令文件获取文件的指定版本,并打印有关该版本的详细历史信息。

# This line is ignored because it is a comment.
get "-version:%2" -force "%1"
history -format:detailed "-version:%2" "%1"

命令文件,名为 /home/john/get-and-history.tfc,需要两个位置实参,因此,可以运行它使用以下示例所示:

tf @/home/john/get-and-history.tfc README.doc C5087

在解释每行时,将 %1 替换为第一个参数 (README.doc) 。C5087 用 %2 进行替换。

说明说明

在命令文件中,两个位置参数周围通过双引号引起来,因为它们的替换值可能包含空格(例如,文件名或日期版本规范)。

命令文件的格式可由扩展 Backus-Naur 形式 (EBNF) 描述:

command file ::= { line } ;
line ::= comment line | blank line | action line , EOL ;
comment-line ::= "#" | "rem" , { ? any non-EOL character ? } ;
blank line ::= { ? any whitespace character ? };
action line ::= tf command , [ { white space , tf option } ] , [ { white space , tf free argument } ] ;
tf command ::= ? any tf command ?
tf option ::= ? any tf option ? | positional argument ;
tf free argument::= ? any tf free argument ? | positional argument ;
positional argument::= "%" , non-zero digit , [ { digit } ] ;
EOL ::= ? your platform's EOL character or sequence ?
white space ::= { ? any non-EOL whitespace character ? }
digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
non-zero digit ::= "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
  • tf command 可以是任何有效的 tf 命令,如 getworkfoldworkspace

  • tf option 可以是任意有效的 tf 选项,如 -login-profile-format

  • tf free argument 可以是旨在为 tf 的可用参数的含意字符串,如服务器路径和本地路径。

  • positional argument 是从外部 tf 命令行参数替换的文本的占位符。该数字为对应于要替换的命令行参数索引的正整数,如“%1”和“%2”。%1 引用第一个参数。您可以使用位置参数作为选项或自由参数并按命令之后的任何顺序。

说明说明

使用双引号包围包含了空格的选项和参数。例如,对于标签说明符,使用 “-version:LRelease 2.1”,对于自由参数,使用 “$/Inventory/Client Project/main.c”,对于可能包含空格的位置参数,使用“%1”。仅双引号表示命令文件中的可选边界。按原意解释单引号。若要在活动线中指定文本双引号,您必须同时使用两个双引号 (" ")。命令文件中的引用规则可能不同于您的 shell 所使用的规则,因为 shell 并不分析命令文件中的行。

两种方法的优缺点

因此方法应外部的使用方法或内部自动化?让我们来看看每个方法的优缺点:

外部自动化

内部自动化

优点

  • 它更为灵活,因为它不仅可以运行 tf 命令,还可以运行其他命令。

  • 它是简单的。如果您熟悉该外部进程或语言,则调用 tf 命令行工具与其他命令行进程的相同方式。

  • 调试很容易。如果某些命令未按预期运行,您无需在命令行更改命令以诊断问题。

  • 它快于外部方法。由于 Java 虚拟机只加载一次,并且命令行工具可重用它与服务器的连接,可以快速执行命令文件的多个命令,相比可以单独运行每个命令。

Cons

  • 它比内部自动化慢。对于您运行的每个命令,CPU 必须花费一定时间启动 Java 虚拟机并准备运行客户端。

  • 外部进程必须检测错误。如果外部进程不测试每次执行的退出代码,则该进程可能会错过错误。

  • 它可以很难编程。外部进程必须提供所有相关选项每次运行 tf 命令行工具,并且该参数可能需要特定引号或转义。

它没有外部自动化灵活。原因:

  • 您可以在命令文件中仅指定 tf 命令,因此,如果您想要在 tf 命令之间的执行其他任务,可能必须编写多个命令文件并运行他们中的每一个。

  • 执行将在遇到的第一个错误条件停止。无法强制工具跳过或忽略任何错误条件。

  • 您可能会发现处理常规或错误输出更为复杂。运行具有内部自动化的进程可能无法确定命令文件哪一行产生常规输出的哪一部分。

请参见

其他资源

Command-line Reference (Team Explorer Everywhere)