Mercurial简介

前言
    目前所在的公司的版本控制使用的是Mercurial,它也有一个对应的客户端小乌龟,但是Mercurial跟我们之前使用的SVN有着本质的区别,对于其区别会在下一篇中介绍到,这次主要是带领大家认识一下Mercurial。    

正题

一、概念
    Mercurial 是一种轻量级分布式版本控制系统,采用 Python 语言实现,易于学习和使用,扩展性强。其是基于 GNU General Public License (GPL) 授权的开源项目。

    Mercurial关键在于这个分布式,这也是跟我们之前常用的SVN不一样的地方,那它这个分布式是如何体现的呢,我们会在之后的文章中介绍。

二、常用命令
    对Mercurial的概念有了简单的了解后,下一步就是对其使用和操作,虽然我们有像小乌龟这样的图形化工具来帮助我们更轻松的对Mercurial进行操作,但是了解和熟悉Mercurial命令会让你对其根本原理更加了解,显得更加professional。

    下面我会列出一些常会用到的一些命令,或许你会头晕,纳尼,这么多+_+,但是如果你对其意思了解了其实就很简单(根据单词意思就差不多了再加上熟练使用下)。
    
    基本命令:
hg init:
创建一个版本库

hg add:
将文件放到入库等候队列中. 它们在你执行 commit 操作之前实际上是不会入版本库的

hg commit:
把当前所有文件的状态保存到版本库(保存到当前版本库)
hg com -m "提交输入信息":不需要弹出输入框,直接提交信息

hg log:
显示已经提交到版本库的变更历史(整个版本库的变更历史)
hg log test.txt 即可查询test.txt文件的变更历史
hg log -l num:用于显示最近几个(num)下的变更历史
hg log -r rn -r rn -r rn:显示指定的几个版本的变更历史(rn版本号)
hg log -r rn1:rn2 显示rn1到rn2版本之间的变更历史
hg log -v -r rn显示指定的版本的变更历史(包含变更的文件)
hg log -v -p -r rn显示指定版本变更历史(包含变更内容)

hg revert:
将变更的文件恢复到最近一次提交后的状态
hg revert 具体文件:恢复到上次提交的状态(会生成orig文件)
hg revert --all:恢复当前目录的操作到上次提交的状态

hg status:(hg st)
显示改动过的文件列表
“M” 表示 “Modified” – 文件已经被修改. “!” 表示丢失 – 文件原本应该在那儿, 但是不见了. “?” 表示未知 – 该文件尚未被 Mercurial 管理, 版本库里没有任何信息.

hg diff:
hg diff file:显示一个文件的改动详情,文件自最后一次提交后具体做了哪些改动
hg diff -r versionnum:versionnum file:显示一个文件两个版本之间的改动(小版本在前大版本在后,如1:2)

hg remove:
将文件放到出库等候队列中. 它们在你执行 commit 操作之前实际上是不会从版本库移除的

hg cat:
显示任何文件的任何版本
hg cat -r 版本号 文件:显示指定版本的文件内容
hg cat 文件:显示当前文件的内容

hg update:
将工作目录更新到指定版本

hg tip -vp
显示刚创建的变更集详细信息


    团队协作
hg serve
启动一个 WEB 服务器以便当前版本库能通过 Internet 访问(一般我们客户端不会用的)

hg clone
获取版本库的完整副本
hg clone 源url 目标文件夹:将url版本库复制到目标文件夹
hg clone url:将url版本库复制到当前目录

hg push
把一个版本库的新增变更推送到另一个版本库(需要有ssl)
可以把提交后的更改变更到中央版本库(即把draft状态改为public)

hg outgoing
列出当前版本库等待推送的变更列表
即列出提交的draft状态的变更列表

hg incoming
列出等待pull的变更列表

hg merge
合并两个版本头

hg parent
显示工作目录当前的变更集

hg up
不带任何参数的 hg up 命令会把工作目录更新到 tip (始终为最新的变更集)

hg pull
每次 pull 都是安全的; 它所做的只是让我们得到其他人的变更. 我们可以随时切换到新的变更下工作

    如果你作为团队协作的一员, 你的工作流大概会是这个样子:

如果你有一段时间没有更新代码, 你需要获取其他人已经完成的代码:
hg pull
hg up
修改代码
提交代码 (本地提交)
重复步骤 2~3 直到你的代码完成度还不错, 你决定让其他人都来 “享受” 你的成果
一旦你准备分享你的代码:
用 hg pull 获得其他所有人的变更 (如果有的话)
用 hg merge 将这些变更合并到你的代码中
测试! 以确保合并操作没有出乱子
hg commit (合并结果)
hg push

失误补救
hg revert:
将变更的文件恢复到最近一次提交后的状态
hg revert 具体文件:恢复到上次提交的状态(会生成orig文件)
hg revert --all:恢复当前目录的操作到上次提交的状态

hg rollback:
撤销最后一次提交, 前提是你还没有把它推送 (push) 给其他人(即删除draft状态,但是更改的文件还是没有动,只是将draft状态删除)

hg paths:
显示远程版本库列表(显示push到的中央版本库的url)

hg parent:
显示当前正基于哪 (几) 个变更集进行开发工作(本地工作目录的变更集)

hg backout:
拆除 (backout) 早些时候的变更集. 它会分析变更集, 得出 反向变更集, 并应用于你当前的工作目录

    小结:
    这么多命令是不是被吓到了,但是你根据这几大分类去拆分,然后再去看单词的意思,其实就很简单了,主要是知道在什么情况下使用什么命令。如果你对这些命令明白了以后再操作小乌龟那就轻松很多了。

 

posted on 2013-08-31 22:36  you Richer  阅读(576)  评论(0编辑  收藏  举报