Mercurial的简要用法

来源:互联网 发布:java 大小写 编辑:程序博客网 时间:2024/04/29 01:16

简介:
Mercurial 是一种轻量级分布式版本控制系统,采用 Python 语言实现,易于学习和使用,扩展性强。其是基于 GNU General Public License (GPL) 授权的开源项目。相对于传统的版本控制,具有如下优点:
更 轻松的管理。传统的版本控制系统使用集中式的 repository,一些和 repository相关的管理就只能由管理员一个人进行。由于采用了分布式的模型, Mercurial 中就没有这样的困扰,每个用户管 理自己的 repository,管理员只需协调同步这些 repository。 
更健壮的系统。分布式系统比集中式的单服务器系统更健壮,单服务器系统一旦服务器出现问题整个系统就不能运行了,分布式系统通常不会因为一两个节点而受到影响。 
对网络的依赖性更低。由于同步可以放在任意时刻进行,Mercurial 甚至可以离线进行管理,只需在有网络连接时同步。
版 本控制系统中的 repository 就像一个仓库一样,用来存储被管理的数据文件,包含数据文件的不同版本。传统的版本控制系统中,这样的 repository 是集中式的。除了这样一个集中式的 repository 之外,每个用户会有一份自己的工作版本拷贝。用户通过命令同步自己的拷贝和集中式的 repository。分布式版本控制系统中的 repository 则采用的是对等网络式的方式。传统集中式的管理中, 只有一份 repository,其他的只是工作拷贝, 不包含额外的版本。分布式的管理当中,每个用户所持有的都是一 个真实的 repository,当中存储有不同的版本信息和维护一个 repository 的必要的辅助元数据。这样一个对等工作模式当中,用户通过交换 changeset 来完成同步。
这样做的 一些优点在于,工作的并行度将大大的提高。每个用户都可以带着这样的repository,从这里他可以把当前的工作拷贝切换到 repository 里面存储的任何一个版本。这个版本可以是之前正在工作的 版本,现在需要合并进一些别人的意见,也可以是用户私有的一个版本,当前正在做很多前瞻性的工作,还没有能同步给其他用户使用。也同样是因为这样的模式, 每个用户可以任意把自己的 repository 当中的一个版本交换给其他用户,而不需要对自己手头正在工作的版本进行回退。

开始使用:
Mercurial 的命令相当简洁,所有 Mercurial 命令都以 hg 开头,如同 Git 一般。命令的基本格式如下:
$ hg command [options]

克隆一个 repository:
我们使用 clone 命令来克隆一个 repository, 它生成一个 repository 的完整副本。这样我们就可以在本地拥有一个私有的 repository working copy 来进行编码工作了。例如运行如下命令创建 OGRE 的本地副本:
$ hg clone http://bitbucket.org/sinbad/ogre/
如果没有出现什么差错的话, clone 命令的输出会是如下形式:
destination directory: ogre 
requesting all changes
    adding changesets 
    adding manifests 
    adding file changes 
    added XXX changesets with XXX changes to XXX files 
    XXX files updated, XXX files merged, XXX files removed, XXX files unresolved
不同于 svn,  hg 只在项目本地副本的根目录创建一个  .hg 目录, 记录 meta data。除了通过 clone,每个用户都可以使用 init 命令初始化一个本地目录作为 repository, 只需要在该目录下运行如下命令:
$ hg init

创建 changeset
hg 提供了一个非常高效的命令用于添加所有新增文件以及剔除所有被删除了的文件,只需要在项目目录下或任意子目录下运行如下命令:
$ hg addremove

查看文件变更
在创建 changeset 之前,你还有机会确认一下那些文件曾经修改过,这个时候可以使用 status 命令。
$ hg status
M XXX.XXX
M XXX.XXX
另外,使用 diff 命令可以查看文件实际内容的改变。diff 的输出 是通用的 patch 格式,易于通过邮件或拷贝交换 changeset,这个在网络恶劣的情况下十分有意义。

提交至本地 repository
创建了 changeset 之后我们就可以使用 commit 提交至本地 repository 了。
$ hg commit -u'<mail@gmail.com>' -m' initial commit'
这个命令中 -u选项用于指定用户,-m选项用于制定提交信息。这两项是可选项,如果没有制定用户名,系统会自动以当前登陆用户@当前计算机节点名作为用户名,如果用户在 ~/.hgrc 中配置过默认提交用户名,则以~/.hgrc为准。
以下是配置示范:
[ui]
username = <mail@gmail.com>
提交信息在命令中若没有制定,则会弹出一个编辑其窗口,在其中填入提交信息,保存推出即可提交成功,我的系统默认编辑器是 vi, 这个也可以在 ~/.hgrc 中加以更改,比如:
[ui]
username = <mail@gmail.com>
editor = nano
merge = XXX
这样就配置了使用 nano 作为默认的编辑器,XXX 作为默认的 merge 工具。

与其他 repository 同步
Mercurial 使用 push 和 pull 与其他 repository 同步。其中 push 将本地的新的changeset和其他repository 分享,例如在 clone 得到的本地 repository 目录下执行:
$ hg push 
则 提交所有新的本地更改回原 repository,或着执行 hg push XXX,则将更改提交到 XXX repository。引入他人的改动则需使用 pull 命令,形式上和 push相同。当执行 hg pull 获得 changesets 之后,需要执行 hg update 获得更新了的 working copy。hg merge 则是当发生冲突时用于合并分支的命令。

除此之外:
hg log 可以用来查看日志。不同于 svn,Mercurial 的日志都是在本地的,因此不用通过网络,速度相当的快。
hg export 用于到处项目的一个tarball,方便发布。
hg head 可以查看 repository 每个分支的最新版本。
hg tip 可以查看最新一个 changeset 的版本号和别名。

小技巧:
每个 Mercurial 项目都可以在项目根目录配置一个 .hgignore 文件,用来更改 Mercurial 搜索文件更改时的行为。
.hgignore 文件中没行制定一个文件名或pattern,凡是符合规则的文件都不会被 Mercurial 跟踪,也不会被提交到任何 repository。
例如:
syntax: glob
*.orig
*.o
*.ko
*~
.DS_*
._*
*.mod.c
*.pyc
*.cmd
*.mod
tmp
其中第一行指定语法,这里是 glob。共有两个选择:
regexp: Regular expression, Python/Perl syntax.
glob: Shell-style glob

好了 hg 快速上手指南到此结束,祝使用愉快。
原文:
http://hi.baidu.com/yoctor/blog/item/0bb4ccd519648dc851da4b33.html

原创粉丝点击