在 Team Foundation Server 的跨平台命令列用戶端中撰寫指令碼
您要將工作自動化 (例如簽入和簽出原始程式碼) 嗎? 您可以使用外部或內部自動化完成工作。 首先,我們來檢閱這兩種自動化模式。 或者,您可以直接跳至pros and cons。
外部自動化
外部自動化會設定另一個處理序,每次都透過完整的內容引數重複叫用 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 命令,例如 getworkfold和 workspace。
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 不會剖析在命令檔中的命令行。 |
這兩種方法的優缺點
那麼哪一種方法您應該採用 - 外部或內部自動化? 我們來查看每個方法的利害得失:
外部自動化 |
內部自動化 |
|
優點 |
|
|
Cons |
|
這比外部自動化較不具彈性。 這個原因:
|