了解 Team Foundation 版本控制 (TFVC) 命令如何映射到 Git 工作流

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

Visual Studio 2019 | Visual Studio 2022

是否计划采用 Git、熟悉 TFVC 操作,并想知道它们如何映射到 Git? 两者都是功能强大且成熟的源代码管理系统。 但是,将你已习惯的常见操作从一个系统映射到另一个系统可能会造成混淆。

由于产品文档中已充分阐述 Git 命令,因此本文不再深入探讨,而是通过演示示例来帮助你做出正确的决策,同时浏览典型的“创建 -> 克隆 -> 分支 -> 更改 -> 提交 -> 推送”工作流

通过创建新的存储库从头开始

每个项目都可以托管同一项目中的 TFVC 和 Git 存储库,创建一个 TFVC 以及一个或多个 Git 存储库。

在 Azure Repos 中创建新的 Git 存储库

创建存储库后,你将看到快速入门的分步说明。

开始使用 Azure Repos 中的新 Git 存储库

单击说明页末尾的“创建 ReadMe 文件”,提供存储库上下文并创建一些历史记录。

创建 README 以初始化 Azure Repos 中的新 Git 存储库

创建工作区并获取最新代码

首次连接到 TFVC 存储库时,通常会创建工作区并获取最新代码。 那么,在 Git 中如何开始?

与 TFVC 中的工作区类似,可以将 Git 存储库 clone 到计算机上的文件夹。 克隆会将存储库的所有内容和历史记录下载到本地计算机。 拥有克隆的存储库后,几乎所有操作都会在本地执行。 可以使用集中式存储库的完整备份脱机工作。

git clone https://dev.azure.com/demo-fabrikam/Fabrikam/_git/Mapping-TFVC-actions-to-Git

每个存储库只需克隆一次,但与 TFVC 工作区一样,可使用多个克隆来隔离正在进行的工作。 但要隔离更改,分支通常是更好的方法。

创建分支

使用 Git 时,始终在分支中工作,默认情况下在 main 分支中工作。 建议创建多个本地分支。 此过程需要几秒钟时间,它支持在分支之间无缝切换上下文并单独工作。 与范围限定为路径的 TFVC 分支不同,Git 分支的范围是存储库。 它们是轻量级的,只能在本地,或者可以在你准备好共享更改时与他人共享。

如果需要单独工作、需要暂停工作、专注于新功能,或者计划执行 Git 拉取请求,请考虑使用分支。

以 TFVC 用户身份重复几次:

  • 建议使用分支!
  • Git 分支成本低廉、快速且功能强大!
  • Git 鼓励你使用本地分支。
  • 根据需要将本地分支发布到集中式存储库。
  • 在进行更改之前,请始终验证分支上下文。
  • 使用 users/alias/branchname 等常见约定命名分支,例如:users/doris/newfeature

创建并切换到名为 francis/demo-feature 的本地主题分支。 最好先运行 git status,以验证你是否从正确的分支开始。

git checkout -b francis/demo-feature

通过 Windows 命令行创建新的 Git 分支

通过添加文件进行更改

与 TFVC 体验类似,工作文件夹中的新文件不会自动包含在存储库中。 使用 git add 命令暂存新文件,这相当于在 TFVC 中执行 add Items to Folder 操作。

git add <file>

git add --all

使用预先烘培的示例,你将得到 13 个新文件,这些文件已包含并暂存到本地存储库中。

查看挂起的更改

想知道工作环境中现在有哪些变化? 和前面一样,Visual Studio IDE 中的 Git status 命令或 Changes 视图将显示工作树中的更改。

git status

使用 Git 状态显示暂存更改

签入更改并在本地提交

在 TFVC 中,使用“签入”共享更改,签入操作会将挂起的更改发送到服务器。 Git 进程略有不同。 首先,提交到本地存储库,创建一个提交对象(类似于变更集),然后通过推送将这些更改发送到服务器。

使用 git commit 将更改提交到本地存储库,类似于 TFVC 中的 Checkin Pending Changes。 主要区别在于,git commit 将更改提交到本地存储库,而非远程存储库。

git commit

使用服务器/远程存储库签入更改

首先,需要将本地 francis/demo-feature 分支发布到远程服务器,其中包括所有已提交的更改。

git push --set-upstream origin francis/demo-feature

若要将本地的更多更新与远程存储库同步,需要使用 git push 推送更改。 关于使用 git 命令或 Visual Studio IDE 的最佳做法是:

  • 通过 fetch 下载内容并预览其他人的传入更改。
  • 通过 pull 下载并合并其他人的更改。
  • 通过 push 共享本地更改。

查看历史记录

若要查看刚刚创建的提交,可以查看本地历史记录。

对于精简历史记录,请使用:

git log --oneline

对于详细历史记录,请使用:

git log

使用 Git 日志查看分支历史记录

如上所示,git log 列出了作者、电子邮件、写入日期和提交 SHA-1 校验和。 作为 TFVC 用户,不妨使用 --stat 选项来包含更多信息,例如文件名和更改统计信息。

还可以使用 Azure DevOps Services Web 门户查看集中式存储库的历史记录。

在 Azure DevOps Services Web 门户中,选择“代码”>“历史记录”或“代码”>“资源管理器”>“历史记录”

在 Azure Repos 中查看分支历史记录

此时,你已成功探索了基于常见 TFVC 操作的“创建 -> 克隆 -> 分支 -> 更改 -> 提交 -> 推送”工作流

此时,还可以选择发出拉取请求,在服务器/远程存储库上发布和暂载更改。

其他操作

切换分支

使用 Git 时,无需通过切换到计算机上单独的文件夹和位置来更改分支。 可通过执行 checkout 来更改上下文,使整个工作目录与所选分支或提交匹配。 快速而简单!

命令行

git checkout <branch>

如果忘记了本地存储库中有哪些分支,请使用 git branch 列出默认分支和已知分支。

请记住你正在处理的分支! 在 Git 中使用多个分支时,可在同一工作目录中就地切换分支。 在分支之间切换是一项快速操作,最好确保你随时处于正确的分支上。

获取最新版本

想要获取更新的原因有很多。 例如,如需将上下文切换到另一个项目,就要使用最新版本的代码库刷新开发计算机。

命令行

git pull

git fetch

然后是

git merge FETCH_HEAD

始终获取最新版本并在本地解决合并冲突。

撤消本地更改

可能会出于合理的原因,需要还原在本地存储库中所做的所有修订并将工作环境从远程存储库重置为最新版本。

命令行

git reset --hard HEAD

然后是

git pull origin

然后是

git clean -xdf

此场景等同于在 TFVC 中使用 Overwrite writable files that are not checked outOverwrite all files if the local version matches the specified version 选项执行 Get > Latest Version

或者,可以手动删除本地存储库(当然是在生成经过验证的副本之后),然后再次对存储库执行 clone

Git 用户可以使用更多的操作和选项。 下面提供了一些有用的参考网站,以供深入阅读:

问答

sync 怎么样呢?

“Visual Studio IDE Commit and Sync 没有神奇地做到这一切吗?”你可能会这样问自己。

选择“Git”>“提交或储藏”,以打开“Git 更改”。 选择“全部提交”下拉菜单,然后选择“全部提交并同步”。

或者,在团队资源管理器中,选择“提交”下拉菜单,然后选择“命令和同步”。

团队资源管理器中的“提交和同步”

魔法伴随着责任! 许多用户不喜欢 sync 是因为它有时会弄乱本地历史记录,并在当前提交的基础上添加合并提交。 处于错误状态后,必须还原命令行,因为 IDE 中当前没有重置支持。

作者:来自 ALM 的 Jesse Houwing、Martin Hinshelwood、Mike Fourie 和 Willy Schaub | DevOps Rangers. 在此处联系他们。

(c) 2015 Microsoft Corporation。 保留所有权利。 本文档“按原样”提供。本文档中表达的信息和观点(包括 URL 和其他 Internet 网站引用)如有更改,恕不另行通知。 您自行承担其使用风险。

本文档未向您提供任何 Microsoft 产品中任何知识产权的任何合法权利。 您可为了内部参考目的复制和使用本文档。