zoukankan      html  css  js  c++  java
  • git与svn

    一、git与svn: 分布式与集中式的版本控制

    Subversion属于集中式的版本控制系统

    集中式的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。

    Subversion的特点概括起来主要由以下几条:

    • 每个版本库有唯一的URL(官方地址),每个用户都从这个地址获取代码和数据;
    • 获取代码的更新,也只能连接到这个唯一的版本库,同步以取得最新数据;
    • 提交必须有网络连接(非本地版本库);
    • 提交需要授权,如果没有写权限,提交会失败;
    • 提交并非每次都能够成功。如果有其他人先于你提交,会提示“改动基于过时的版本,先更新再提交”… 诸如此类;
    • 冲突解决是一个提交速度的竞赛:手快者,先提交,平安无事;手慢者,后提交,可能遇到麻烦的冲突解决。

    Git属于分布式的版本控制系统

    Git记录版本历史只关心文件数据的整体是否发生变化。Git 不保存文件内容前后变化的差异数据。

    实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一连接。

    在分布式版本控制系统中,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。你可以根据需要设定不同的协作流程。

    另外,因为Git在本地磁盘上就保存着所有有关当前项目的历史更新,并且Git中的绝大多数操作都只需要访问本地文件和资源,不用连网,所以处理起来速度飞快。用SVN的话,没有网络或者断开VPN你就无法做任何事情。但用Git的话,就算你在飞机或者火车上,都可以非常愉快地频繁提交更新,等到了有网络的时候再上传到远程的镜像仓库。换作其他版本控制系统,这么做几乎不可能,抑或是非常麻烦。

    Git具有以下特点:

    • Git中每个克隆(clone)的版本库都是平等的。你可以从任何一个版本库的克隆来创建属于你自己的版本库,同时你的版本库也可以作为源提供给他人,只要你愿意。

    • Git的每一次提取操作,实际上都是一次对代码仓库的完整备份。

    • 提交完全在本地完成,无须别人给你授权,你的版本库你作主,并且提交总是会成功。

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

    • Git的提交不会被打断,直到你的工作完全满意了,PUSH给他人或者他人PULL你的版本库,合并会发生在PULL和PUSH过程中,不能自动解决的冲突会提示您手工完成。

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

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

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

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

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

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

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

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

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

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

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

    二、git和svn优缺点对比:

    SVN优缺点

    优点:

    • 管理方便,逻辑明确,符合一般人思维习惯。

    • 易于管理,集中式服务器更能保证安全性。

    • 代码一致性非常高。

    • 适合开发人数不多的项目开发。

    缺点:

    • 服务器压力太大,数据库容量暴增。

    • 如果不能连接到服务器上,基本上不可以工作,看上面第二步,如果服务器不能连接上,就不能提交,还原,对比等等。

    • 不适合开源开发(开发人数非常非常多,但是Google app engine就是用svn的)。但是一般集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题。

    Git优缺点

    优点:

    • 适合分布式开发,强调个体。

    • 公共服务器压力和数据量都不会太大。

    • 速度快、灵活。

    • 任意两个开发者之间可以很容易的解决冲突。

    • 离线工作。

    缺点:

    • 学习周期相对而言比较长。

    • 不符合常规思维。

    • 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

    转载于:https://www.cnblogs.com/Sungeek/

  • 相关阅读:
    尚硅谷韩顺平Linux教程学习笔记
    第15章 自动编码器
    问题总结
    日常问题记录
    SQLServer日常bug记录
    .NetCore使用NLog写入数据库总结
    C#操作XML文档
    C#中的 ?/?:/?? 三者的区别及用法
    git 命令从入门到放弃
    通过反射技术获得类中的所有属性
  • 原文地址:https://www.cnblogs.com/Mrq-t/p/12767460.html
Copyright © 2011-2022 走看看