VSTS(Visual Studio Team Services)
VSTS简单说就是微软TFS(Team Foundation Services)的升级云版,不用像TFS需要在企业内部服务器上部署,并且是免费提供给用户使用的。
每个有微软账号(也是免费注册的)的用户都可以申请VSTS,官网申请入口。当然,免费用户是有一定限制的,比如:每个项目的成员不能超过5个等。不过一般中小型开发项目,5个人也够用了。
VSTS有一点比GitHub好,免费用户也可以拥有private空间;GitHub上免费的都是公开的,所有人都能访问获取的。所以,既想要免费软件项目托管平台,又想要私有项目不公开,VSTS真是一个不错的选择。
VSTS功能比较多,作为微软云优先新时代的产品,应该会一直持续开发改进的。
VSTS支持两种版本控制系统:Git 和 TFVC(Team Foundation Version Control)
在VSTS中新建一个项目时,会遇到版本控制选择:
Git是默认的版本控制系统,并且是官网推荐使用的,除非是有特殊需求(比如一定要用TFVC的集中式管控)。
Git(分布式)
Git是分布式版本控制系统。分布式相比于集中式的最大区别在于每个开发者在本地都有一份源码仓库的备份,开发者可以提交修改集到本地仓库,并且在断网的情况下也能执行历史回溯和比较的功能。Git的分支非常轻便,你可以在本地创建一个私有分支,并且也可以在本地合并分支。不存在中央服务器。不同开发者之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。一般情况下,需要有主开发者来决定合并谁的提交(可以自己解决,也可以要求开发者之间解决以后再重新提交)。分布式的好处是灵活自由,大部分时间可以离线工作。
TFVC(集中式)
Team Foundation Version Control是集中式版本控制系统。典型的集中式版本控制系统,对于项目成员来说,每一个源码文件的当前版本(服务器最终Check in)有且只有一份(无论是下面哪种工作流模式)。历史数据仅保存于服务器上,分支创建也只能在服务器上操作。所以,比较、回滚等操作都需要连接服务器。
TFVC有两种工作流模式:
- 服务器工作区- 在修改源码文件之前,必须公开的Check Out源码文件,以使系统锁定文件(防止再被其他人Check Out)。这种模式下,大部分操作都是需要连接服务器的。使用服务器工作区的好处是,你可以扩展codebases到很大的程度(每个分支百万个文件,以及大的二进制文件)。Visual Source Safe, Perforce, 以及 CVS也是这种工作流模式。
- 本地工作区- 每个项目成员在本地有一份codebase拷贝(只含最新代码库,不包含历史数据),并且可以在离线模式工作。开发者Check in修改集时,如有冲突,协商解决(比如存在于不同开发者电脑上的同一个文件,提交修改时会冲突,具体采用哪个要靠开发者之间协商)。Subversion也是这种工作流模式。
Git与TFVC的比较
范围 | TFVC | Git | 修改集 | 团队成员可以同时在各自开发电脑上修改文件。你可以在任何时间上传修改集。然而,你的上传可能会被冲突而打断。 你可以在check in之后修改每个修改集的注释。你可以链接修改集和工作项(work items)或是已经完成的builds。 | 团队成员可以同时在各自开发电脑上修改文件。你可以独立地在自己电脑上创建提交,并贡献给团队。在你准备上传(push)到服务器之前,你必须先下载(pull)最新提交的文件。当你下载(pull)时,可能会被冲突而打断。 你可以修改本地最新的提交,而不能修改旧的提交。你可以链接修改集和工作项(work items)或是已经完成的builds。 你可以通过命令行修改和组合本地提交。 | 分支 | 基于路径的分支是最常用的分支方式,能够规避feature变化对软件发布的风险。典型做法是团队成员对每一个分支都建立额外的工作区。 每个分支的修改集都是独立无关的,所以你不用在切换分支前做check in。兄弟分支之间的合并需要一个baseless merging。 你可以可视化观看分支结构以及修改集在哪里被合并。 | 分支是轻量化的以及路径无关的。很多开发者有时在日常开发中,会为每一个新特性创建分支。你可以从一个分支快速切换到另外一个分支,轻松游刃于各个分支。你可以只在自己电脑上创建分支,并在必要时可以分享给其他成员。 在切换分支之前,你必须做完提交(commit)、分支(branch)、存放(stash)或撤回(undo)。合并是简单的,并且与分支所依赖的提交无关。 你可以比较不同的分支,以查看哪个提交是在哪个分支上的。 | 冲突解决 | 你可能需要在你get,check in,merge,unshelve时解决冲突。你可以在Visual Studio中解决所有类型的冲突。 | 你可能需要在你pull,merge时解决冲突。你可以通过命令行或在Visual Studio中解决内容冲突。 | 文件存储 | 可以Check in 大二进制文件。 | 可以Check in 小二进制文件(像常规文件一样操作)。若是大二进制文件,需要用Git-LFS 来存储大二进制文件到VSTS。 | 历史 | 历史数据不存在开发电脑中,因此只能在连接服务器时才能查看历史。你可以在Visual Studio或Web portal中查看历史。你可以查看谁修改了一行以及何时修改的。 | 历史数据复制存储于开发电脑中,因此在没有连接服务器时也能查看历史。你可以在Visual Studio或Web portal中查看历史。你可以查看谁修改了一行以及何时修改的。 | 标签 | 你可以通过Visual Studio或命令行来给一个或多个文件加标签。每个文件的不同版本都可以加标签。 | 你可以通过命令行来给独立的提交加标签。在Visual Studio的history widow可以查看标签。 | 回滚 | 你可以回滚一个或多个修改集。 | 你可以还原提交(revert a commit) | 扩展 | 本地工作区可用于小型或超大型项目。服务器工作区支持大型扩展(每个分支百万个文件,以及大的二进制文件) | 可以快速开始小型项目,但是如果想要扩展成大型项目,你需要提前计划以便模块化codebase。你可以在一个项目(project)中创建多个仓库。 |
| |