使用 Team Foundation 版本控制命令

你可使用版本控制命令来执行你在 Visual Studio 中所能执行的几乎所有任务,以及你不能在 Visual Studio 中执行的若干任务。 你可使用 tf.exe 工具从命令提示符或脚本中运行版本控制命令。

你希望做什么?

  • 运行命令

    • 设置开发人员计算机

    • 开发应用程序

    • 挂起工作

    • 提交你的工作

    • 管理文件并解决问题

    • 隔离风险

  • 了解命令语法

  • 指定受命令影响的项

    • 使用 itemspec 参数指定受影响的项

    • 使用 versionspec 参数指定项的受影响版本

  • 使用选项修改命令的运行方式

    • 使用 /noprompt 选项以禁止数据输入请求并将输出数据重定向到命令提示符窗口

    • 使用 /login 选项以在运行命令时指定凭据

    • 使用 /lock 选项以应用或删除锁定

    • 使用选项快捷方式

  • 了解退出代码

运行命令

若要启动 Visual Studio 命令提示符,请从 Windows“开始”屏幕中,选择“Microsoft Visual Studio 2012”、“Visual Studio Tools”,然后选择一个“命令提示符”快捷方式。

在大多数情况下,将在工作区中映射的目录的上下文中运行版本控制命令。 例如,$/SiteApp/Main/ 映射到 c:\code\SiteApp\Main\。 若要获取工作区中所有项的最新版本:

c:\code\SiteApp\Main\SolutionA>tf get

备注

我们当前未重新发布某些主题。但是,你可以阅读这些主题的 Visual Studio 2010 版本。

设置开发人员计算机并管理工作区

你的工作区是团队的基本代码的本地副本。 因为它是开发人员计算机上的本地副本,因此你可以单独开发和测试代码,直到你准备好签入你的工作。 下面是用于管理你的工作区的一些命令:

另请参阅:在开发计算机上设置 Team Foundation 版本控制创建和使用工作区

开发应用程序

使用这些命令在版本控制下与你的团队一起开发应用:

另请参阅:在 Team Foundation 版本控制中开发应用程序

挂起工作

出于多种原因,有时需要搁置部分或所有进行中的工作。 若要挂起并继续工作以及管理搁置集,请使用以下命令:

另请参见:暂停工作并管理搁置集

提交你的工作

下面介绍了如何将你的代码签入到团队的基本代码:

  • Checkin 命令
    将对文件或文件夹所做的挂起更改签入到该服务器。

另请参阅:向团队的代码库签入工作成果

管理文件并解决问题

隔离风险

使用以下命令以利用分支隔离风险:

另请参见:使用分支隔离 Team Foundation 版本控制中的风险

管理版本控制

使用以下命令管理版本控制系统:

另请参阅:管理 Team Foundation 版本控制 (Visual Studio 2010)。

获取有关版本控制命令的帮助

使用以下命令获取有关版本控制命令的详细信息:

了解命令语法

每个命令的语法都将显示在每个参考主题的顶部。

必需参数和可选参数

不带括号的参数是必需参数。 [Brackets] 指示完成命令时不需要的可选参数。 但是,某些可选参数具有适用于该命令的默认值,即使未指定该选项也是如此。

独占参数

当选项由管道 (|) 隔离时,你可以指定其中一个选项。

原义和可替换参数

粗体项是包括原义的选项。 斜体项是必须使用实际字符替换以执行命令的参数。

命令快捷方式和别名

某些命令支持快捷方式。 例如,你可以使用 tf deletetf del 调用“删除”命令

示例

例如,“签出”命令

tf checkout [/lock:( none|checkin|checkout)] [/recursive] itemspec [/login: username,[ password]]

让我们从此示例中查看参数:

  • itemspec:你必须将此参数替换为可指定要签出的项的 itemspec。

  • /lock:(none|checkin|checkout):无需指定 /lock 选项。 如果你未指定该选项,默认情况下,系统将指定 /lock:none。 否则,你可以指定锁定选项之一。

  • 以下参数是可选参数,如果未提供这些参数,则其效果都不适用于该命令:

    • /recursive:如果你希望在文件夹中以递归方式签出多个项,必须指定此选项原义。

    • /login:username,password:如果你希望作为其他用户运行该命令,则必须指定 /login 选项原义、将 username 替换为该用户的名称,并且提供密码(如果需要)。

指定受命令影响的项

你可以使用 itemspecs 和 versionspecs 指定受命令影响的项。

使用 itemspec 参数指定受影响的项

可使用 itemspec(项规范)指定受命令影响的项。 你可以在客户端计算机上或你的 Team Foundation Server 上指定项。 你可以使用通配符,例如 *?

客户端 itemspec 参数

客户端 itemspec 参数指定指向客户端计算机上的项的路径,例如文件夹(如 c:\code\SiteApp\Main\SolutionA\)、文件(如 c:\code\SiteApp\Main\SolutionA\Project1\program.cs)或多个文件(如 c:\code\SiteApp\Main\SolutionA\*.cs)。 你还可以指定 UNC 路径,例如 \\myshare\code\SiteApp\Main

服务器 itemspec 参数

服务器 itemspec 参数指定指向 Team Foundation Server 上的项的路径,例如文件夹(如 $/SiteApp/Main/SolutionA)、文件(如 $/SiteApp/Main/SolutionA/Project1/program.cs)或多个文件(如 $/SiteApp/Main/SolutionA/*.cs)。

当需要在项(而非客户端计算机)上运行命令时,通常使用服务器 itemspec 参数。 例如,你正在开发人员计算机上工作,并且需要某些有关未在其中进行工作的团队项目集合中某些项的修订历史记录数据:

c:\>tf history /collection:http://fabrikam-3:8080/tfs/DefaultCollection
$/SiteApp/Main/SolutionA/Project1/* /recursive  
/noprompt 

多个 itemspec 参数

对于某些命令,你可以指定多个 itemspec 参数。 例如:

c:\code\SiteApp\Main\SolutionA\Project1\>tf checkout program1.cs program2.c

签出 program.cs 和 program2.c。

使用 versionspec 参数指定项的受影响版本

可使用 versionspec(版本规范)指定受命令影响的项的版本。 若要提供 versionspec,你可以执行以下操作:

  • 使用 /version 选项。 例如:/version:C44

  • 将 versionspec 附加到 itemspec,并使用分号分隔。 例如:program1.cs;C44

使用History 命令Difference Command时,通过使用波形符 (~) 分隔版本,可指定一系列版本。 例如:

c:\code\SiteApp\Main\SolutionA>tf history /noprompt * /recursive /v:D4/12/2012~D4/24/2012

使用以下语法指定 versionspec。

类型

语法

描述

变更集

[C]n

基于变更集编号指定项。 如果未在指定的变更集中修改范围内的项,系统将采用在指定的变更集之前发生的最新版本的项。

提示

如果仅指定一个编号,则可忽略 C。

示例

c:\code\SiteApp\Main>tf get readme.txt /v:C8

--或者--

c:\code\SiteApp\Main>tf get readme.txt /v:8

--或者--

c:\code\SiteApp\Main>tf get readme.txt;8

如果 readme.txt 已在变更集 8 中进行修改,则获取该版本的文件。 否则,获取低于版本 8 的最新版本的 readme.txt。

Label

Llabel

指定已向其应用 label 的项。

示例

c:\code\SiteApp\Main>tf get readme.txt;LJulyHotFix

获取已添加标签 JulyHotFix 的 readme.txt 版本。

c:\code\SiteApp\Main>tf get /version:LLastKnownGood

例如,可以作为自动生成过程的一部分在工作区中检索所有带有标签的项的版本(并删除不带有标签的项),前提是在创建带有标签 LastKnownGood 的变更集时存在这些项。

日期和时间

Dyyyy-mm-ddTxx:xx

- 或 -

Dmm/dd/yyyy

- 或 -

.NET Framework 支持的任何格式。

- 或 -

在本地计算机上受支持的任何日期格式。

指定在特定日期和时间创建的变更集。

示例

c:\code\SiteApp\Main>tf get /version:D2004-03-22

更新工作区以匹配于 2004 年 3 月 22 日 00:00(午夜)存在的基本代码。

c:\code\SiteApp\Main>tf get /version:D2004-03-22T09:00

更新工作区以匹配于 2004 年 3 月 22 日 09:00(上午 9 点)存在的基本代码。

有关 .NET Framework 支持的日期和时间格式的详细信息,请参阅 DateTime标准日期和时间格式字符串

工作区(当前)

W

指定工作区中的版本。

工作区(已指定)

Wworkspacename; workspaceowner

指定已指定工作区中的版本。

例如:WResolveRIConflicts;PeterW

提示

T

指定最新版本。

使用选项修改命令的运行方式

你可以使用某些常用选项来修改命令的运行方式。

使用 /noprompt 选项以禁止数据输入请求并将输出数据重定向到命令提示符窗口

使用 /noprompt 选项以禁止数据输入请求并将输出数据重定向到命令提示符窗口。 当你需要在脚本中使用版本控制命令时,此选项很有用,因为该命令会在用户不进行干预的情况下继续运行,并且该数据可供脚本执行诸如分析或捕获等操作。

使用此选项时,系统会执行以下操作:

  • 禁止所有输入请求:

    • 不会在命令提示符窗口中提问。 例如,当你结合使用Undo 命令与此选项时,系统不会提示你确认是否希望继续撤销更改。

    • 此时不会显示窗口和对话框。 例如,可结合使用此选项与Checkin 命令。 系统会在未确认的情况下继续进行签入,而不会为你显示用于确认选项(要签入的项或要关联的工作项)的“签入”对话框。

  • 将输出数据重定向到命令提示符。 例如,可结合使用此选项与History 命令。 该数据将显示在命令提示符窗口中,而非“历史记录”窗口中。

使用 /login 选项以在运行命令时指定凭据

使用 /login 选项指定 Team Foundation Server 用户帐户,以便运行命令。 当你在其他团队成员所在的计算机上进行工作时,此选项很有用。

例如,Julia 正在 Peter 的开发人员计算机上与其协同工作。 她使用“锁定”命令解锁之前锁定的文件:

c:\code\SiteApp\Main> tf lock /lock:none program.cs /login:JuliaI,JuliaPassword

如果想要避免在命令提示符中显示密码,则可以输入该命令,但不输入密码:

c:\code\SiteApp\Main> tf lock /lock:none program.cs /login:JuliaI

在输入此命令后,系统随后会提示她在隐藏其输入的对话框中键入密码。

使用 /lock 选项以应用或删除锁定

重要

最佳做法是自行决定使用 /lock 选项,并通知你的团队成员锁定某个项的原因以及计划删除该锁定的时间。

使用 /lock 选项应用或删除锁定,同时运行其他命令(例如“添加”“编辑”)。

/lock:(none|checkin|checkout)
  • None:项上不存在锁定。 如果锁定已存在,则删除它。

  • CheckinCheckout:应用锁定。 请参阅了解锁定类型

备注

在极少数情况下,锁定操作可能会失败:

  • 如果任何其他用户锁定了任何指定项,该锁定操作将失败。

  • 如果已存在对该项所做的挂起更改,系统会忽略此转换。在此情况下,必须使用Lock Command更改项上的锁定。

使用选项快捷方式

可缩写以下选项。

选项

选项别名

/comment

-C

/computer

-M

/delete

-D

/force

-P

/format

-F

/help

-?, -H

/lock

-K

/login

-Y

/newname

-N

/noprompt

-I

/owner

-O

/recursive

-R

/server

-S

/slotmode

-X

/template

-T

/user

-U

/version

-V

/workspace

-W

了解退出代码

版本控制命令将返回以下退出代码:

退出代码

定义

0

成功。

1

部分成功;这意味着至少某些内容或者可能全部内容都未成功。

2

无法识别的命令。

100

全部失败。

例如:

c:\code\SiteApp\Main\SolutionA\Project1\>tf checkout program1.cs program2.c

如果你要尝试签出的一个文件不在该服务器上,该命令将返回 1 以指示部分成功。