`
touchmm
  • 浏览: 1055244 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

分布式版本控制(三)

阅读更多

本篇介绍Mercurial。

因为这是我现在用得最多的SCM——最近一个月来几个程序都在用它——所以会说得详细一些。

我是从云风的BLOG里看到关于Mercurial的介绍,他在文章中介绍了常用的几种DRCS,他个人推荐的是Darcs,但我却看中了Mercurial。

Mercurial 的优点在于功能强大并且速度超快(相对Bazaar而言,与SVN相比似乎也快一些),看源码Mercurial也是用Python写的,只不过发布版像 是用PY2EXE等工具编译成的EXE,不知道为什么速度会这么快。缺点是操作远程Repository的功能需要一些服务端的安装配置工作,这点不如 Bazaar方便。

关于Mercurial的使用推荐参考这里的两页文档,很实用。Mercurial的操作命令虽然跟Bazaar差不多,但是设计思路比Bazaar更加“分布”一些,与传统SCM差别较大,可能需要一段时间适应。

安装很简单,在这里下载最新版本的安装程序安装一下就好了。

不过要在Windows下通过SSH使用远程Repository的话,需要一些额外的安装配置工作。如果你使用的不是Windows或者在Windows上已经安装了带有ssh命令的Cygwin,可以跳过下面这一部分,直接到后面的“Mercurial的使用”部分。

首先在这里下载一个PuTTY的工具程序:plink.exe。

然后在Mercurial的安装目录下找到mercurial.ini文件,用编辑器打开,找到[ui]段增加如下两行:

ssh = D:\tools\plink.exe -ssh -pw password
username = username<username@sitename.com>

username项很好理解,就相当于Bazaar里的whoami命令——我不知道为什么Mercurial没有这个命令,而是默认使用loginname@hostname的形式来标记当前用户,大概它觉得这只是标志,没有什么关系,反正它拥有超强的分支/合并功能。

ssh 项就是与SSH有关的配置项目了。按照参考文档中所说的,Mercurial通过ssh操作远程Repository时可以交互提示输入登录密码,但是我 在Windows下试验失败,可能是plink的问题。所以在第一次从远程Repository上clone到本地repository时需要在这里用- pw选项输入登录密码(不过用完就可以去掉这一项了——因为不同的项目可能使用不同的远程Repository,所以就可能使用不同的用户和密码,那个时 候可以配置到项目的.hgrc里,详见后面的说明)。

Mercurial的使用:

完成必要的安装配置工作以后就可以开始使用了。

Mercurial的命令是hg——就是汞。不过说实话,我看到Mercurial这个词想到的是水星。

开始一个项目有两种情况:一是还没有任何Repository的全新项目;二是加入一个已经有的项目——通常已经创建了一个公共的远程Repository。

第一种情况的流程大致是这样:

1、创建本地Repository。在项目的工作目录下运行:

hg init

将会创建一个.hg的目录。

2、配置项目目录(可选)。主要内容有两项,一个是配置.hgignore,把不需要加入管理的文件排除掉;另一个是配置.hgrc,主要是配置ssh(此项仅针对在Windows下用plink进行SSH连接的情况):

.hgignore文件放在项目的根目录上,其内容举例如下:

syntax: glob

*.py[co]
*.swp
*~

使用方法一看就明了,就不解释了。

.hgrc文件放在.hg目录中,其内容举例如下:

[paths]
default = ssh://username@remotehost//home/username/projname
default-push = ssh://username@remotehost//home/username/projname
[ui]
ssh = D:\tools\plink.exe -ssh -pw password

其中paths段里的default/default-push分别是对远程下载上传的默认url,这样在作pull/push操作时可以不必每次输入这个URL。如果SSH不是配置在标准的22端口上,可以在remotehost后面加上(:port)指定端口号。

ui段里的配置与Mercurial.ini是一样的格式和含义。在Windows下使用plink连接SSH需要在这里用-pw选项配置登录密码,以使pull/push操作能够正常工作。

3、检查项目状态。命令为:

hg status

将会列出所有未commit的有效项目文件及其状态——如果在commit以后项目文件未任何修改,此操作将无反馈信息。

比如在刚初始化完以后进行检查,将会列出所有项目文件(被.hgignore排除的文件将不显示),并在前面有一个?标志,表示这些文件尚未被版本管理。

在作完第一次add操作以后检查,则?标志将变为A标志,表示是新增的文件。

如果在commit以后有文件被修改过,则状态检查会列出这些被修改过的文件,并加上M标志。

如果在commit以后有文件被删除或改名,则状态检查会把这些文件加上!标志——改名后的新文件则会作为未管理的新文件而加上?标志。

需要从本地Repository里删除!标志文件则需要使用remove命令,详见后面的说明。

4、将项目文件加入本地Repository。命令很简单:

hg add

即可将项目目录中除了在.hgignore中被排除的文件以外的所有文件都加入到本地Repository中(当然不包括.hg目录,但是会包括.hgignore文件本身)。

5、将变更提交到本地Repository。命令为:

hg commit -m "关于本次提交的说明文本"

6、提交到远程Repository。这里只介绍通过SSH提交的方法,通过HTTP的方法请自行参考相关文档。

首先需要在服务端安装Mercurial,如果是用Linux服务器的话,参考各发行版说明,ubuntu下的安装是很简单的,直接用:

sudo apt-get install mercurial

即可。

然后在服务端的项目目录下创建一个空的Repository(bazaar不需要这样的步骤,它可以用SFTP直接在空目录里远程创建):

cd /home/username/projname
hg init

最后就可以在客户端推送Repository了,在项目目录下运行:

hg push ssh://username@remotehostname//home/username/projname

如果配置了.hgrc里的paths段的default-push,则可以直接用:

hg push

如果提交失败,请检查.hgrc和/或mercurial.ini里是否正确地配置了plink的pw选项,或者是SSH的端口号是否正确。如果配置无误仍然失败,可以用debug选项看一下详细出错信息:

hg push --debug

再来看第二种情况,即已经存在远程公共Repository的情况。

1、首先创建本地的副本:

hg clone ssh://username@remotehostname//home/username/projname

注意,在Windows+plink的情况下,必须先在mercurial.ini里配置plink的pw选项,否则不能正常工作——此时还没有.hgrc可以配置,所以只能用mercurial.ini这个全局配置。

正常执行以后将在当前目录下创建一个projname的子目录,其中包含了本地Repository(.hg目录)和工作目录的全部内容。

2、通常还是需要配置一下.hgrc(可选),不过.hgignore会一起被clone下来,一般不必再配置。

3、status/add/commit/push等命令与第一种情况相同。

现在再来看两种情况都需要的一些别的操作:

1、删除文件:

hg remove path/filename

删除后的文件在status命令结果里将被标志为R。需要用通配符删除多个文件时,可以使用-I选项:

hg remove -I path/wildcard .

2、从远程Repository取得别人加入的更新:

hg pull ssh://username@remotehostname//home/username/projname

同样,如果配置了.hgrc,就可以不用输入URL,直接用:

hg pull

取得更新。不过此操作只是更新本地Repository,你还需要用:

hg update

来更新工作目录下的文件。

如果发生变更冲突,此操作会自动进行merge,对于不能自动merge的部分,会弹出默认编辑器(可以在mercurial.ini里配置)要求手工处理。处理完成后会在本地Repository实现自动合并。

3、关于push的补充:

当向一个远程repository作push操作时,如果之前有别人的push内容,本次push将自动产生一个分支,你需要作一次pull操作把所有分支下载到本地repository进行merge。

4、除了status检查工作目录状态以外,还有几个命令用于检查本地Repository状态:

hg head
hg heads
hg log

其中head命令显示当前本地Repository中工作分支的最新版本的提交信息。heads命令显示当前本地Repository中所有未合并分支的最新版本的提交信息。log命令则是显示提交的历史记录。

Mercurial 还有一套很强的变更打包解包功能,即一个开发者可以把自己本地Repository中的变更记录打包发给别人,别的开发者得到这个变更包以后,可以解包到 自己的Repository里,这样就可以连公共的远程Repository也不需要。这样的“分布式”真是太彻底了。

更多关于Mercurial的信息请参考这里

(未完待续)

分享到:
评论

相关推荐

    分布式版本控制系统-Git详解

    ### 分布式版本控制系统-Git详解 #### 版本控制的发展历程 版本控制技术随着软件开发的需求和技术的进步不断发展。从最初的本地版本控制系统到后来的集中式版本控制系统,再到现在的分布式版本控制系统,每一步...

    分布式版本控制系统_Mercurial

    ### 分布式版本控制系统_Mercurial:深入解析与优势 #### 一、分布式版本控制系统概览 在软件开发领域,版本控制系统的存在至关重要,它不仅帮助开发者追踪代码的变更历史,还支持多人协作,确保代码的一致性和...

    Git分布式版本控制系统权威指南视频教程

    ### Git分布式版本控制系统权威指南知识点概述 #### 一、Git简介与安装配置 - **Git的概念**:Git是一款开源的分布式版本控制系统,用于追踪在软件开发过程中对文件的修改历史,方便多用户协同工作。 - **Git的...

    分布式版本控制系统Git.docx

    ### 分布式版本控制系统Git知识点总结 #### 一、版本控制系统概述 版本控制系统(Version Control System,简称VCS)是一种管理文件变更记录的工具,它能够帮助开发者追踪项目中的每一个变动,确保团队成员之间...

    分布式版本控制Tortoisehg使用的简单说明

    ### 分布式版本控制系统Tortoisehg的使用详解 #### 分布式版本控制的优势与应用场景 在介绍Tortoisehg之前,我们先来了解一下分布式版本控制系统的一些基本概念及其优势。 **分布式版本控制系统**(Distributed ...

    分布式版本控制系统-Git详解

    分布式版本控制系统(DVCS)是一种支持多用户间协作的代码管理方式,它允许每个用户都有代码库的完整副本。Git是最著名的分布式版本控制系统之一,由Linus Torvalds创建,其核心设计理念是速度、简单的设计和非线性...

    分布式版本控制系统Git教程

    分布式版本控制系统Git教程 Git是一种分布式版本控制系统,由Linus Torvalds在2005年开发,旨在更高效地管理Linux内核的源代码。如今,Git已成为软件开发领域最流行的版本控制系统之一。由于其强大的分支管理功能和...

    分布式版本控制系统git的使用详解

    ### 分布式版本控制系统Git的使用详解 #### 一、Git简介 Git是一种先进的分布式版本控制系统,被广泛应用于软件开发项目中。与传统的集中式版本控制系统(如SVN)不同,Git采用分布式架构,这意味着每个开发者的...

    Git是一个开源的分布式版本控制系统,它用于敏捷高效地处理任何大小项目的版本管理 以下是Git的详细教程,包括Git的基本概念、

    gitGit是一个开源的分布式版本控制系统,它用于敏捷高效地处理任何大小项目的版本管理。以下是Git的详细教程,包括Git的基本概念、安装、基本使用、远程仓库操作、分支管理以及IDEA中集成Git的使用等内容。 一、Git...

    02. 什么是分布式版本控制系统 (DVCS)1

    分布式版本控制系统(DVCS)是一种先进的版本控制工具,如Git,它与传统的中央式VCS(如SVN)有着显著的区别。在DVCS中,每个开发者的本地机器上都拥有一个完整的仓库,包含了项目的全部历史版本,这使得开发者可以...

    2011年分布式版本控制系统流行度大调查.pdf

    分布式版本控制系统(DVCS)是一种去中心化的版本控制方法,它允许用户不依赖单一中心服务器来管理文件版本。这种系统的主要优点在于其灵活性,支持多种工作流,具有更快的处理速度,以及大多数操作可以在本地完成,...

    Git 是一个开源的分布式版本控制系统,git 使用基本操作linux命令

    Git 是一个开源的分布式版本控制系统,git 使用基本操作linux命令

    Git构建分布式版本控制器教程.txt打包整理.zip

    Git构建分布式版本控制器教程 Git是一款强大的开源分布式版本控制系统,由Linus Torvalds于2005年为Linux内核开发而创建。它被广泛应用于软件开发,因其高效、灵活和可扩展的特性受到全球开发者喜爱。本教程将深入...

    《Pro Git》---- 分布式版本控制系统

    ### 分布式版本控制系统——Git #### 一、Git简介 **Git** 是一款非常流行的分布式版本控制系统,它由Linux社区开发,免费且开源。Git的设计初衷是为了支持像Linux这样的超大型软件项目的管理,因此其功能强大且...

    Git零基础实战视频教程

    版本控制系统的发展历经了本地版本控制、集中式版本控制以及现在广泛使用的分布式版本控制三个阶段。 本地版本控制系统采用复制整个项目目录的方式来保存不同版本的文件,但由于管理复杂,不易追踪和恢复数据,已经...

    辛星笔记之Pro Git

    版本控制可分为本地版本控制、集中式版本控制和分布式版本控制三类。 本地版本控制,常见于开发者复制整个项目目录进行版本保存,通常会为备份添加时间标记以区分不同版本。这种做法虽然简单,但存在局限性,比如...

    proGIt(中文).pdf

    Git提供了本地版本控制、集中化版本控制和分布式版本控制三类系统的不同解决方案。本地版本控制使用单独的目录保存文件的快照。集中化的版本控制依赖单一的集中服务器保存文件的版本历史,团队成员通过拉取或推送...

    项目从单机演进到分布式需要的技术

    8. 代码管理、项目同步:用于管理分布式系统中的代码和项目,实现代码的同步和版本控制。 9. 日志管理:用于管理分布式系统中的日志信息,实现日志的统一管理和分析。 10. 前后端分离:用于实现分布式系统中的前后端...

    《分布式系统常用技术及案例分析》PDF

    这些技术涵盖了分布式消息服务、分布式计算、分布式存储、分布式监控系统、分布式版本控制、RESTful、微服务、容器等领域的内容。第三部分选举了以淘宝网和 Twitter 为代表的国内外知名互联网企业的大型分布式系统...

Global site tag (gtag.js) - Google Analytics