[Azure Devops] 使用 Azure Repos 管理代码

1. 什么是 Azure Repos
Azure Repos 是一组版本控制工具,可用于管理代码。无论您的软件项目是大型项目还是小型项目,都应尽快使用版本控制。
版本控制系统是可帮助您跟踪随时间变化对代码所做的更改的软件。在编辑代码时,您告诉版本控制系统对文件进行快照。版本控制系统会永久保存该快照,以便以后需要时可以重新调用它。使用版本控制来保存您的工作并协调整个团队中的代码更改。
即使您只是一个开发人员,版本控制也可以帮助您在修复错误和开发新功能时保持井井有条。版本控制保留了您的开发历史,因此您可以轻松查看甚至回滚到任何版本的代码。
Azure Repos提供两种类型的版本控制:
- Git:分布式版本控制
- Team Foundation版本控制(TFVC):集中式版本控制
上面是官方文档的内容。虽然给出了两个选项,但现在大部分人都对 Git 比较熟悉,我也假设读者对 Git 有一定了解而无需多做解释。
2. 创建项目

在上一篇文章里我已经创建了一个项目并且选择了 Git 作为版本控制方式,在 Azure Devops 左边菜单选中 “Files” 进入文件页面,首先看到的就是上图这样的画面。可以看到除了刚创建的存储库,还可以添加新的存储库或导入其它存储库。这篇文章我将配合最新版本的 Visual Studio 16.9 从头开始创建项目并介绍 Azure Repos 的基本功能。
因为现有的视频和教程几乎都是围绕 Azure 和 Asp.net 讲解 Azure Repos 和 Pipelines,所以我特地选择 WPF 应用来实现同样的功能。
首先复制下面这个链接,然后打开 Visual Studio,随便创建一个 WPF .Net Framework 项目。

创建项目后在 Visual Studio 右下角找到”添加到源代码管理器“按钮,选择”Git“。

在弹出的创建Git存储库对话框选择”现有远程“,在 Remote URL 中粘贴刚刚复制的链接。点击创建并推送。

完成后,Visual Studio 右下角应该是这个样子,代表现在是 wpf 存储库的 master 分支。

刷新 Files 页面,可以看到刚刚创建的项目已经上传到 master 分支了。

3. 使用策略保护分支
创建好分支后,代码就已经在团队里共享。通常来说团队中的人都需要修改代码,但将代码提交到 master 分之前需要先通过 CodeReview。接下来将介绍如何在 Azure Repos 中通过 Branch Policies(分治策略)保护代码安全性。
在左侧菜单中选中 Branches,进入 Branches 页面后可以看到刚刚创建的 master 分支。点击右侧的”More… “按钮,然后选择”Brance policies“进入 master 分支的分支策略页面。

如下图所示,在 Branch Policies,打开”Require a minimum number of reviewers“选项,将”Minimum number of reviewers“这是为 1,打开”When new changes are pushed:“并选中”Reset all code reviewer votes “。

这样设置完以后,master 分支就不能删除,并且只能通过 Pull Request 修改;最少需要一个 Code reviewer;PR 每次发生更改都重置代码审阅者的投票。
下面还可以选中”Check for linked work items“,避免无缘无故的代码提交。
”Build Validation“涉及到 Pipelines 的内容,下一篇再解释。
最后添加一些 Code reviewer,Optional 标识可选的,即如果有多个 Code reviewer,只需要其中一个通过就可以签入到 master 分支。最好取消”Allow requestors to approve their own changes“。

4. 通过 Pull Request 修改代码
假设项目里有一个”添加单元测试“的 PBI 及它的 Task,现在我需要添加单元测试并修改一些代码后提交到 master 分支。但之前修改了分支策略后就不可以直接修改代码,而需要通过 Pull Request。

首先我需要新建分支,然后随便更新些代码。然后在 Visual Studio 右下角点击这个按钮。

在 ”Git 更改“ 页面输入提交的消息,并且输入 #1 #2,关联 ID 号为 1 和 2 的工作项。然后选中”全部提交并推送“。

然后回到 Azure Devops,在左侧菜单选中 Pull requests,在 Pull requests 页面可以看到系统贴心地提示我要不要创建一个 Pull request,从了它,点击”Create a pull request“。

在创建 Pull request 的页面可以看到这个 PR 有 1 个提交并修改了 9 个文件,系统已经贴心帮我填好 Title,并关联了两个工作项。点击”Create“创建完成 Pull request 的创建。

顺便一提,如果标题有”[WIP]“,右下角的按钮默认选中”创建为草稿“。
Pull request 创建后,在 PR 的详细页面可以看到它的内容、是否冲突、关联的工作项、历史记录等。这时候只需要等待一个 code reviewer 审核通过,通过后右上角的蓝色按钮会变成”Complete“,点击即可完成这个 PR 并将代码合并到 master 分支。

也可以点击右上角的”Set auto-complete“按钮,设置为当审核通过后马上自动完成。可以选中”Complete associated work items after merging“,这样 Pull request 完成后管理的 work item (在这里只有 Task 会自动完成,PBI 还是需要人手操作)也会被自动完成。

这时候 reviewer 会收到通知要做 review,然后他就可以来看看这个 Pull request 做了些什么,没问题的话他就可以 Approve 这个 Pull request。

5. 最后
上面就是 Azure Repos 的基本使用方式。对属性 Github 的开发者来说可能很容易就能上手。更多的使用方式请参考微软提供的文档:
[Azure Devops] 使用 Azure Repos 管理代码的更多相关文章
- Azure DevOps Pipelines执行RobotFramework自动化代码
一.Azure DevOps介绍 1.什么是 Azure DevOps? Azure DevOps其实是VSTS(Visual Studio Team Service)更名后的名字.而VSTS是TFS ...
- Azure DevOps Server (TFS)中代码文件换行问题解决方案(Git)
之前写过一篇博客"探索TFS Git 库文件换行(CRLF)的处理方式",主要是针对TFVC代码库的. 下面这篇文章说明如何在TFS的Git库中处理代码换行的问题. 概述 在Azu ...
- [Azure Devops] 使用 Azure Boards 管理工作
1. 什么是 Azure Boards 通过 Azure Boards 网络服务,团队可以管理其软件项目.它提供了丰富的功能,包括 Scrum 和看板的本地支持.可定制的仪表板和集成报告.这些工具可以 ...
- [Azure Devops] 使用 Azure Pipelines 实现 CI
1. 什么是 Azure Pipelines Azure Pipelines 会自动构建和测试代码项目,以将其提供给其他人.它适用于任何语言或项目类型.Azure Pipelines 结合了持续集成 ...
- Azure DevOps to Azure AppServices
Azure DevOps is a complete solution for software development, from planning to building to deploymen ...
- 如何将Azure DevOps中的代码发布到Azure App Service中
标题:如何将Azure DevOps中的代码发布到Azure App Service中 作者:Lamond Lu 背景 最近做了几个项目一直在用Azure DevOps和Azure App Servi ...
- Github和Azure DevOps的代码同步
[前言]Github和Azure DevOps都提供了Git代码库功能,那么有没有办法将两边的代码库进行同步呢,答案是肯定的.这里的操作我都是用Azure DevOps的Pipelines功能来完成的 ...
- Azure DevOps 介绍
伴随着敏捷的遍地开花,如今各个开发团队越来越希望可以实现敏捷在自己团队内的落地,但是往往单纯的依赖人力难以实现敏捷的各个环节的管理, 大家开始渐渐的意识到,为了按时交付软件产品和服务,开发和运营工作必 ...
- Azure DevOps Server:Git权限设置
Azure DevOps Server 权限概述 在Azure DevOps Server (之前名称为TFS)中,权限是一个比较复杂的概念.从权限层级上来说,包括服务器级别.团队项目集合级别.团队项 ...
随机推荐
- js 深入原理讲解系列-currying function
js 深入原理讲解系列-currying function 能看懂这一题你就掌握了 js 科里函数的核心原理 不要专业的术语,说人话,讲明白! Q: 实现 sum 函数使得以下表达式的值正确 cons ...
- VS Code Extension
VS Code Extension https://code.visualstudio.com/api/get-started/your-first-extension xgqfrms 2012-20 ...
- 微信公众号 & 付费阅读
微信公众号 & 付费阅读 付费功能 付费阅读 付费功能使用说明 1.付费功能介绍 开通了付费功能的公众号,运营者可以在编辑时对原创文章的部分或全部内容设置收费.对于付费图文,用户未付费前可免费 ...
- calendar merge date
calendar merge date componentDidMount () { const { monthDays, // monthDates, } = this.props; const d ...
- SVG viewBox & coordinate system
SVG viewBox & coordinate system https://codepen.io/xgqfrms/pen/abOOrjp <html> <body> ...
- nodejs 创建tcp/udp服务器和客户端
TCP server // https://nodejs.org/api/net.html const net = require("net"); // https://nodej ...
- [CentOS7]Windows下VirtualBox虚拟机磁盘扩容
目录 虚拟系统磁盘文件扩充 修改分区 LVM更新 扩容文件系统 参考资料 虚拟系统磁盘文件扩充 命令操作 命令行运行VBoxManage,modifyhd扩容需要文件格式为.vdi,如为.vmdk,需 ...
- Gym100923H Por Costel and the Match
题目链接:http://codeforces.com/gym/100923/problem/H 分析:并查集,用enemy储存x的敌人,用weight储存权重决定根节点 需用scanf和puts输入输 ...
- WPF 基础 - 资源
为了避免丢失和损坏,编译器允许我们把外部文件编译进程序主体.成为程序主体不可分割的一部分,这就是传统意义上的程序资源,即二进制资源: WPF 的四个等级资源: 数据库里的数据 (仓库) 资源文件 (行 ...
- java基础:变量、常量与作用域
变量就是可以变化的量,每个变量都必须声明其类型,Java 变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域.作用域 类变量 实例变量 局部变量常量初始化后不能在改变值,不会变动的值,它 ...