概述

Azure DevOps支持两种类型的版本控制,即Git和Team Foundation版本控制(TFVC)。以下是两个版本控制系统的快速概述:

  • Team Foundation版本控制(TFVC):TFVC是一个集中版本控制系统。通常,团队成员的dev计算机上只有每个文件的一个版本。历史数据仅在服务器上维护。分支是基于路径的,并在服务器上创建。

  • Git:Git是一个分布式版本控制系统。Git存储库可以在本地生存(例如在开发人员的机器上)。每个开发人员都在其开发计算机上拥有源存储库的副本。开发人员可以在其开发计算机上提交每组更改,并执行版本控制操作,例如历史记录和比较,而无需网络连接。

Git是新项目的默认版本控制提供程序。您应该在项目中使用Git进行版本控制,除非您特别需要TFVC中的集中版本控制功能。

在本实验中,您将学习如何建立本地Git存储库,该存储库可以轻松地与Azure DevOps中的集中式Git存储库同步。此外,您将了解Git分支和合并支持。您将使用Visual Studio代码,但是相同的过程适用于与Azure DevOps一起使用任何与Git兼容的客户端。

先决条件

练习1:配置实验室环境

任务1:配置Visual Studio代码

  1. 打开Visual Studio Code。在此任务中,您将配置Git凭据帮助程序以安全地存储用于与Azure DevOps通信的Git凭据。如果您已配置凭据帮助程序和Git身份认证,则可以跳到下一个任务。

  2. 从主菜单中,选择Terminal | New Terminal打开终端窗口。

  3. 执行以下命令配置凭证帮助程序。

     git config --global credential.helper wincred
    
  4. 以下命令将为Git提交配置您的用户名和电子邮件。用您首选的用户名和电子邮件替换参数并执行它们。

     git config --global user.name "John Doe"
     git config --global user.email johndoe@example.com
    

练习2:克隆现有存储库

任务1:克隆现有存储库

  1. 在浏览器选项卡中,导航到Azure DevOps上的团队项目。

  2. 获取Git仓库的本地副本称为“克隆”。每个主流开发工具都支持此功能,并且能够连接到Azure Repos以下载最新的源代码。导航到Repos中心。

  3. 单击克隆

  4. 单击repo clone URL旁边的Copy to clipboard按钮。您可以将此URL插入任何与Git兼容的工具,以获取代码库的副本。

  5. 打开Visual Studio Code的实例。

  6. Ctrl + Shift + P 显示命令面板。Command Palette提供了一种简单方便的方法来访问各种任务,包括第三方扩展提供的任务。

  7. 执行Git:Clone命令。键入Git可能有助于将其列入候选名单。

  8. 粘贴到您的仓库的URL,然后按输入

  9. 选择要将repo克隆到的本地路径。

  10. 出现提示时,登录Azure DevOps帐户。

  11. 克隆完成后,单击Open Repository。您可以忽略有关打开项目的任何警告。解决方案可能不处于可构建状态,但这没关系,因为我们将专注于使用Git并且不需要构建项目本身。

任务2:为Visual Studio代码安装Azure Repos扩展

  1. Azure Repos扩展可以方便地访问Azure DevOps的许多功能。在Extensions选项卡中,搜索Azure Repos并单击Install进行安装。

  2. 扩展安装完成后,单击Reload。如果此选项不可用,请重新打开Visual Studio Code

  3. Ctrl + Shift + P显示命令面板

  4. 搜索”团队“以查看现在可用于使用Azure Repos的所有新命令。选择团队:登录

  5. 选择验证并自动获取访问令牌。请注意,如果遵循手动路径,您也可以提供先前创建的令牌。

  6. 复制提供的令牌并按输入以启动浏览器选项卡。

  7. 将代码粘贴到登录框中,然后单击继续

  8. 选择与Azure DevOps帐户关联的Microsoft帐户。

  9. 完成此过程后,关闭浏览器选项卡。

练习3:使用提交保存工作

当您对文件进行更改时,Git将在本地存储库中记录更改。您可以通过暂存更改来选择要提交的更改。提交总是针对您当地的Git存储库,因此您不必担心提交是否完美或是否可以与他人共享。您可以在继续随着工作继续进行更多次的提交,并在准备好共享时再将commits推送给其他人。

一次提交总包含哪些内容?

Git提交包括以下内容:

  • 本次提交中更改的文件。Git会在提交中保留repo中所有文件更改的内容。这使它保持快速并允许智能合并。

  • 对父提交的引用。Git使用这些引用来管理您的代码历史记录。

  • 提交的消息。您在创建提交时将此消息提供给Git。让提交的信息具有描述性是个好方法,但要尽量抓住重点。

任务1:提交更改

  1. Explorer选项卡中,打开/PartsUnlimited-aspnet45/src/PartsUnlimitedWebsite/Models/CartItem.cs

  2. 在文件中添加注释。评论是什么并不重要,因为目标只是对文件进行修改。按Ctrl + S保存文件。

  3. 选择Source Control选项卡以查看解决方案的一个更改。

  4. 输入我的提交的提交消息,然后按Ctrl + Enter以在本地提交。

  5. 如果询问您是否要自动暂存更改并直接提交更改,请单击始终。我们将在实验室后期讨论 staging(暂存)

  6. 单击左下角同步更改(Synchronize changes)的图标,将本地的提交与服务器进行同步。如果提示,请确认同步。

任务2:审核提交

  1. 切换到Azure DevOps浏览器选项卡。您可以在Repos中心的Commits选项卡下查看Azure DevOps上的最新提交。

    最近的承诺应该是最重要的。

任务3:暂存更改

暂存更改允许您有选择性地将某些文件添加到commit中。

  1. 返回Visual Studio Code

  2. 通过编辑您之前创建的注释并保存文件来更新openCartItem.cs类。

  3. 打开Category.cs

  4. Category.cs添加新注释,这样就会有两个带有更改的文件。保存文件。

  5. Source Control选项卡中,单击CartItem.csStage Changes按钮。

  6. 这将把CartItem.cs文件放到暂存阶段,准备提交,注意,没有Category.cs

  7. 输入提交信息添加评论。从More Actions下拉列表中,选择Commit Staged

  8. 单击Synchronize Changes按钮以将提交的更改与服务器同步。请注意,由于仅提交了处于暂存阶段的文件,因此其他更改的文件仍在本地处于修改状态。

练习4:回顾历史

Git的每个提交都会保存上级引用,通过这个引用信息来管理开发过程中的历史记录。通过查找提交的历史记信息,来查找和比较本地当前版本的差异.

Git的 Branches and Merges 功能通过拉取请求(pull requests)来实现, 这意味着开发过程中的提交不需要按照线性方式(按照时间或先后顺序)来完成。当您使用历史记录比较文件的版本时,请考虑两次提交之间的文件更改,而不是两个时间点之间的文件更改。主分支中文件的最近更改可能来自两周前在功能分支中的提交,只是在昨天才合并。

任务1:比较文件

  1. Source Control选项卡中,选择Category.cs

  2. 打开比较视图,以便您轻松找到所做的更改。在这种情况下,它只是一个评论。

  3. Ctrl | Shift + P打开命令面板

  4. 开始输入团队并选择团队:查看历史记录。这是Azure Repos扩展的一项功能,可以在新的浏览器选项卡中轻松跳转到此文件的历史记录。

  5. 注意Category.cs的历史。关闭新创建的选项卡,这将返回到之前的提交选项卡。

  6. 提交视图中向下滚动以找到一些源分支和合并。这些提供了一种方便的方法来可视化何时以及如何对源进行更改。

  7. Merged PR 27的下拉列表中,选择浏览文件

  8. 在当前视图下,可以基于当前的commit导航到变更的源文件,并且可以查看和下载这些文件。

练习5:使用分支

您可以从Web上的Branches视图管理Azure DevOps Git仓库中的代码。您还可以自定义视图以跟踪您最关心的分支,以便您可以随时了解团队所做的更改。

对某个分支的提交更改不会影响到其他分支,并且您可以将自己的分支共享给其他人,而无需将合并到主分支中。您还可以创建新分支,通过分支的方式将正在开发的feature或修复中的bug与主分支或其它分支进行隔离。由于分支是轻量级的,因此分支之间的切换是快速和容易的。在使用分支时,Git不会创建源文件的多个副本,它会使用存储库中的历史信息来创建分支。在管理feature和bug fix的时候,您的Git工作流应该是创建和使用分支。Git工作流的其余部分,例如共享代码和使用pull request 进行code review,都通过分支进行。因为Git很容易切换分支,使得通过分支来隔离工作非常容易实现

任务1:在本地存储库中创建一个新分支

  1. 返回Visual Studio Code

  2. 单击左下角的master分支。

  3. 选择从…创建新分支

  4. 为新分支输入名称dev,然后按enter

  5. 选择master作为参考分支。

    查看左下角的分支名称,您现在已经在dev分支上了。

任务2:使用分支

Git会跟踪您正在处理的分支,并确保在签出分支时您的文件与分支上​​的最新提交相匹配。分支允许您同时在同一本地Git存储库中使用多个版本的源代码。您可以使用VSCode发布,签出和删除分支。

  1. 单击分支旁边的发布更改按钮。

  2. 从Azure DevOps浏览器选项卡中,选择分支

    你应该看到新推出的dev分支。单击删除分支按钮将其删除。确认删除。

  3. 返回Visual Studio Code

  4. 单击dev分支。

    注意,列出了两个dev分支。本地(dev)分支在那里,因为删除服务器分支时不会删除它。服务器(origin/dev)在那里,因为它尚未被排除。选择master分支以查看它。

  5. Ctrl + Shift + P打开命令面板

  6. 开始键入Git:Delete并在可见时选择Git:Delete Branch

  7. 只有一个本地分支要删除,因此请选择它。

  8. 单击master分支。

  9. 请注意,本地dev分支已消失,但远程origin/dev仍在显示。

  10. Ctrl + Shift + P打开命令面板

  11. 输入Git:Fetch,找到并选择Git:Fetch(Prune)。此命令将更新本地快照中的远程仓库origin的信息,并删除不再存在的分支。

  12. 通过选择屏幕底部的Output窗口,您可以详细地查看实际执行了哪些git操作。

  13. 请注意,如果在输出控制台中没有看到Git日志,则可能需要选择Git作为源。

  14. 单击master分支。

  15. origin/dev分支不再出现在列表中。

练习6:从Azure DevOps 管理分支

除了Visual Studio Code中提供的所有功能外,您还可以从Azure DevOps门户管理您的repo分支。

任务1:创建新分支

  1. 切换到Azure DevOps浏览器选项卡。

  2. 导航到Repos | Branches。单击新分支

  3. 为新分支输入名称release。使用工作项链接下拉列表选择一个或多个工作项以链接到此新分支。单击创建分支以创建它。

  4. 创建分支后,它将在列表中可用。

  5. 返回Visual Studio Code

  6. Ctrl + Shift + P打开命令面板

  7. 开始键入Git:Fetch并在可见时选择Git:Fetch。此命令将更新本地快照中的原始分支。

  8. 单击master分支。

  9. 选择origin/release。这将创建一个名为release的新本地分支并将其检出。

任务2:删除分支

  1. 返回Azure DevOps并单击将鼠标悬停在release分支上时出现的Delete按钮以将其删除。

    但是,也许我们应该把它保留一段时间。从其上下文菜单中,选择Restore branch

任务3:锁定分支

锁定用于防止新的更改造成冲突,或将分支置为只读状态。如果只想确保分支中的更改在合并之前进行审阅,请使用分支策略和拉取请求,而不是锁定整个分支。

锁定不会阻止Clone Git存储库,也不会阻止将分支中的更新获取到本地repo中。与您的团队分享锁定分支的原因,并确保您的团队知道在解锁后如何处理分支。

  1. master上下文菜单中,选择Lock

    这个分支现在已被锁定。

  2. 现在使用相同的过程解锁分支。

任务4:标记版本

  1. 虽然看起来可能不多,但产品团队已经确定该版本的网站正是v1. 1所需要的。要将其标记为这样,请导航到Tags选项卡。

  2. 单击创建标签

  3. 输入名称”v1. 1“和”Great release!“。单击创建

  4. 您现在已在此版本中标记了该项目。您可以出于各种原因标记提交,Azure DevOps可以灵活地编辑和删除它们,以及管理它们的权限。

练习7:管理存储库

您可以在团队项目中创建Git repos来管理项目的源代码。每个Git仓库都有自己的一组权限和分支,以将自己与项目中的其他工作隔离开来。

任务1:从Azure DevOps创建一个新的repo

  1. 从项目Add下拉列表中,选择New repository

  2. 存储库名称设置为New Repo。请注意,您还可以选择创建名为README.md的文件。这将是有人在浏览器中导航到repo根目录时呈现的默认markdown文件。此外,您可以使用 .gitignore文件预配置存储库。此文件用于配置从源代码管理中忽略的文件。根据您正在创建的项目类型,有多个可用模板。单击创建

    仓库已经创建好了。您现在可以使用Visual Studio或您选择的工具克隆它。

任务2:删除并重命名Git repos

  1. 有时您需要重命名或删除仓库,这同样容易。打开项目设置

  2. Repos下选择Repositories

  3. New Repo上下文菜单中,选择Delete repository。或者,您可以在此处重命名。

  4. 输入仓库名称”New Repo“,确认后单击删除