上一次转载了介绍GitHub的博文点我,我想对于初学GitHub的同学们还是有不清楚的地方,毕竟有些概念的理解比较费力。我觉得作为一个对于配置库技术已经有一定基础的同学们,要学习GitHub,最快以及最能够深刻理解的就是和自己熟悉的一个配置库技术进行比对,分析优缺点。本文就比对下目前业界最流行的GitHub和老牌配置库技术Subversion。看看是老而弥坚还是初生牛犊不怕虎。

一、Subversion的特点

●每个版本库有唯一一个“官方地址”,每个用户都从这个唯一地址获取代码、数据;

●获取代码库的更新,也只能连接到这个唯一的代码库,同步以取得最新数据;

●提交必须有网络连接(非本地版本库);

●提交需要授权,如果没有授权,提交失败;

●提交并非每次都能够成功。如果有其他人先于你提交,会提示“改动基于过时的版本,先更新再提交”… 诸如此类;

冲突解决是一个提交速度的竞赛:手快者,先提交,平安无事;手慢者,后提交,可能遇到麻烦的冲突解决。

二、GitHub的特点

众生平等,每个检出(checkout)的版本库,或者更准确的说每个克隆(clone)的版本库都是平等的;

●你可以从任何一个版本库的克隆来创建属于你自己的版本库,同时你的版本库也可以作为源提供给他人,只要你愿意;

●获取版本库的更新,可以来自任何源;

●你可以从张三那里获得上游的改动,包括张三自己的提交;你也可以从李四那里获得上游的改动,也可能包括李四的提交;

●提交完全在本地完成。无须别人给你授权,你的版本库你作主;

●当然你在你的版本库中的改动是否别人愿意合并到他们的版本库则是另外的一回事了;

●提交总是会成功,因为提交是在本地进行的么;

●甚至基于旧版本的改动也可以成功提交,提交会基于旧的版本创建一个新的分支 ;

●冲突解决不再像是SVN一样的提交竞赛,而是在需要的时候才进行合并和冲突解决 ;

●Subversion的提交竞赛,在多人协作开发时,提交经常被打断;

●Git的每个用户就好像工作在独立的 Feature Branch(功能分支)中 ;

●Git的提交不会被打断,直到你的工作完全满意了,PUSH给他人或者他人PULL你的版本库;

●合并会发生在PULL和PUSH过程中,不能自动解决的冲突会提示您手工完成;

●Git也可以模拟集中式的工作模式;Subversion只有一种集中式的工作模式;

●所有人都和服务器同步,提交直接到服务器上;

●Git也可以模拟集中式的工作模式 ;

●Git版本库统一放在服务器中;

●可以为 Git 版本库进行授权:谁能创建版本库,谁能向版本库PUSH,谁能够读取(克隆)版本库;

●团队的成员先将服务器的版本库克隆到本地;并经常的从服务器的版本库拉(PULL)最新的更新;

●团队的成员将自己的改动推(PUSH)到服务器的版本库中,当其他人和版本库同步(PULL)时,会自动获取改变;

●Git 的集中式工作模式非常灵活;

●你完全可以在脱离Git服务器所在网络的情况下,如移动办公/出差时,照常使用代码库;

●你只需要在能够接入Git服务器所在网络时,PULL和PUSH即可完成和服务器同步以及提交;

●Git提供rebase命令,可以让你的改动看起来是基于最新的代码实现的改动;

●Git有更多的工作模式可以选择,远非 Subversion可比。

三、两种配置库技术的应用场景

经过上面的分析我们基本上可以看出来两种配置库技术优缺点了。那么在合适的场景使用合适的配置库技术来解决配置库管理的问题,才是我们的最终目的。

加入你的配置库管理了大量的二进制文件,例如excel、ppt、word等,由于这种文件无法合并,一旦出现冲突后,需要花大量时间来解决冲突。并且这种二进制

文件进行协同开发的可能性不高,那么推荐你还是使用Subversion。他的悲观锁的特性,能够帮助你保证二进制文件不会出现太多的合并问题。

 

如果你应用的场景是一个开源项目组,需要有更多的志愿者加入到项目中,希望营造一个开放,灵活的配置库环境。那么推荐你使用GitHub。它极低的拉分支

成本,分支自动合并。为每一个用户的分支提供平等的权限,保证用户在push变更到服务器之前,都不会因为其他人的修改出现冲突的问题。会让每一个开发人员

觉得协同起来非常爽。尤其是开发人员零散不是一个团队的时候,这一点就尤为重要。

至今为止有一点我始终还是有疑问,由于GitHub极低的分支成本,就有可能操作分支的个数超多,在进行合并时虽然能够保证自动合并不经常出现冲突。但是分支合并后是否会带来分支特性至今的逻辑冲突,对于这种冲突的识别是否只能够通过代码Review来控制风险。如何是这样的话,企业级别的应用对于GitHub配置库的应用就需要好好考虑一下了。

作者:yescoolfan
出处:http://www.cnblogs.com/yescoolfan
水平有限,欢迎指正,转载时请附上原文链接

GitHub Or Subversion的更多相关文章

  1. Jenkins 环境搭建

    本文为jenkins入手教程,全文分为 jenkins安装.系统管理(配置全局安全.全局工具配置.管理插件).创建项目(同时创建证书),管理视图,jenkins 客户端,执行构建.查看任务历史 一.j ...

  2. jenkins1

    持续集成工具: Jenkins  和 Hudson是同源的. 甲骨文和开源社区之间的关系破裂,该项目被分成两个独立的项目. Jenkins:由大部分原始开发人员组成,Hudson:由甲骨文公司继续管理 ...

  3. CI持续集成理论知识

    (1)什么是CI What is CI? CI就是持续集成,持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成.每次集成都通过 ...

  4. 搜刮一些开源项目的APP

    iOS完整App资源收集 <iOS完整app资源收集>  <GitHub 上有哪些完整的 iOS-App 源码值得参考?> <GitHub 上有哪些完整的 iOS-App ...

  5. 使用 Subversion (SVN) 的方式来访问 Github(转)

    [转至]:http://www.open-open.com/lib/view/open1340760267717.html

  6. 【GitHub Desktop】MacOS和Win下配置及简单的使用

    一. GitHub介绍 1.GitHub 是为开发者提供 Git 仓库的托管服务.这是一个让开发者与朋友.同事.同学及陌生人共享代码的完美场所. 总结一下,GitHub 最大的特征是"面向人 ...

  7. linux下git以及github的连接与使用

    简单理解 Git 的思想和基本的工作原理,能够更好的进一步和使用Git.在开始学习Git 的时候,最好不要把Git的各种概念和其他的版本控制系统诸如 Subversion 等相比,否则容易混淆每个操作 ...

  8. 发布 Rafy 源码到 GitHub

      最近项目组开始使用 Git 来作为源码管理.我今天就顺便把 Rafy 的源码也迁移到了 github 上,方便大家使用.这是项目的地址:https://github.com/zgynhqf/raf ...

  9. 【工匠大道】将项目同时托管到Github和Git@OSC

    原文地址 摘要: Github是最大的git代码托管平台,​GIT@OSC是国内最大的git代码托管平台,支持免费私有库,支持SVN操作,用户众多.很多用户需要同时将代码托管到两个平台,这篇文章的主要 ...

随机推荐

  1. git 入门教程之分支策略

    默认情况下合并分支常常直接使用 git merge 命令,是最方便快速的合并方法.其实这种情况下 git 采用的是 fast forward 模式,特点是删除分支后,会丢失分支信息,好像从来没存在该分 ...

  2. webpack项目轻松混用css module

    前言 本文讲述css-loader开启css模块功能之后,如何与引用的npm包中样式文件不产生冲突. 比如antd-mobilenpm包的引入.在不做特殊处理的前提下,样式文件将会被转译成css mo ...

  3. Ubuntu18.04多个版本GCC编译器的切换

    今天make一个程序的时候,发现程序里面使用到了C++17的标准,而我的gcc仍然是4.8,考虑到系统是ubuntu18.04的,所以感觉应该gcc的版本不会这么低. cd到/usr/bin下,使用指 ...

  4. 【2018.05.11 智能驾驶/汽车电子】非技术向:关于Simulink和AutoSar的几种观点

    最近看到几篇关于Simulink及AutoSar的Blog和Paper,感觉比较有意思,转载备忘之. 1. 看衰Simulink及AutoSar From:Tumiz的技术天地 https://blo ...

  5. 【Linux基础】文件处理实例

    1.文件拆分 //每4000行拆分一个文件 epms_t_ep_fx_stl_xy_20190129.dat 2.行处理 //查找第二列为711611且第三列为711100记录,打印行号和整行数据 a ...

  6. rem实现自适应

    总结一下,rem实现自适应:用rem代替px,配合媒体查询设置font-size:n%. 首先,px是死的.若一律用px,那就会大的显得小,小的屏幕显得大.其次,rem是活的,通过设置字体大小可以引起 ...

  7. ArcMap2Sld:一个将MXD中图层配图样式转换为OGC的SLD文件的开源工具

    在一个项目中,用户采用GeoServer做为GIS服务器(原因嘛当然是免费能省钱,经过验证可能还会在性能和稳定性等表现力也有优越性),但是手上收集的数据都是ESRI格式的,这倒不打紧,因为GeoSer ...

  8. 15.selenium_case01

    # 与百度首页交互 from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait f ...

  9. Grid布局指南

    简介 CSS网格布局(又称“网格”),是一种二维网格布局系统.CSS在处理网页布局方面一直做的不是很好.一开始我们用的是table(表格)布局,然后用float(浮动),position(定位)和in ...

  10. AlexeyAB大神版yolo 待完善

    目录 darknet优化经验 1. AlexeyAB改进项 2. Linux下编译选项 3. 训练经验 4. 提升检测效果 5. 总结 6. AlexeyAB大神改进 darknet优化经验 主要来自 ...