<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Book &#38; Man &#187; mercurial</title>
	<atom:link href="http://www.bookandman.com/tag/mercurial/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bookandman.com</link>
	<description>Software, Design, Investment</description>
	<lastBuildDate>Tue, 29 Nov 2011 06:49:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Mercurial企业级部署</title>
		<link>http://www.bookandman.com/2010/08/mercurial-server/</link>
		<comments>http://www.bookandman.com/2010/08/mercurial-server/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 08:03:32 +0000</pubDate>
		<dc:creator>Chuancy</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[cvs]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[mercurial]]></category>
		<category><![CDATA[mercurial-server]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[代码库]]></category>
		<category><![CDATA[企业级]]></category>
		<category><![CDATA[分布式版本控制]]></category>
		<category><![CDATA[安全]]></category>
		<category><![CDATA[教程]]></category>
		<category><![CDATA[部署]]></category>

		<guid isPermaLink="false">http://www.bookandman.com/?p=861</guid>
		<description><![CDATA[软件代码库和版本控制是软件产品开发管理的核心。目前，虽然集中式代码库工具仍是企业应用主流，例如CVS,Subversion等，但是越来越多的企业已开始采用分布式版本控制工具，以支持更灵活、更敏捷的软件开发工作流。基于分布式版本控制的团队协同不一定需要统一的服务器代码库。但是笔者相信，企业级的软件开发团队为了支持测试和发布，一般都需要有某种方式集中管理所有代码/软件功能以及产品的各种分支版本。 本文介绍基于Mercurial构建的、支持统一/集中式代码管理的一个方案。基于分布式版本控制的团队软件开发工作流不是本文重点，您可参考这个辅导材料了解Mercurial的基本操作，参考A Guide to Branching in Mercurial一文了解Mercurial的分支与合并策略，这份讲稿通过对比Mercurial与Subversion介绍Mercurial的工作流和基本使用。 与传统的集中式代码库系统（例如：CVS, Subversion等）相比，分布式版本工具（DVCS，例如：Mercurial和Git）支持十分灵活的软件开发工作流，越来越多的项目、产品团队以及需要自主开发软件的企业/组织希望可以利用分布式版本控制带来的好处。但是，很多开发部门决策者对分布式版本工具在企业环境的部署和应用存在误解，特别是对分布式版本控制的安全性和权限控制心存疑虑。企业级软件开发与开源软件的开发模式不同，企业级软件开发对源代码版本控制一般有以下需求：严格的用户身份认证、按角色分配代码权限、按职责分工安排工作流，以及安全性等其它方面都有特别的要求（例如详细的访问日志等）。 集中式代码库中包含所有软件源代码提交(commit)的历史，因为每个被认为是合适的代码改动都会集中提交到代码库服务器。分布式代码库则可分别由各个开发人员、测试人员、发布工程师、开发经理等各自掌握，每个人手头的拷贝都可以是一个独立的分支(branch)和代码库（包括人为地指定的“服务器版本”代码库），都有各自的版本历史，这是因为分布式代码库支持本地提交——任何能独立思考、喜欢创造性地解决问题的程序员都喜欢此功能。本地提交形成的版本历史也许只对开发人员或变更的所有者有意义，而只有在集成测试时，才需要将所有人的、各自测试好的代码变更集中起来，方便更高级别的功能测试。此时，部署一个能汇总所有人的代码变更的代码库就十分必要。从这个角度看，分布式版本控制工具是可以兼容和满足软件代码的集中管理需求的。 本文以Mercurial这款比较流行的分布式版本工具为例，通过服务器端管理工具mercurial-server的安装配置实例介绍如何安装、配置适合企业级部署的、集中式的Mercurial代码库。下面的实例中所采用的软件环境如下，如你的环境不同于本文实例，请自行准备对应平台上的同类工具软件： 服务器操作系统是Ubuntu Server，但是Debian等其它*nix类的操作系统也同样适用； 客户机Windows XP，安装TortoiseHG，并准备好puttygen.exe； 为了简洁，实例中所有通过TortoiseHG图形界面完成的操作都用同等作用的Linux命令行表示。 1. 背景知识和准备工作 要理解本方案并能跟随下面的指引完成服务器端的配置，你必须首先： 对公钥基础设施（非对称加密）的有基本的常识； 已通过puttygen.exe生成你自己的RSA密钥对（公钥+私钥），配置代码库其他用户之前则需要先获得他们的公钥； 熟悉基本的Linux命令行工具。 2. 安装mercurial和mercurial-server 首先，更新你的软件包并安装mercurial和mercurial-server。 $ sudo apt-get update $ sudo apt-get install mercurial mercurial-server Mercurial-server安装完毕后，系统将自动新建系统用户hg，用于管理所有代码库用户与服务器端的Mercurial代码库直接的互动。 3. 配置mercurial-server管理员（root）帐号 刚安装好的mercurial-server默认不接受任何SSH登录的用户，你必须为自己创建一个管理员帐号。因为所有的身份认证和权限都是通过密钥完成，你必须通过Ubuntu Server的root权限来复制你自己的公钥到mercurial-server管理员的密钥目录下。 $ sudo cp my_rsa_public_key.ppk /etc/mercurial-server/keys/root/MYUSERNAME $ sudo -u hg /usr/share/mercurial-server/refresh-auth 上面第二行命令的作用是：告诉mercurial-server你已复制自己的公钥到管理员密钥目录，并授权此公钥所代表的用户作为mercurial-server管理员。 4. 管理mercurial-server 通过hgadmin库管理用户和权限 只要通过上面步骤配置好第一个（系统管理员）用户后，mercurial-server的其他用户和代码库权限分配只需要通过管理配置hgadmin代码库即可完成！下面是（第一次）从你的mercurial-server服务器获取hgadmin代码库的命令（当然，你也可通过TortoiseHG完成等价的操作）。 $hg clone ssh://hg@my_mercurial_server/hgadmin 添加新用户 当你作为管理员用户把用于管理的hgadmin代码库clone到本地机器后，即可通过把代码库用户的公钥导入到此库的对应目录中来实现用户授权，以及相关代码库的权限配置。 $ cd hgadmin $ mkdir -p keys/users/ $ cp ~/li_ming_RSA_pub_key.ppk keys/users/liming $ hg add adding keys/users/liming $ hg commit -m "Added Li Ming's public key" $ hg push 当然，每个代码库用户也可以有多个不同的公钥。例如你们公司允许开发人员李明同时在家或公司办公室上班，好让他可以边开发软件边给自己刚出生的女儿喂奶，因为他的太太韩梅梅没有空。此时，你可以把属于李明的不同公钥复制到以他名字命名的密钥目录下： $ cd hgadmin $ mkdir -p keys/users/liming $ cp ~/li_ming_RSA_pub_key.ppk keys/users/liming/home [...]]]></description>
		<wfw:commentRss>http://www.bookandman.com/2010/08/mercurial-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mercurial作（代码库）分支指南</title>
		<link>http://www.bookandman.com/2009/08/mercurial-branching-guide/</link>
		<comments>http://www.bookandman.com/2009/08/mercurial-branching-guide/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 14:50:10 +0000</pubDate>
		<dc:creator>Chuancy</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[branching]]></category>
		<category><![CDATA[mercurial]]></category>

		<guid isPermaLink="false">http://www.bookandman.com/?p=474</guid>
		<description><![CDATA[A Guide to Branching in Mercurial]]></description>
		<wfw:commentRss>http://www.bookandman.com/2009/08/mercurial-branching-guide/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

