Mercurial简介

时间:2022-03-22 21:38:24
前言
    目前所在的公司的版本控制使用的是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) 早些时候的变更集. 它会分析变更集, 得出 反向变更集, 并应用于你当前的工作目录

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