【低功耗架构开发系列】(二)不找SVN托管代码了,直接用Visual Studio Online
来源:互联网 发布:内存兼容性测试软件 编辑:程序博客网 时间:2024/05/21 22:53
使用SVN还是Git,这是个问题。笔者使用SVN多年,初到Git的时候非常不习惯,主要是Git是个分布式的概念,无中心化是他的重要思想之一,刚开始用起来总觉得相当别扭。随着工作逐渐转移到Git上面,也对Git的使用越来越清晰了。但转移到Git过程中的一个重要问题是团队的其他成员要跟着思路一起学习Git,而学习Git也是有成本的,如果操作出错,多多少少会影响工作输出,甚至一大片的工作需要重来。所以在开始一个项目的时候,笔者认为使用SVN还是Git,真的是一个问题。使用Git的好处在此不多说,但是还是回到【低功耗架构开发系列】的主要关注点——成本,这既包括软硬件投入的成本,也应该包括人员学习和试错的成本。
本文的背景是立足在多年使用SVN的团队的基础上,讲解笔者自己最后选择Visual Studio Online的过程与使用情况。
上面已经讲过了,Git使用需要团队学习成本,笔者需要先强调一下,这个成本不是不值得投入。我们先回顾一下上一篇文章 【低功耗架构开发系列】(一)云服务选型 ,在这系列文章里面我们假设是一个3个人的团队,其中两人是兼职的情况。那么既然是兼职为主,目的自然是拿钱干活,给的钱尽可能的少,出的活尽可能的又快又好。两个团队成员都从来没有使用过Git,那么要求使用Git的话,势必会增加时间成本和沟通成本,要知道兼职的人员彼此之间很可能是不在同个办公室办公,很难有“手把手教”的机会,兼职人员会遇到一定程度的上手困难之后,很有可能还会要求更多的价格。但是我们按照功能点付费是核心,那么这部分支出能省就省,毕竟说句不中听的,今天是A和B兼职,明天可能就是C和D兼职了,保证继续下一波的培训的投入成本低,也是架构师需要考虑的点之一。
那么选择了学习和使用成本偏低的SVN,下一步应该就是搭建SVN服务器了吧?Wait!等等,我们有没有内网服务器?对不在同一个工作空间的兼职人员,内网服务器的投入有没有作用?代码管理和版本控制系统是基础系统关键中的关键,假如这个挂了或者有什么事情导致数据损失,那就是公司或组织的固定资产流失,所以搭建SVN服务器是需要高度稳定性的。
上一篇文章笔者已经强调过,在中小型的起步项目中自己搭建系统的运维成本和运维水平是存在风险的,优先应该寻找云服务。而代码管理系统甚至比生产线系统还重要,因为即便是某项目某产品从生产线下线了,代码应该也需要继续保存(在组织需要延续下去的情况下),那么这个云服务的投入首先是要保证持续而稳定的。对于小型团队来说,这个预算也不得不计算。
我们首先是找SVN的托管,但是SVN的托管真的不多,更别说免费而且保证高SLA的,然后笔者想到了使用Microsoft Visual Studio Online,用来替代SVN。VS Online来源于以前的Team Foundation Server,Team Foundation Server来源于以前的Visual Source Safe,都是基于文件的集中式代码管理版本系统,从概念上与Git分布式不一样,从使用习惯上也就更接近SVN,当初笔者从Visual Source Safe到SVN,一天就熟练基本操作了。
VS Online不做介绍了,直接在http://www.visualstudio.com 可以看到。使用VS Online非常简单,只要你有Microsoft ID,微软的资源就几乎都能使用。就像买东西一样,我们先看看它的价格,能不能用得起再说。
注意,Visual Studio Team Service其实是“私有库”的概念,公有库就像GitHub一样,开源给几乎所有人访问,如果您不想开源,那么用到一定规模都可能要付费,当然了,自己搭建其实也是付费,而且还付出人力成本。
我们暂时不考虑规模变大的情况,有5个用户免费就可以了!这里说的用户,是代表有权力对代码签出修改并签入的。Visual Studio Online有一种用户类型叫做stakeholder的,因为Visual Studio Online不单单是一个代码管理版本控制系统,和Team Foundation Server一样,也是一个全方位的研发过程管理平台。StakeHolder通俗点讲就是不写代码的其他项目参与人员,主要是以观察了解开发团队的工作情况为主的一种角色,这种角色是可以无限个添加到Visual Studio Online的项目里面的。
Visual Studio Online虽然5个人以上就开始收费,但这个是以单个项目为单位的。意思是您在Visual Studio Online里面可以建立多个项目,每个项目都可以根据使用情况添加不同的4个用户(除了Owner以外)授权代码编辑,也可以作为Member加入到别人创建的Visual Studio Online项目里面。如果适当地把实际工作的项目分割成若干个Visual Studio Online并控制好授权,其实免费就够用了。而Visual Studio Online免费与收费的用户体验从代码管理上没有什么不一样(毕竟MSDN订阅者就是免费的嘛),收费用户只是多了一些项目持续集成的功能,即使是免费使用,高SLA也得以保证,这算是笔者作为“某某公司头号软狗”推荐的最高性价比的代码管理云服务了。
Visual Studio Online建立项目的过程非常简单,登录Visual Studio Online即有向导,而且微软自己也提供资料,包括在线创建和用Visual Studio创建,在这就不再讲解了。
使用Visual Studio Online不是为了自己一个人写代码的,所以我们马上进入到Web界面添加用户这一步。
点击左上角“Users",然后就进入了用户管理界面了。
注意这里笔者圈住了下面的”Recent Projects & team“,这个之后再来解释。
点击Add即可添加用户。下面的用户列表默认已经列出了项目的Owner作为用户,Access Level列的值是”Basic“,Basic类型的用户就是可以编辑代码的用户类型了,右边框住的User Summary一块的Free用户就是按照Basic用户来名额的,StakeHolder用户不在其中。
我们添加一个用户。
Sign-in address要输入用户的Microsoft ID;Access Level就是上面说的用户类型,笔者这边可选的有Basic、StakeHolder和Visual Studio/MSDN Subscriber,Subscriber的选项我们先不管,这里添加一个Basic的,点击Send Invitation。被邀请的用户登录Microsoft ID对应的邮箱查看邮件,点击”Join Now"即可。
如果上面”Recent Projects & team“这里面有代码的话,会发现只添加User,用这个用户登录Visual Studio并且连接Team Service还是看不到我们的项目,为什么呢?
这就是上面还没完成的部分,除了把用户添加到Visual Studio Online的项目里面,还要添加到具体的Project里面。一个Visual Studio Online的项目对应一个Collection,每个Collection有一个到多个的Team Project,每个Team Project都还是需要添加用户到对应的Team里面作为Team Member。
看一下Visual Studio连接Team Foundation Server的界面就能明白这个概念了。
我们再在Visual Studio Online上面点击上面的Celia项目,这是一个Team Project。
这里右上角的“Team Members”还是空的,需要我们Invite用户。点击“Invite a friend”,然后Add,在“Add users and groups”里面输入刚才加入User的Microsoft ID就行。系统会自动匹配到用户的,点击右边的名片图标,会弹出详细信息:
添加完毕之后,Close就行。回到之前的界面,可以看到Team Members有两个用户了,分别是Owner和新Add的用户:
就从上面这个Dashboard界面我们就能看出VS Online有多么强大,已经整合了Scrum和Agile两种开发工作方式(在创建Team Project的时候需要选择)。Dashboard可以点击左上角的加号新增,新增的Dashboard和当前的一样,右下角有个铅笔形状的图标,鼠标移动上去可以点击编辑和新增,比如缩放大小和调整位置、删除Widget等。也可以新增Widget,把其他的功能放到Dashboard里面。这些功能编辑和展现方式跟Windows Modern UI很相似,都很简单,就不在这阐述了。
Dashboard我们目前停留在HOME页(见左上角蓝色字体),后面还有CODE、WORK、BUILD、TEST、RELEASE等,Visual Studio Online的强大无法在这文章里面说明,后面我们集中于讲解代码有关的,也就是CODE的部分。
我们点击“CODE",会来到下面这个界面:
出现了一行二级菜单,这里左边是本项目的存储”$/Celia“,右边是Explorer、Changesets、Shelvesets。然后下面主功能区左边是导航树,跟Windows资源管理器很相似,右边是当前选中目录的详细列表,点击“History”可以看签入的各个版本的信息,功能很简单一看就懂。
$符号是Visual Studio代码项目的根目录,“$/Celia”是创建Team Project的时候已经默认创建的Repository,我们还可以创建新的Repository,点击“$/Celia”的下拉按钮就可以过滤、创建和管理Repository了。Manage repositories里面是管理当前Repository的各种参数和配置,很复杂,也不在这个文章里面介绍,有需要可以查阅微软的说明文档。
“Repository”这个词也就是字面上的意思,就是储存库。一个Team Project里面还能有多个储存库,每一个储存库可以使用Git或者Team Foundation Version Control来管理版本,点击“New repository”就知道了:
Type可以选择Git和TFVC的,Git类型还有下面这个“
后面为了讲解得更加实用一些,会使用另外一个存有大量代码的Team Project来讲解。
首先讲解一下笔者推荐的代码分支管理的规则,以_src目录作为代码存放的根目录:
master分支:产品主要线上版本,每次上线一个版本,就需要把发布的代码merge到master。目前还没有(正式)上线代码,目前内测阶段的代码仍然放在development分支
development分支:开发主要版本,包含最新的代码更新,一般领先master版本,开发人员在这个版本上面进行主版本的功能开发。目前内测阶段的代码仍然使用此分支。
branches:每次发布需要创建一个“release_XXX”分支,“XXX”为版本号。同时把此release分支合并到master。如果需要改bug,我们在最新的release分支上进行修改,修改完上线合并到master。
版本号一般来说递增。
● 从V1.0.0开始,每次标准发布修改第二位,如V1.0.0->V1.1.0
● 每次大功能发布(存在与前面版本无法兼容的大型功能、业务变化非常明显等),则修改第一位版本号码V1.0.0->V2.0.0
● 每次在Release上改bug,不涉及到新功能,则修改最后一位,如V1.0.0->V1.0.1
笔者估计从SVN过来的用户都有使用SVN存放项目文档和其他文件的习惯,可能是使用SVN客户端一般都使用Tortoise SVN,与Windows资源管理器整合比较紧密,所以也用SVN的版本功能来管理项目文档了。其实Git也能管理,但是我总觉得如果一开始使用Git,应该不会养成这样的习惯。不过尊重原来的习惯,使用VS Online管理文件也很不错,因为VS Online和市面上Coding.net、CSDN CODE等Git云托管服务不一样,VS Online并不按照存储容量计费,如果您网速顶得住的话,直接把某些大型安装包放到VS Online的Repository上都是可以的。
但是不建议在代码目录结构下进行文件存放,文件存放在代码外层,以免获取代码版本的时候影响太大。
我们使用SVN,可以选择某个SVN的子目录Checkout到不同的地方,避免Checkout出整个SVN的东西,用VS Online当然也是可以的,这是为了减少文件保存与代码编辑相互影响。
笔者建议大家使用Visual Studio多个WorkSpace的方式去进行不同工作性质的文件管理,一个WorkSpace大家可以理解为签出一个SVN的子目录到本地的某个路径上。
以下提供一种方法供大家参考,适用于Visual Studio 2012或以上版本。以建立一个完全使用代码编辑的Workspace为例:
1. 打开Visual Studio,连接团队项目
2. 连接团队项目后,打开“Source Control Explorer”,这是一个类似于SVN的管理界面,在未打开代码解决方案的情况下,即使装上Visual Studio Community(免费的)用VS来操作这个界面,占用的资源还是比较少的:
3. 用好这个界面,先上图,注意红色窗口的内容:
左边Folders:对应服务器上的文件目录列表,我们可以像使用SVN一样,选中一个目录然后签出。点击一个目录后,如果旁边的Local Path是“Not mapped”,则代表当前Workspace此目录尚未映射到本地目录,点击时会提示新建Workspace(如图所示);如果是已经映射,则点击会弹出此路径的文件夹窗口。
上方Workspace: 可以选择当前的Workspace,做不同的事情的时候可以选择不同的Workspace,如果点击下拉按钮,也能通过“Workspace...”新增或编辑现有的Workspace。
如上图中间所示是Workspace映射服务器目录和本地目录的对话框,选择了左边服务端的根目录(Server folder),然后本地目录可以浏览或自行输入一个路径。
4. 与使用SVN一样,建议只映射我们需要的服务器目录到本地。如上所述,我们选择代码目录(_development目录),创建一个专属的Workspace:
在Workspace选择的地方点击下拉->“Workspaces...”,可以打开如上图中间的“Manage Workspaces”对话框,选择“Add...”,然后在“Add Workspace”对话框的“Source Control Folder”选择服务端路径(见上图下方),上图右边的“Browse for Folder”是服务器目录,我们选择_development,看到“Folder path:”已经不是根目录了,点击“OK”返回,再选择我们需要映射到的本地文件夹路径:
点击OK之后,会提示Workspace改变,此目录下可以获取最新的文件版本,我们选择“是”:
获取完之后我们关闭Visual Studio,然后找到上面设置的本地路径,再次选择一个Solution打开VS:
这个时候观察下图,Workspace已经切换到刚刚定义的_DEV结尾的Workspace(注意:右边Team Explorer Tab页面才是真正目前使用的Workspace,左边的Source Control Explorer仍然是个Workspace的总体管理界面):
现在再使用“Solution Explorer”递归获取代码,就不再会取得当前Workspace映射目录以外的文件了。
5. 如何切换Workspace?
笔者不建议把项目文档存放到代码目录_src里面,但是可以存放在外面,如下图就是存放到_Project路径下:
那么我们可以新创建一个WorkSpace,点击Source Control Explorer Tab页的上面中间的下拉按钮,“Workspace...”,然后点击“Add...”或者“Edit...”都可以打开上图这个界面,如同上文操作一样,添加一行Status 为Active的目录,我们选中项目文档的TFVC路径,映射Local Folder即可。
如果我们想要签出一个子目录但是排除某一个目录,例如某个子目录文件很多或者很大,一般没有需要拉下来,可以按上图添加一行“Cloaked”类型记录,Source Control Folder选择TFVC路径即可。
OK,这样项目组的人员就可以无缝地把自己的工作习惯带过来基于VS Online的开发。微软是不是提供只适用于.NET开发的产品呢?先不论Visual Studio Community已经开源并且提供非常丰富的插件支持不同的编程语言的开发,开发人员使用Eclipse、XCode和IntelliJ IDEA也有Visual Studio Team Service的插件。
微软的轻量级IDE——Visual Studio Code也貌似提供了VSTS的插件,但是VS Code目前更多是基于命令行的处理方式,所以使用体验不怎么好。所以请别吝啬使用自己的计算机,推荐装上Visual Studio Community,这不仅是一个IDE,配合Visual Studio Online,也是一个软件开发全生命周期管理的工具。
- 【低功耗架构开发系列】(二)不找SVN托管代码了,直接用Visual Studio Online
- 【低功耗架构开发系列】(一)云服务选型
- Android BLE低功耗蓝牙开发极简系列(二)之读写操作
- 找了很久的低功耗蓝牙程序开发,终于在国外找到了部分资料
- IC设计基础系列之低功耗篇3:数字IC)低功耗设计入门(三)——系统与架构级低功耗设计
- 低功耗STM32L-Discovery开发板评测(二)
- 低功耗STM32L-Discovery开发板评测(二)
- Android蓝牙开发(二) BLE4.0低功耗蓝牙
- 在线开发应用,Visual Studio Online 来了
- IC设计基础系列之低功耗篇2:(数字IC)低功耗设计入门(二)——功耗的分析
- MCU低功耗设计(二)实践
- 集成电路中低功耗设计(二)
- 二、Create tests(Visual Studio Online中创建测试用例)
- Visual Studio 2005 中的托管代码(ZZ)
- (二)蓝牙低功耗(BLE)基础教程--基于nRF5x系列SOC
- Android BLE低功耗蓝牙开发极简系列(一)之扫描与连接
- [Visual Studio & Xamarin] 开发架构(二)-Repository与Entity Framework
- 低功耗蓝牙开发技术概述(二)——控制器(上)
- PreferenceFragment 和 PreferenceActivity讲解
- queue 模拟 stack
- struts.xml的常用配置
- 模型变高问题测试及原因
- E-R图
- 【低功耗架构开发系列】(二)不找SVN托管代码了,直接用Visual Studio Online
- Spring Boot MyBatis 连接数据库
- Java 判断点是否在特定区域内
- Pro Android学习笔记(一五五):传感器(5): 磁场传感器和方位(上)
- Hibernate工作原理及为什么要用?
- 【nRF51822学习教程】SDK框架分析
- 给 Android 开发者的 RxJava 详解
- B-Tree、B+树、B*树
- linux中某个端口拒绝远程主机连接原因及解决方法