使用 Team Foundation 版本控制命令

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018

Visual Studio 2022 |Visual Studio 2019 |Visual Studio 2017 |Visual Studio 2015 |Visual Studio 2013

可以使用版本控制命令执行几乎可以在Visual Studio中执行的所有任务,以及Visual Studio中无法完成的多个任务。 可以使用 tf.exe 工具从命令提示符或脚本中运行版本控制命令。

运行命令

若要启动Visual Studio命令提示符,请从Windows"开始"菜单,选择 VS2019 或更低版本的开发人员命令提示符快捷方式。

注意

对于 Visual Studio 2017 及更高版本,tf.exe二进制文件不再位于Visual Studio安装路径中的固定位置,如以前的版本所示。 (例如, C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE)。 使用tf.exe的脚本不应根据Visual Studio安装路径对文件的路径进行硬编码。

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

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

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

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

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

开发应用

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

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

挂起工作

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

另请参阅: 暂停工作和管理货架集

提交你的工作

使用 checkin 命令将代码签入到团队的代码库:

  • 签入命令:签入对服务器的文件或文件夹的挂起更改。

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

管理文件并解决问题

查看和管理版本控制文件和文件夹

另请参阅: 使用源代码管理资源管理器管理版本控制下的文件

查看和管理过去的版本

另请参阅: 查看和管理过去的版本

比较文件夹和文件

另请参阅: 查看和管理过去的版本

解决文件冲突

另请参阅:解决Team Foundation 版本控制冲突

使用版本控制锁定

另请参阅: 使用版本控制锁

隔离风险

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

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

管理版本控制

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

另请参阅: 配置签出设置

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

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

了解命令语法

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

必需参数和可选参数

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

独占参数

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

原义和可替换参数

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

命令快捷方式和别名

某些命令支持快捷方式。 例如,可以使用 tf deletetf del 调用 Delete 命令

示例

例如, “签出”命令

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

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

  • itemspec:必须将此参数替换为一个 itemspec ,用于指定要签出的项目。

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

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

    • /递归:如果要以递归方式签出文件夹中的多个项目,则必须指定此选项逐字显示。

    • /loginusername,password:如果要以其他用户身份运行该命令,则必须指定 /login 选项逐字输入,将 用户名 替换为用户名,如有必要,可以提供密码。

指定受命令影响的项

你可以使用 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.

使用 历史记录命令差异命令时,可以通过将版本与平铺分隔 (~) 来指定一系列版本。 例如:

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

指定应用 标签 的项目。

示例

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/yyy

-或-

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

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

  • 禁止所有输入请求:

    • 不会在命令提示符窗口中提问。 例如,使用此选项的 “撤消”命令 时,系统不会提示你确认是否继续撤消更改。

    • 此时不会显示窗口和对话框。 例如,将此选项用于 Checkin 命令。 系统不显示“ 签入 ”对话框,而不是显示选项, (要签入哪些项目或要关联哪些工作项) ,系统继续签入而不进行确认。

  • 将输出数据重定向到命令提示符。 例如,将此选项用于 History 命令。 数据显示在命令提示符窗口中,而不是 “历史记录”窗口

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

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

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

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)
  • :项上没有锁定。 如果锁定已存在,则删除它。

  • 签入签出:应用锁。 请参阅 了解锁类型

注意

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

  • 如果任何其他用户锁定了任何指定项,该锁定操作将失败。
  • 如果已存在对该项所做的挂起更改,系统会忽略此转换。 在这种情况下,必须使用 Lock 命令 更改项上的锁。

使用选项快捷方式

可缩写以下选项。

选项

选项别名

/comment

-C

/computer

-M

/delete

-D

/force

-P

/format

-F

/help

-?, -H

/lock

-K

/login

-Y

/newname

-N

/noprompt

-I

/owner

-O

/递归

-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 以指示部分成功。