使用 Team Foundation 版本控制命令

Azure DevOps Services |Azure DevOps Server 2022 - Azure DevOps Server 2019 |TFS 2018

Visual Studio 2019 |Visual Studio 2022

可以使用版本控制命令执行几乎所有Team Foundation 版本控制 (TFVC) 可以在 Visual Studio 中执行的任务。 还可以使用版本控制命令执行一些无法在 Visual Studio 中完成的任务。 若要从命令提示符或脚本中运行版本控制命令,请使用 tf.exe 工具。

运行命令

若要启动 Visual Studio 命令提示符,请在 Windows “开始”屏幕中选择 “VS2022 开发人员命令提示符 ”或更低版本的快捷方式。

注意

对于 Visual Studio 2019 及更高版本, 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 版本控制中开发应用

挂起工作

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

有关详细信息,请参阅 暂停工作和管理搁置集

提交你的工作

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

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

有关详细信息,请参阅 将工作签入团队的代码库

管理文件并解决问题

使用以下部分中的资源来管理文件。

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

有关详细信息,请参阅 使用源代码管理资源管理器管理版本控制下的文件

查看和管理过去的版本

有关详细信息,请参阅 查看和管理以前的版本

比较文件夹和文件

有关详细信息,请参阅 查看和管理以前的版本

解决文件冲突

  • Resolve 命令:解决工作区和服务器上的项目之间的冲突。

有关详细信息,请参阅解决Team Foundation 版本控制冲突

使用版本控制锁

有关详细信息,请参阅 使用版本控制锁

隔离风险

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

有关详细信息,请参阅使用分支隔离Team Foundation 版本控制中的风险

管理版本控制

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

有关详细信息,请参阅 配置签出设置

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

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

了解命令语法

每个命令的语法显示在每个参考文章的顶部。

必需参数和可选参数

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

独占参数

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

原义和可替换参数

未括在方括号中的项是包含逐字的选项。 用尖括号括起来的项 (<>) 是参数,必须用实际字符替换这些参数才能执行命令。

命令快捷方式和别名

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

示例

例如,请考虑 Checkout 命令

tf checkout [/lock:( none|checkin|checkout)] [/recursive] <item-spec> [/login: <username>, [<password>]]

此示例包含以下参数:

  • <item-spec>:必须将此参数替换为标识要签出的项目的 项规范
  • 以下参数是可选的。 如果不提供它们,则其任何效果都不适用于命令:
    • /lock:(none|checkin|checkout):如果未指定 /lock 选项,则系统默认使用 /lock:none 。 否则,可以指定其他锁定选项之一。
    • /recursive:如果要以递归方式签出文件夹中的多个项目,则必须逐字指定此选项。
    • /login:<username>, <password>:如果要以其他用户身份运行命令,则必须逐字指定 /login 选项,并将 替换为 <username> 用户的名称。 如有必要,请将 替换为 <password> 用户的密码。

指定受命令影响的项

可以使用项规范和版本规范来指定受命令影响的项。

使用项规范参数指定受影响的项

使用项规范指定受命令影响的项。 可以在客户端计算机或 Azure DevOps 服务器上指定项。 可以使用通配符,例如 *

客户端项规范参数

客户端项规范参数指定客户端计算机上项的路径,例如:

  • 文件夹,例如 ,c:\code\SiteApp\Main\SolutionA\
  • 文件,例如 c:\code\SiteApp\Main\SolutionA\Project1\program.cs
  • 多个文件,例如 c:\code\SiteApp\Main\SolutionA\*.cs
  • 通用命名约定 (UNC) 路径,如 \\myshare\code\SiteApp\Main

服务器项规范参数

服务器项规范参数指定 Azure DevOps 服务器上项的路径,例如:

  • 文件夹,例如 $/SiteApp/Main/SolutionA
  • 文件,例如 $/SiteApp/Main/SolutionA/Project1/program.cs
  • 多个文件,例如 $/SiteApp/Main/SolutionA/*.cs

需要对不在客户端计算机上的项运行命令时,通常使用服务器项规范参数。 例如,假设你在开发计算机上工作。 如果需要获取有关项目集合中某些项的修订历史记录数据,则可以使用以下命令:

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

多个项规范参数

对于某些命令,可以指定多个项规范参数,例如:

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

此命令将签出 program.csprogram2.c

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

使用版本规范指定受命令影响的项的版本。 若要提供版本规范,可以:

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

  • 使用分号将版本规范追加到项规范,例如 program1.cs;C44

使用 “历史记录”命令“差异”命令时,可以通过用波形符分隔版本来指定版本范围,例如:

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

使用以下语法指定版本规范:

类型 语法 说明 示例 结果
变更集 [C]<version-number> 基于变更集编号指定项。 如果在指定的变更集中未修改范围内的项,则系统将采用在指定变更集之前发生的项的最新版本。 如果仅指定数字,则可以省略 C tf get readme.txt /v:C8

tf get readme.txt /v:8

tf get readme.txt;8
如果在更改集 8 中修改了 readme.txt ,则示例代码将获取该文件的该版本。 否则,它将获取版本 8 之前 readme.txt 的最新版本。
Label L<label> 指定应用标签的项。 tf get readme.txt;LJulyHotFix

tf get /version:LLastKnownGood
第一个示例获取标记为 JulyHotFix 的readme.txt版本。 第二个将检索 (的所有已标记项的版本,并删除工作区中未标记) 的项,因为创建标记为 LastKnownGood 的变更集时存在这些项。 可以将第二个示例中的代码用作 自动生成过程的一部分。
日期和时间 D<yyyy-mm-ddTxx:xx>



D<mm/dd/yyyy>



.NET Framework 支持的任何格式。



在本地计算机上受支持的任何日期格式。
指定在特定时间的指定日期创建的变更集。 tf get /version:D2022-03-22

tf get /version:D2022-03-22T09:00
第一个示例更新工作区,使其与 2022 年 3 月 22 日午夜存在的代码库匹配。 第二个更新工作区,使其与 2022 年 3 月 22 日上午 9:00 存在的代码库匹配。 有关.NET Framework支持的日期和时间格式的详细信息,请参阅 DateTime标准日期和时间格式字符串
当前工作区 W 指定工作区中的版本。 - -
指定的工作区 W<workspace-name>; <workspace-owner> 指定已指定工作区中的版本。 tf get /version:WResolveRIConflicts;PatW 该示例指定拥有的工作区PatW中的ResolveRIConflicts版本。
提示 T 指定最新版本。 - -

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

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

/noprompt使用 选项取消数据输入请求和重定向输出数据

/noprompt使用 选项可禁止对数据输入的请求,并将输出数据重定向到命令提示符窗口。 当需要在脚本中使用版本控制命令时,此选项非常有用::

  • 命令无需用户干预即可继续。
  • 数据可供脚本对其执行操作,例如分析或捕获。

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

  • 禁止所有输入请求:

    • 命令提示符窗口中不会提出问题。 例如,将 “撤消”命令 与此选项一起使用时,系统不会提示确认是否要撤消更改。
    • 不显示 Windows 和对话框。 例如,可以将此选项与 Checkin 命令一起使用。 系统不显示“Check In”对话框,用于确认项目和关联的工作项。 相反,系统会在不确认的情况下签入项目。
  • 将输出数据重定向到命令提示符。 例如,可以将此选项与 “历史记录”命令一起使用。 数据显示在命令提示符窗口中,而不是“ 历史记录”窗口

/login使用 选项指定凭据

/login使用 选项指定要运行命令的 Azure DevOps 服务器用户帐户。 使用另一个团队成员的计算机时,此选项非常有用。

例如,假设你在团队成员的开发计算机上工作。 使用 Lock 命令 解锁之前锁定的文件:

c:\code\SiteApp\Main> tf lock /lock:none program.cs /login:<username>,<password>

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

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

输入此命令后,系统会提示你在屏蔽输入的对话框中输入密码。

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

重要

最佳做法是,请谨慎使用 /lock 选项。 告知团队成员锁定项目的原因以及何时计划删除锁。

/lock使用 选项在运行另一个命令(如“添加”或“编辑”)的同时应用或删除锁。

/lock:(none|checkin|checkout)

命令 /lock 使用以下选项:

  • None:未对项进行锁定。 如果锁定已到位,则会将其删除。

  • CheckinCheckout:应用锁。 有关详细信息,请参阅 了解锁类型

注意

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

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

使用选项快捷方式

可缩写以下选项。

选项

选项别名

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