使用 Team Foundation 版本控制命令

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

Visual Studio 2019 | Visual Studio 2022

你可以使用版本控制命令来执行几乎所有可以在 Visual Studio 中执行的 Team Foundation 版本控制 (TFVC) 任务。 你还可以使用版本控制命令来执行一些在 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 deletetf del 调用 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.cs 和 program2.c。

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

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

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

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

当你使用 History 命令 Difference命令时,可以通过使用波浪符分隔版本来指定版本范围,例如:

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 点存在的代码库匹配。 有关 .NET Framework 支持的日期和时间格式的详细信息,请参阅日期/时间标准日期和时间格式字符串
当前工作区 W 指定工作区中的版本。 - -
指定工作区 W<workspace-name>; <workspace-owner> 指定已指定工作区中的版本。 tf get /version:WResolveRIConflicts;PatW 示例指定 PatW 拥有的 ResolveRIConflicts 工作区中的版本。
提示 T 指定最新版本。 - -

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

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

使用 /noprompt 选项抑制数据输入请求并重定向输出数据

使用 /noprompt 选项抑制数据输入请求并将输出数据重定向到命令提示符窗口。 如果需要在脚本中使用版本控制命令,此选项很有用,其中:

  • 命令在没有用户干预的情况下继续运行。
  • 数据可用于对脚本执行操作,例如分析或捕获。

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

  • 禁止所有输入请求:

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

使用 /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 选项可以在运行另一个命令(例如 AddEdit)的同时应用或移除锁定。

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