博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
版本控制:集中式 vs 分布式
阅读量:5038 次
发布时间:2019-06-12

本文共 2805 字,大约阅读时间需要 9 分钟。

集中式

  CVCS的版本库集中存放在中央服务器,而工作时都是用自己的电脑,所以要先从中央服务器取得最新的版本,然后工作完后再将自己的代码推送给中央服务器。

  CVS:最早的、开源、免费。由于自身设计的问题,会造成提交文件不完整、版本库莫名其妙损坏的情况

  SVN:开源、免费。修正了CVS的一些稳定性问题,是目前用得最多的集中式版本库控制系统

  ClearCase:收费、安装比Windows还大、运行比蜗牛还IBM 收购了原本制作的Rational公司

  VSS:集成在Visual Studio中。反人类的设计?

 

  集中式版本控制系统最大的问题就是必须联网才能工作,受网络状况、带宽影响。

 

分布式

  DVCS没有中央服务器(也可以有),允许开发人员组实现他们选择的几乎任何工作流,每个人的电脑上都是一个完整的版本库,所以不需要联网。如何多人协作如:你修改了文件A,同事修改了文件A,此时只需把各自的修改推送给对方,就可以互相看到对方的修改了。

  GitBitKeeper(促使Git诞生)MercurialBazaar等。

 

 

  

特点与比较

  集中式:1、通过与中心服务器的连接执行所有操作,必须联网

  分布式:1、快速,本地客户机操作,不联网也不影响工作,离线工作,DVCSSubversion 快大约3-10

      2、可以实现非常灵活的工作流(传统的集中式工作流 + 特殊工作流 + 特殊工作流和集中式工作流的组合)

 

      3、安全性更高,因为每个人电脑里都是完整的版本库,坏了复制一份即可,CVCS中央服务器出问题就GG      

      4、两台电脑互相访问不了或某一台电脑未开机不能执行复制(交换修改)时,通常有一台电脑充当中央服务器 

      5、分支管理

 

钩子

  钩子是在版本控制操作的生命周期中通过程序执行操作的方法。如:通过使用钩子,可以在代码签入(check in)存储库时自动发送电子邮件。另外,还可以在签入代码之前,检查用户是否满足一组条件,比如包含一个测试文件。

  另一种扩展版本控制系统功能的方法是编写插件。

 

工作流

  1Partner 工作流:一个开发人员启动一个项目,然后进行分支,不同开发人员工作的分支之间来回合并更改。

  2、通过本地提交使用集中式服务器的工作流:在这种工作流中,开发人员的工作方式与使用集中式 subversion 存储库时非常相似,但是他们进行本地提交,然后把最终更改推到集中式服务器。

 

快速入门

  • Mercurial
    •  安装:sudo easy_install-2.5 mercurial
    •  建立项目目录:mkdir hgrepo;    cd hgrepo
    •  初始化项目hg init
    •  添加文件:touch foo.txt; hg add foo.txt
    •  提交:hg commit -m "added foo.txt" commit
    •  抓取共享的存储库hg clone ssh://example.com//projects/hgrepo
    •  本地提交更改hg -ci -m "adding a change"
    •  把更改推到服务器:hg push
    •  以补丁形式查看未处理的更新:hg incoming -p
    •  从服务器下载更新:hg pull
    •  应用更改:hg update
    •  合并冲突:hg merge
    •  合并两个不相关的远程存储库:hg pull -f ssh://example2.com//projects/hgrepo
  • Bazaar
    •  安装:sudo easy_install-2.5 bzr
    •  建立项目目录:mkdir bzrrepo;    cd bzrrepo
    •  初始化项目:bzr init
    •  添加文件:touch foo.txt; bzr add foo.txt
    •  提交:bzr commit -m "added foo.txt" commit
    •  抓取共享的存储库:bzr branch bzr+ssh://example.com/projects/gitrepo
    •  本地提交更改:bzr -ci -m "adding a change"
    •  把更改推到服务器:bzr push
    •  从服务器下载更新:bzr pull
    •  应用更改:bzr update
    •  合并冲突:bzr merge
  • Git
    •  安装:下载最新的tar文件
    •  建立项目目录:mkdir gitrepo;    cd gitrepo
    •  初始化项目:git init
    •  添加文件:touch foo.txt;  git add foo.txt
    •  提交:git commit -m "added foo.txt" commit
    •  抓取共享的存储库:git clone ssh://example.com/projects/bzrrepo
    •  本地提交更改:bzr -ci -m "adding a change" commit
    •  把更改推到服务器:bzr push
    •  从服务器下载更新:bzr pull
    •  应用更改:bzr update
    •  合并冲突:bzr merge

 

转换工具和与subversion的集成

  上面三种 DVCS 都能够把现有的 subversion 存储库轻松地转换为各自的格式,甚至可以在不同的 DVCS 之间进行转换。

  Mercurial可以使用 hgimportsvnhgpullsvn 与现有的 subversion 存储库通信,创建新的 hg 存储库和历史。

  tailor 工具是一种通用的存储库转换工具。

 

 

咖啡馆 — Mercurial工作流

  实现安全的特殊版本控制工作流,让两个开发人员可以在咖啡馆中通过无线网络一起工作:

  1、开发人员 A 创建一个存储库:mkdir /tmp/myhgrepo

                           cd /tmp/myhgrepo   

                              hg init  

  2、通过 Web 作为只读共享:hg serve

  3、开发人员 B 克隆这个存储库:hg clone http://example.com:8000( A机器的 IP 地址或本地主机名)

      可以通过对 your-machine-name.local 使用 Bonjour 获得这一信息

  4、开发人员 B 更改后作为只读的 HTTP 共享自己的存储库:http://example2.com:8000

  5、开发人员 A 对开发人员 B 的存储库拷贝:hg clone http://example2.com:8000

 

参考文章

http://www.ibm.com/developerworks/cn/aix/library/au-dist_ver_control/

转载于:https://www.cnblogs.com/DaoMuRen/p/5707136.html

你可能感兴趣的文章
4.14上午
查看>>
数据分析 -- 白话一下什么是决策树模型(转载)
查看>>
Java SPI机制原理和使用场景
查看>>
web前端java script学习2017.7.18
查看>>
删除TXPlatform
查看>>
LaTex:图片排版
查看>>
并发访问超时的问题可能性(引用)
查看>>
中小团队基于Docker的Devops实践
查看>>
利用python打开摄像头并保存
查看>>
System函数的使用说明
查看>>
Selenium-测试对象操作之:获取浏览器滚动条滚动距离
查看>>
Linux下MySQL数据库安装与配置
查看>>
Extjs String转Json
查看>>
oracle入门(4)——少而常用的命令
查看>>
打印机设置(PrintDialog)、页面设置(PageSetupDialog) 及 RDLC报表如何选择指定打印机...
查看>>
Java 虚拟机部分面试题
查看>>
二叉树的遍历问题总结
查看>>
Spring之面向切面编程AOP
查看>>
MATLAB GUI程序设计中使文本框接收多行输入的方法
查看>>
全文检索-Elasticsearch (四) elasticsearch.net 客户端
查看>>