概述
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兼容的客户端。
先决条件
-
安装了C#扩展插件的Visual Studio Code。
-
适用于Windows的Git2.21. 0或更高版本。
-
本实验要求您从先决条件说明完成任务1。
练习1:配置实验室环境
任务1:配置Visual Studio代码
-
打开Visual Studio Code。在此任务中,您将配置Git凭据帮助程序以安全地存储用于与Azure DevOps通信的Git凭据。如果您已配置凭据帮助程序和Git身份认证,则可以跳到下一个任务。
-
从主菜单中,选择Terminal | New Terminal打开终端窗口。
-
执行以下命令配置凭证帮助程序。
git config --global credential.helper wincred
-
以下命令将为Git提交配置您的用户名和电子邮件。用您首选的用户名和电子邮件替换参数并执行它们。
git config --global user.name "John Doe" git config --global user.email johndoe@example.com
练习2:克隆现有存储库
任务1:克隆现有存储库
-
在浏览器选项卡中,导航到Azure DevOps上的团队项目。
-
获取Git仓库的本地副本称为“克隆”。每个主流开发工具都支持此功能,并且能够连接到Azure Repos以下载最新的源代码。导航到Repos中心。
-
单击克隆。
-
单击repo clone URL旁边的Copy to clipboard按钮。您可以将此URL插入任何与Git兼容的工具,以获取代码库的副本。
-
打开Visual Studio Code的实例。
-
按 Ctrl + Shift + P 显示命令面板。Command Palette提供了一种简单方便的方法来访问各种任务,包括第三方扩展提供的任务。
-
执行Git:Clone命令。键入Git可能有助于将其列入候选名单。
-
粘贴到您的仓库的URL,然后按输入。
-
选择要将repo克隆到的本地路径。
-
出现提示时,登录Azure DevOps帐户。
-
克隆完成后,单击Open Repository。您可以忽略有关打开项目的任何警告。解决方案可能不处于可构建状态,但这没关系,因为我们将专注于使用Git并且不需要构建项目本身。
任务2:为Visual Studio代码安装Azure Repos扩展
-
Azure Repos扩展可以方便地访问Azure DevOps的许多功能。在Extensions选项卡中,搜索Azure Repos并单击Install进行安装。
-
扩展安装完成后,单击Reload。如果此选项不可用,请重新打开Visual Studio Code。
-
按Ctrl + Shift + P显示命令面板。
-
搜索”团队“以查看现在可用于使用Azure Repos的所有新命令。选择团队:登录。
-
选择验证并自动获取访问令牌。请注意,如果遵循手动路径,您也可以提供先前创建的令牌。
-
复制提供的令牌并按输入以启动浏览器选项卡。
-
将代码粘贴到登录框中,然后单击继续。
-
选择与Azure DevOps帐户关联的Microsoft帐户。
-
完成此过程后,关闭浏览器选项卡。
练习3:使用提交保存工作
当您对文件进行更改时,Git将在本地存储库中记录更改。您可以通过暂存更改来选择要提交的更改。提交总是针对您当地的Git存储库,因此您不必担心提交是否完美或是否可以与他人共享。您可以在继续随着工作继续进行更多次的提交,并在准备好共享时再将commits推送给其他人。
一次提交总包含哪些内容?
Git提交包括以下内容:
-
本次提交中更改的文件。Git会在提交中保留repo中所有文件更改的内容。这使它保持快速并允许智能合并。
-
对父提交的引用。Git使用这些引用来管理您的代码历史记录。
-
提交的消息。您在创建提交时将此消息提供给Git。让提交的信息具有描述性是个好方法,但要尽量抓住重点。
任务1:提交更改
-
在Explorer选项卡中,打开/PartsUnlimited-aspnet45/src/PartsUnlimitedWebsite/Models/CartItem.cs。
-
在文件中添加注释。评论是什么并不重要,因为目标只是对文件进行修改。按Ctrl + S保存文件。
-
选择Source Control选项卡以查看解决方案的一个更改。
-
输入我的提交的提交消息,然后按Ctrl + Enter以在本地提交。
-
如果询问您是否要自动暂存更改并直接提交更改,请单击始终。我们将在实验室后期讨论 staging(暂存)。
-
单击左下角同步更改(Synchronize changes)的图标,将本地的提交与服务器进行同步。如果提示,请确认同步。
任务2:审核提交
-
切换到Azure DevOps浏览器选项卡。您可以在Repos中心的Commits选项卡下查看Azure DevOps上的最新提交。
最近的承诺应该是最重要的。
任务3:暂存更改
暂存更改允许您有选择性地将某些文件添加到commit中。
-
返回Visual Studio Code。
-
通过编辑您之前创建的注释并保存文件来更新openCartItem.cs类。
-
打开Category.cs。
-
向Category.cs添加新注释,这样就会有两个带有更改的文件。保存文件。
-
在Source Control选项卡中,单击CartItem.cs的Stage Changes按钮。
-
这将把CartItem.cs文件放到暂存阶段,准备提交,注意,没有Category.cs。
-
输入提交信息添加评论。从More Actions下拉列表中,选择Commit Staged。
-
单击Synchronize Changes按钮以将提交的更改与服务器同步。请注意,由于仅提交了处于暂存阶段的文件,因此其他更改的文件仍在本地处于修改状态。
练习4:回顾历史
Git的每个提交都会保存上级引用,通过这个引用信息来管理开发过程中的历史记录。通过查找提交的历史记信息,来查找和比较本地当前版本的差异.
Git的 Branches and Merges 功能通过拉取请求(pull requests)来实现, 这意味着开发过程中的提交不需要按照线性方式(按照时间或先后顺序)来完成。当您使用历史记录比较文件的版本时,请考虑两次提交之间的文件更改,而不是两个时间点之间的文件更改。主分支中文件的最近更改可能来自两周前在功能分支中的提交,只是在昨天才合并。
任务1:比较文件
-
在Source Control选项卡中,选择Category.cs。
-
打开比较视图,以便您轻松找到所做的更改。在这种情况下,它只是一个评论。
-
按Ctrl | Shift + P打开命令面板。
-
开始输入团队并选择团队:查看历史记录。这是Azure Repos扩展的一项功能,可以在新的浏览器选项卡中轻松跳转到此文件的历史记录。
-
注意Category.cs的历史。关闭新创建的选项卡,这将返回到之前的提交选项卡。
-
在提交视图中向下滚动以找到一些源分支和合并。这些提供了一种方便的方法来可视化何时以及如何对源进行更改。
-
从Merged PR 27的下拉列表中,选择浏览文件。
-
在当前视图下,可以基于当前的commit导航到变更的源文件,并且可以查看和下载这些文件。
练习5:使用分支
您可以从Web上的Branches视图管理Azure DevOps Git仓库中的代码。您还可以自定义视图以跟踪您最关心的分支,以便您可以随时了解团队所做的更改。
对某个分支的提交更改不会影响到其他分支,并且您可以将自己的分支共享给其他人,而无需将合并到主分支中。您还可以创建新分支,通过分支的方式将正在开发的feature或修复中的bug与主分支或其它分支进行隔离。由于分支是轻量级的,因此分支之间的切换是快速和容易的。在使用分支时,Git不会创建源文件的多个副本,它会使用存储库中的历史信息来创建分支。在管理feature和bug fix的时候,您的Git工作流应该是创建和使用分支。Git工作流的其余部分,例如共享代码和使用pull request 进行code review,都通过分支进行。因为Git很容易切换分支,使得通过分支来隔离工作非常容易实现
任务1:在本地存储库中创建一个新分支
-
返回Visual Studio Code。
-
单击左下角的master分支。
-
选择从…创建新分支。
-
为新分支输入名称dev,然后按enter。
-
选择master作为参考分支。
查看左下角的分支名称,您现在已经在dev分支上了。
任务2:使用分支
Git会跟踪您正在处理的分支,并确保在签出分支时您的文件与分支上的最新提交相匹配。分支允许您同时在同一本地Git存储库中使用多个版本的源代码。您可以使用VSCode发布,签出和删除分支。
-
单击分支旁边的发布更改按钮。
-
从Azure DevOps浏览器选项卡中,选择分支。
你应该看到新推出的dev分支。单击删除分支按钮将其删除。确认删除。
-
返回Visual Studio Code。
-
单击dev分支。
注意,列出了两个dev分支。本地(dev)分支在那里,因为删除服务器分支时不会删除它。服务器(origin/dev)在那里,因为它尚未被排除。选择master分支以查看它。
-
按Ctrl + Shift + P打开命令面板。
-
开始键入Git:Delete并在可见时选择Git:Delete Branch。
-
只有一个本地分支要删除,因此请选择它。
-
单击master分支。
-
请注意,本地dev分支已消失,但远程origin/dev仍在显示。
-
按Ctrl + Shift + P打开命令面板。
-
输入Git:Fetch,找到并选择Git:Fetch(Prune)。此命令将更新本地快照中的远程仓库origin的信息,并删除不再存在的分支。
-
通过选择屏幕底部的Output窗口,您可以详细地查看实际执行了哪些git操作。
-
请注意,如果在输出控制台中没有看到Git日志,则可能需要选择Git作为源。
-
单击master分支。
-
origin/dev分支不再出现在列表中。
练习6:从Azure DevOps 管理分支
除了Visual Studio Code中提供的所有功能外,您还可以从Azure DevOps门户管理您的repo分支。
任务1:创建新分支
-
切换到Azure DevOps浏览器选项卡。
-
导航到Repos | Branches。单击新分支。
-
为新分支输入名称release。使用工作项链接下拉列表选择一个或多个工作项以链接到此新分支。单击创建分支以创建它。
-
创建分支后,它将在列表中可用。
-
返回Visual Studio Code。
-
按Ctrl + Shift + P打开命令面板。
-
开始键入Git:Fetch并在可见时选择Git:Fetch。此命令将更新本地快照中的原始分支。
-
单击master分支。
-
选择origin/release。这将创建一个名为release的新本地分支并将其检出。
任务2:删除分支
-
返回Azure DevOps并单击将鼠标悬停在release分支上时出现的Delete按钮以将其删除。
但是,也许我们应该把它保留一段时间。从其上下文菜单中,选择Restore branch。
任务3:锁定分支
锁定用于防止新的更改造成冲突,或将分支置为只读状态。如果只想确保分支中的更改在合并之前进行审阅,请使用分支策略和拉取请求,而不是锁定整个分支。
锁定不会阻止Clone Git存储库,也不会阻止将分支中的更新获取到本地repo中。与您的团队分享锁定分支的原因,并确保您的团队知道在解锁后如何处理分支。
-
从master上下文菜单中,选择Lock。
这个分支现在已被锁定。
-
现在使用相同的过程解锁分支。
任务4:标记版本
-
虽然看起来可能不多,但产品团队已经确定该版本的网站正是v1. 1所需要的。要将其标记为这样,请导航到Tags选项卡。
-
单击创建标签。
-
输入名称”v1. 1“和”Great release!“。单击创建。
-
您现在已在此版本中标记了该项目。您可以出于各种原因标记提交,Azure DevOps可以灵活地编辑和删除它们,以及管理它们的权限。
练习7:管理存储库
您可以在团队项目中创建Git repos来管理项目的源代码。每个Git仓库都有自己的一组权限和分支,以将自己与项目中的其他工作隔离开来。
任务1:从Azure DevOps创建一个新的repo
-
从项目Add下拉列表中,选择New repository。
-
将存储库名称设置为New Repo。请注意,您还可以选择创建名为README.md的文件。这将是有人在浏览器中导航到repo根目录时呈现的默认markdown文件。此外,您可以使用 .gitignore文件预配置存储库。此文件用于配置从源代码管理中忽略的文件。根据您正在创建的项目类型,有多个可用模板。单击创建。
仓库已经创建好了。您现在可以使用Visual Studio或您选择的工具克隆它。
任务2:删除并重命名Git repos
-
有时您需要重命名或删除仓库,这同样容易。打开项目设置。
-
在Repos下选择Repositories。
-
从New Repo上下文菜单中,选择Delete repository。或者,您可以在此处重命名。
-
输入仓库名称”New Repo“,确认后单击删除。