为项目选择正确的版本控制
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Visual Studio 2019 | Visual Studio 2022
不管软件项目是大还是小,都应尽快使用版本控制。 Azure Repos 支持两种类型的版本控制:Git 和 Team Foundation 版本控制 (TFVC)。
我应该使用哪个版本控制系统?
Git 是新项目的默认版本控制提供程序。 应在项目中使用 Git 进行版本控制,并开始将现有的 TFVC 项目移至 Git。 TFVC 被视为功能完整。 Azure DevOps 将保持与 TFVC 的兼容性,但 Git 将获得所有未来投资。
可以在同一项目中将 TFVC 存储库与 Git 配合使用,由此如果需要集中式版本控制,以后添加 TFVC 很容易。 要为现有项目设置新的存储库类型,请使用这些说明。
Git(分布式)
Git 是一个分布式版本控制系统。 每个开发人员在其开发计算机上拥有源存储库的副本。 开发人员可在其开发计算机上提交每个变更集并执行版本控制操作(如历史记录和比较),无需网络连接。 分支是轻量型的。 当需要切换上下文时,你可以创建一个私有本地分支。 你可以从一个分支快速切换到另一个分支,以便在你的基本代码的不同变体之间变换。 随后,你可以合并、发布或处置分支。
注意
Visual Studio、Azure DevOps Services 和 Azure DevOps Server 中的 Git 是标准 Git。 可以将 Visual Studio 与第三方 Git 服务结合使用,也可以将第三方 Git 客户端与 Azure DevOps Server 结合使用。
有关详细信息,请参阅 Git 和 Azure Repos。
TFVC(集中式)
Team Foundation 版本控制 (TFVC) 是一个集中式版本控制系统。 通常,团队成员的开发计算机上的每个文件只有一个版本。 历史数据仅在服务器上维护。 分支是基于路径的,并且在服务器上创建。
TFVC 有两种工作流模型:
服务器工作区 - 在进行更改之前,团队成员公开签出文件。 大多数操作都要求开发人员连接到服务器。 该系统有助于锁定工作流。 采用这种工作方式的其他系统包括 Visual Source Safe、Perforce 和 CVS。 使用服务器工作区,可以纵向扩展为非常大的代码库,其每个分支有数百万个文件并包含大型二进制文件。
本地工作区 - 每个团队成员都具有最新版本的代码库副本,可按需脱机工作。 开发人员签入其更改并在必要时解决冲突。 采用这种工作方式的另一个系统是 Subversion。
有关详细信息,请参阅什么是Team Foundation 版本控制?
从 TFVC 移到 Git
如果有现有的 TFVC 存储库,可以使用 git-tfs 工具将其迁移到 Git 存储库。 借助该工具,只需几个命令即可将 TFVC 存储库迁移到 Git 存储库。
Git 和 TFVC 的功能
下表总结了 TFVC 和 Git 如何支持版本控制的主要功能。
功能
TFVC
Git
更改
团队成员可以在其开发计算机上并行更改文件。 在创建变更集时将其上传(签入)到服务器。 你可以随时上载更改。 但可能会因冲突而中断。
可以在签入变更集后更改其注释。 你可以将变更集链接到工作项,并将变更集与已完成的生成关联。
团队成员可以在其开发计算机上并行更改文件。 你可以单独在开发计算机上创建提交而不必将它们提供给团队。 准备就绪后,必须先拉取最新提交,然后再将提交上传(推送)到服务器。 拉取时,你可能被冲突中断。
你可以修改最新本地提交。 无法更改较旧的提交。 你可以将提交链接到工作项,并将提交与已完成的生成关联。
你可以从命令提示符修改和合并本地提交。
分支创建
基于路径的分支主要用作长期存在的构造来隔离功能团队和发布之间的更改的风险。 团队成员通常会为其处理的每个分支设置不同的工作区。
每个分支中的更改彼此独立,因此不必在从一个分支切换到另一个分支之前签入它们。 同级分支之间的合并要求无基准合并。
你可以获取分支结构的可视化效果和你的变更集的合并位置。
分支是轻量型的,并且与路径无关。 很多开发人员会为其编码的每个新功能创建一个分支,有时候每天创建一个。 你可以从一个分支快速切换到另一个分支,以便在你的基本代码的不同变体之间变换。 可以创建仅存在于开发计算机上的分支,并在准备就绪时共享它们。
必须在切换分支前提交、分支、储藏或撤消更改。 合并很简单,并且与分支所基于的提交无关。
你可以比较分支来了解哪些提交存在于哪些分支上。
冲突解决
获取、签入、合并或取消搁置时,可能必须解决冲突。 你可以在 Visual Studio 中解决所有类型的冲突。
在拉取或合并时,你可能必须解决冲突。 可以在 Visual Studio 中或从命令提示符解决内容冲突。
文件存储
你可以签入大型二进制文件。 你可能还想结合使用 NuGet 或使用它作为替代方法。
可以像签入常规文件一样签入小型二进制文件。 处理大型二进制文件时,使用 Git-LFS 将大型二进制文件存储在 Azure Repos 中。
历史记录
不会在客户端开发计算机上复制文件历史记录,因此只有连接到服务器时才能查看它们。 可以在 Visual Studio 和 Web 门户中查看历史记录。 你可以批注文件以了解更改行的人员以及更改发生的时间。
客户端开发计算机上复制了文件历史记录,即使未连接到服务器也能查看它们。 你可以在 Visual Studio 和 Web 门户网站中查看历史记录。 你可以批注文件以了解更改行的人员以及更改发生的时间。
标记文件
可以从 Visual Studio 或命令提示符为一个或多个文件的某个版本应用标签。 每个文件都可以为不同的版本应用标签。
你可以从命令提示符将标记应用于各个提交。 在 Visual Studio 历史记录窗口中查看标记。
回滚更改
可以还原提交。
缩放
你可以快速开始小型项目。 可以纵向扩展到特大型项目,但必须事先计划模块化基本代码。 可以在一个项目中创建多个存储库。
服务器
下表总结了每个版本控制系统支持的服务器的可用功能。
功能
TFVC
Git
服务器
Azure DevOps Services、Azure DevOps Server
Azure DevOps Services、Azure DevOps Server 和 Git 第三方服务
警报
团队成员可以在签入发生时接收电子邮件警报。
团队成员可以在提交推送到服务器时接收电子邮件警报。
可审核性
可以确定推送提交的用户。 (所有人都可以将任何标识声明为作者或提交者。)可以使用历史记录、比较和批注来确定更改时间和更改的内容。
生成(由 TFBuild 自动执行)
可以使用所有 TFBuild 功能在项目集合中生成所需内容的任意组合。
可以使用大多数 TFBuild 功能一次生成一个项目,一次生成一个或多个存储库。
代码评审
请参阅 Devops 开发人员的一天:暂停工作、修复 bug 和执行代码评审。 对于更轻量级讨论,还可以在 Web 门户中评论和发送有关变更集的电子邮件。
请参阅评审拉取请求。 对于更轻量级的讨论,还可以在 Web 门户中对提交进行注释和发送有关提交的电子邮件。
文件
每个项目都在单个根路径(例如:$/FabrikamTFVC)下包含所有文件。 可以在文件级别应用权限。 可以锁定文件。
可以在 Web 门户上浏览文件,也可使用 Visual Studio 中的源代码管理器进行浏览。
项目仅存在于一台服务器上。
每个项目可以包含一个或多个 Git 存储库,每个 Git 存储库可以包含一个或多个分支。 可以应用的权限最高可细化到存储库或分支。 无法锁定文件。
你可以在 Web 门户网站上浏览文件。
可以将提交推送到多个远程存储库,例如推送到项目存储库和托管在 Azure 上的网站。
质量门
可以使用持续集成 (CI) 生成、封闭签入生成以及签入策略。
可以通过分支策略使用 CI 生成和封闭签入生成。
Client
下表总结了客户端支持的可用功能,具体取决于选择的版本控制系统。
功能
TFVC
Git
客户端软件
Visual Studio
Visual Studio、Visual Studio Code、Eclipse 和其他第三方工具
文件
可以使用 Windows 文件资源管理器或命令提示符浏览文件。
管理开发计算机上的工作
更改、提交和分支页。
挂起工作
可以从“我的工作”页暂停工作,也可以在“挂起的更改”页上搁置更改。 有关详细信息,请参阅暂停工作并管理搁置集。
可以从 Visual Studio 或命令提示符创建分支,或从命令提示符储藏分支。
Visual Studio 兼容性
可以使用所有支持的 Visual Studio 版本。
可以使用所有支持的 Visual Studio 版本。
Web 门户
可以浏览代码库(包括分支)、查看历史记录、对变更集和搁置集进行批注和注释,以及执行其他任务(例如将代码库的选定部分临时下载为 .zip 文件)。
可以浏览代码库、查看历史记录、比较分支、对提交进行批注和注释,以及执行其他任务(例如将代码库的选定部分临时下载为 .zip 文件)。
迁移
要了解如何从 TFVC 迁移到 Git,请参阅从 TFVC 迁移到 Git。