分布式版本控制系统入门

来源:互联网 发布:淘宝钻石号去哪买 编辑:程序博客网 时间:2024/05/13 14:08


学习和对比 Bazaar、Mercurial 和 Git 的使用方法

Noah Gift, 创始人, GiftCS,LLC
Adam Shand, 基础设施经理, WetaDigital

 

简介: 您是否对分布式版本控制感兴趣,但是又被一大堆行话弄糊涂了?本文介绍三种主要的系统(Git、Mercurial和 Bazaar),讨论采用分布式工作流的一些优点,比较分布式版本控制的常用操作。

本文的标签:  安装, 工具与及实用程序, 应用开发, 操作系统, 系统管理

 

标记本文!

 

发布日期: 2009年 5 月 25 日 
级别: 中级 
其他语言版本: 英文 
访问情况 : 11262次浏览 
评论: (查看 添加评论 -登录)

平均分 3 星 共 5 个评分 平均分(5个评分)
为本文评分

 

简介

在过去几年,对于分布式版本控制可以给开发过程提供的益处有许多争论。最近,分布式工具已经很成熟了。尽管分布式工具的一些优点最初可能不明显,但是从长期来看,它们提供的灵活性是非常有意义的。阅读完本文之后,您应该能够开始使用分布式版本控制系统,基本了解分布式模型能够提供的优点。

围绕分布式版本控制的争论主要集中在不再需要的中心服务器。这是一个非常独特的特性,对于一些开发人员组很重要,但是它的真正价值在于,它允许开发人员组实现他们选择的几乎任何工作流。它能够完成很多事情,比如传统的集中式模型,或两个开发人员在咖啡馆通过无线连接协同工作,等等。

允许开发人员以各种新的方式工作,这是分布式版本控制真正令人兴奋的特点。实际上,在本文末尾会介绍如何实现这样的“咖啡馆”工作流。这对于作家、学校教师和Linux® 内核开发人员都有益处。

什么是分布式版本控制?

分布式版本控制 (DVCS) 是一种不需要中心服务器的管理文件版本的方法,但是它也可以使用中心服务器。更改可以被合并到 DVCS的任何其他用户的系统中,因此可以实现非常灵活的工作流。

DVCS的两个主要优点是:它比集中的版本控制更灵活,因为它除了支持传统的(集中式)工作流,还支持其他各种工作流;它比集中式服务器快得多,因为大多数操作在客户机本地进行,而不需要网络操作。

什么是钩子?

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

另一种扩展版本控制系统功能的方法是编写插件。如果打算编写自己的插件,在 参考资料 中可以找到描述Bazaar、Git 和 Mercurial 的插件系统的文章链接。

DVCS和集中式版本控制系统的主要差异

在 DVCS 和集中式版本控制系统之间有三个关键差异。第一个差异是,DVCS 通过本地提交支持离线工作,这是由 DVCS的操作方式决定的。这与集中式版本控制完全不同,集中式版本控制要求通过到中心服务器的连接执行所有操作。这种灵活性让开发人员在飞机上也能够像在办公室中一样轻松地工作,可以一次又一次地进行提交。

第二个差异是 DVCS 比集中式系统更灵活,因为 DVCS支持许多不同类型的工作流,从传统的集中式工作流到纯粹的特殊工作流,再到特殊工作流和集中式工作流的组合。这种灵活性允许通过电子邮件、对等网络和开发团队喜欢的任何方式进行开发。

第三个差异是 DVCS 比集中式版本控制系统快得多,因为大多数操作在客户机上进行,速度非常快。另外,在需要进行推(push)操作(与另一个节点通信)时,速度也更快,因为两个客户机机器上都有完整的元数据。速度差异相当显著,根据使用本地存储库还是网络存储库,DVCS比 Subversion 快大约 3-10 倍。

回页首

分布式版本控制工作流

因为 DVCS 非常灵活,可以实现各种各样的工作流,但是由于篇幅有限,本文只讨论两种工作流。首先讨论最常用的工作流之一 Partner工作流。按照 Partner 工作流,一个开发人员启动一个项目,然后进行分支。然后,在不同开发人员工作的分支之间来回合并更改。

第二种常用的工作流是通过本地提交使用集中式服务器。在这种工作流中,开发人员的工作方式与使用集中式 subversion存储库时非常相似,但是他们进行本地提交,然后把最终更改推到集中式服务器。这种工作流有许多变体,包括与 Partner工作流结合使用。重要的是,可以采用许多种工作方式,通过使用 DVCS,可以灵活地选择最适合自己的工作方式。

回页首

快速入门指南

了解一种新技术的最好方法之一是实际使用它。在本节中,简要介绍 Mercurial、Bazaar 和 Git中的常用操作,您可以试试这些操作:

  • Mercurial
    • 安装:sudoeasy_install-2.5 mercurial
    • 建立项目目录:mkdirhgrepo; cd hgrepo
    • 初始化项目:hginit
    • 添加文件:touchfoo.txt; hg add foo.txt
    • 提交:hg commit -m"added foo.txt" commit
    • 抓取共享的存储库:hg clonessh://example.com//projects/hgrepo
    • 本地提交更改:hg -ci -m"adding a change"
    • 把更改推到服务器:hgpush
    • 以补丁形式查看未处理的更新:hg incoming-p
    • 从服务器下载更新:hgpull
    • 应用更改:hgupdate
    • 合并冲突:hgmerge
    • 合并两个不相关的远程存储库:hg pull -fssh://example2.com//projects/hgrepo
  • Bazaar
    • 安装:sudoeasy_install-2.5 bzr
    • 建立项目目录:mkdirbzrrepo; cd bzrrepo
    • 初始化项目:bzrinit
    • 添加文件:touchfoo.txt; bzr add foo.txt
    • 提交:bzr commit-m "added foo.txt" commit
    • 抓取共享的存储库:bzr branchbzr+ssh://example.com/projects/gitrepo
    • 本地提交更改:bzr -ci -m"adding a change"
    • 把更改推到服务器:bzrpush
    • 从服务器下载更新:bzrpull
    • 应用更改:bzrupdate
    • 合并冲突:bzrmerge
  • Git
    • 安装:下载最新的 tar 文件 http://kernel.org/pub/software/scm/
    • 建立项目目录:mkdirgitrepo; cd gitrepo
    • 初始化项目:gitinit
    • 添加文件:touchfoo.txt; git add foo.txt
    • 提交:git commit-m "added foo.txt" commit
    • 抓取共享的存储库:git clonessh://example.com/projects/bzrrepo
    • 本地提交更改:bzr -ci -m"adding a change" commit
    • 把更改推到服务器:bzrpush
    • 从服务器下载更新:bzrpull
    • 应用更改:bzrupdate
    • 合并冲突:bzrmerge

回页首

转换工具和与 subversion的集成

这三种 DVCS 都能够把现有的 subversion 存储库轻松地转换为各自的格式,甚至可以在不同的 DVCS之间进行转换。这使开发人员能够方便地试用 DVCS 或从一种 DVCS 转移到另一种 DVCS。

例如,对于 Mercurial,可以使用工具 hgimportsvn 和 hgpullsvn 与现有的 subversion存储库通信,创建新的 hg 存储库和历史。tailor 工具是一种通用的存储库转换工具。

另一种有意思的试用方法是集成 DVCS 与现有的 subversion存储库。对这种方法的详细讨论超出了本文的范围,但是 参考资料 给出了一些工具的链接,这些工具可以在subversion 分支与 Git、Bazaar 和 Mercurial 之间进行双向操作。

回页首

第三方托管选项

如果开放源码或商业开发人员不希望或不需要管理自己的集中式 “集线器”,那么可以选用流行的托管站点托管自己的 Git、Bazaar 或Mercurial 项目。对于 Mercurial,流行的免费和付费托管站点是 Bitbucket。对于 Git,可以使用Github;对于 Bazaar,可以使用由 Canonical 发起的 Launchpad。

回页首

提示:“咖啡馆” Mercurial工作流


图 1. 咖啡馆工作流
咖啡馆工作流

如果希望实现安全的特殊版本控制工作流,让两个开发人员可以在咖啡馆中通过无线网络一起工作,那么可以试试下面的方法。

第一个用户使用 Mercurial 创建一个存储库:

mkdir /tmp/myhgrepocd /tmp/myhgrepohg init

然后,通过 Web 作为只读共享共享它:

hg serve

第二个用户使用以下命令克隆这个存储库:

hg clone http://example.com:8000

注意:这是另一台机器的 IP 地址或本地主机名。在 OS X上,可以通过对 your-machine-name.local 使用Bonjour 获得这一信息。

第二个用户进行他需要的更改,然后作为只读的 HTTP 共享提供他的存储库:

http://example.com:8000

第一个用户对第二个用户的存储库拷贝执行 hg 拖操作:

hg clone http://example2.com:8000

每个开发人员都是安全的,因为他们只在需要更新自己的本地文件系统时才对对方的存储库进行拖操作。

回页首

结束语

本文讨论了分布式版本控制能够提供的价值,比较了三种主流工具 Git、Mercurial 和 Bazaar之间的差异。如果您不太熟悉版本控制,那么应该继续学习版本控制、钩子和插件以及它们能够提供的功能。

如果您是老手,那么应该试试这些工具,寻找最适合自己的工具。请通过 参考资料 中的链接详细了解各种分布式版本控制系统以及别人的使用经验。


参考资料

学习

  • DVCSoverview。 

  • Tailor 是一种全面的版本控制迁移工具。

  • Mercurial 附带一个实用程序,可以在svn 之间来回复制更改。

  • Bazaar 附带一组工具,它们可以从svn 进行迁移。

  • Git 有几个工具。github 是一个流行的 Git托管站点。

  • AIX and UNIX专区:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。

  • AIX and UNIX 新手入门:访问“AIX andUNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。

  • AIX and UNIX 专题汇总:AIX andUNIX专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为您把本专区的所有专题进行汇总,让您更方便的找到您需要的内容。

  • Open source:访问developerWorks Open source 专区,这里有丰富的 how-to信息、工具和项目更新,可以帮助您利用开放源码技术进行开发并将其用于 IBM 产品。 

  • 随时关注 developerWorks 技术活动和网络广播。 

  • Podcasts:收听 Podcast 并了解 IBM技术专家的最新想法。 

讨论

  • 参与 AIX 和 UNIX 论坛:
    • AIX 论坛
    • 针对开发人员的 AIX 论坛
    • Cluster SystemsManagement
    • IBM Support Assistant论坛
    • 性能工具论坛
    • 虚拟化论坛
    • 更多 AIX 和 UNIX 论坛

作者简介

Photo of Noah Gift

Noah Gift 是 O'Reilly 出版的 Python For Unix and Linux SystemAdministration 一书的合著者,并且现在还在为 Manning编著 Google App Engine InAction 一书。他是一名作家、演说家、顾问和社区负责人,并为 IBMdeveloperWorks、Red Hat Magazine、O'Reilly 和 MacTech撰稿。他的咨询公司的网站是 http://www.giftcs.com,他的个人网站是 http://noahgift.com。Noah 拥有加州洛杉矶的 CIS 的硕士学位,加州 Poly San Luis Obispo 的营养科学学士学位,他还是通过Apple 和 LPI 认证的系统管理员,他曾经在许多公司工作过,如加利福尼亚理工学院、Disney FeatureAnimation、Sony Imageworks 和 Turner Studios。他目前在新西兰的 Weta Digital工作。在空闲的时候,他喜欢和妻子 Leah 以及他们的儿子 Liam一起度过,谱写钢琴曲、参加马拉松比赛以及积极地参与体育活动。

/developerworks/i/p-ashand.jpg

Adam 在上世纪 90 年代建立了新西兰的首批 ISP之一,自此之后他一直担任系统管理员和团队负责人。1997 年,他移居美国并在 8 年时间里在多家 dot-com公司担任系统管理员和团队负责人,包括世界上最大的 ISP 之一。在 2000年,他建立了一个非盈利组织,致力于与本地社区合作提供免费的无线 Internet。最近,他搬回到新西兰,管理 PeterJackson 的视觉效果公司 Weta Digital 的基础设施团队。

原创粉丝点击