使用 Team Foundation 版本控制命令

Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020

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使用命令将代码签入团队的代码库:

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

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

管理文件并解决问题

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

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

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

查看和管理过去的版本

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

比较文件夹和文件

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

解决文件冲突

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

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

使用版本控制锁

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

隔离风险

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

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

管理版本控制

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

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

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

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

了解命令语法

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

必需参数和可选参数

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

独占参数

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

逐字和可替换参数

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

命令快捷方式和别名

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

Example

例如,请考虑 “签出”命令

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例如。

使用 History 命令Difference 命令时,可以通过使用波形符分隔版本来指定一系列版本,例如:

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

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

类型 Syntax Description 例子 结果
变更集 [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 版本。
标签 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 该示例指定拥有的 ResolveRIConflicts 工作区 PatW 中的版本。
小窍门 T 指定最新版本。 - -

使用选项修改命令函数的方式

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

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

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

  • 该命令在用户无需干预的情况下继续。
  • 数据可供脚本执行作,例如分析或捕获。

使用此选项时,系统会:

  • 禁止所有输入请求:

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

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