Share via


在 Team Foundation Server 的跨平台命令列用戶端中撰寫指令碼

您要將工作自動化 (例如簽入和簽出原始程式碼) 嗎?您可以使用外部或內部自動化完成工作。 首先,我們來檢閱這兩種自動化模式。 或者,您可以略過直接加入至 優缺點

外部自動化

外部自動化會設定另一個處理序,每次都透過完整的內容引數重複叫用 tf 命令列工具。 您不需要任何特殊語法即可啟用這個模式。 若要實作此方法,您可以使用下列其中一種外部程序:

  • Unix Shell,例如 sh、ksh、bash 或 csh

  • 用來做為指令碼的 Perl 或其他程式語言

  • Apache Ant 或其他組建導向工具

  • 任何可以啟動 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

在每一行解譯時,第一個引數 README.doc 取代 %1。 C5087 會替代 %2。

注意事項注意事項

在命令檔中,兩個位置引數都是以雙引號括住,因為其替代值可能含有空格 (例如,檔名或日期版本規格)。

命令檔的格式可以用擴充巴克斯格式 (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)