标题：Mercurial
轻量级分布式版本控制系统
特点相对于传统的版本控制，具有如下优点：
更轻松的管理。传统的版本控制系统使用集中式的 repository，一些和 repository相关的管理就只能由管理员一个人进行。由于采用了分布式的模型，Mercurial 中就没有这样的困扰，每个用户管理自己的 repository，管理员只需协调同步这些repository。 更健壮的系统。分布式系统比集中式的单服务器系统更健壮，单服务器系统一旦服务器出现问题整个系统就不能运行了，分布式系统通常不会因为一两个节点而受到影响。 对网络的依赖性更低。由于同步可以放在任意时刻进行，Mercurial 甚至可以离线进行管理，只需在有网络连接时同步。Mercurial 里的元素Revision
在使用 Mercurial 的系统中每个改动隔离在各自的 repository 里，既避免把不相关的代码混杂起来， 又便于一个接一个的测试每一部分工作，用户做的每个改动称为一个 revision。一般会有一个所有用户都可以访问得到的 repository 保存了项目的“主要”版本，工作repository 是用户自己做事情的地方，实现新的特性，修改漏洞，重构，实验等，当完成改变后，你可以 push 到共用的 repositor y中，即完成了一个 revision。
Changeset
一个或多个文件的改变集合在一起形成一个逻辑单元，称为 changeset。每一个 changeset由两部分内容描述，版本号和 changeset 标识，例如：
changeset: 207:58e4906e69e3 
冒号前面的数字代表版本号，它用来标识本地 changeset。这个版本号只有在用户的本地repository 中才有意义。冒号后面的那个很长的十六进制串是 changeset标识, 它是确定changeset的全局唯一标识符, 在所有包含这个 changese 的 repository 中都相同。多个用户之间讨论changeset，一般使用这个 changeset 标识，而不是上面说的版本号，因为完全有可能每个用户的 repository 中同样的 changeset 版本号不同。
Head
Head 表示 repository 中每个分支最新的 revision，通常在合并几个分支时会用到这个概念。
Tip
Tip 是最新的一个 changeset 的版本号的一个别名。在命令中任何使用版本号的地方都可以使用 tip 来代替最新的 changeset的版本号。Tip在各个repository中是不同的，同时一个repository 中只有一个 tip。
Log
Log 命令按时间顺序从近到远的记录着在 repository 中发生的每一次事件。可以通过指定-v诊断输出选项来获得更多更详细的历史信息，或者指定—debug选项来获得历史信息中的一切细节。Mercurial 的操作（hg）Mercurial通过hg命令加上关键字来尽进操作，可以远程同步、上传代码。
用法　
拷贝（同步）源码并提交修改：　
$ hg clone repository （这里repository是源码的地址）　
$ cd hello　
$ (edit files)　
$ hg add (new files)　
$ hg commit -m 'My changes'　
$ hg push　
创建新的hg项目，并提交：　
$ hg init (project-directory)　
$ cd (project-directory)　
$ (add some files)　
$ hg add　
$ hg commit -m 'Initial commit'
Mercurial-Spectre
Mercurial - Spectre 
最近更新: 6.43bWindows下的基本操作以下使用大多基于命令行形式，版本是1.2.11
因为本地即是版本库的服务端也是版本库的客户端，所以首先得区分好版本库和工作目录两个概念，版本库存放了所有的版本，工作目录只是某个特定的版本，这个概念同svn是一致的，只是svn的版本库不在本地，而在集中的一台服务器上。
hg init创建新仓库，版本库的文件放在一个.hg的文件夹下面
hg add添加未版本化的文件
hg commit提交修改，使用-m 填写comments，同svn是一样的
hg tip查看当前版本库的最新版本，注意：不是当前工作目录的最新版本。tip是版本库最新版本的意思
hg parents查看当前工作目录的最新版本，如果这个版本有多个parent，会显示出来，如果没有则不显示。parent是指某个版本的前一个版本，如果某个版本通过 两个版本merge而来，则会出现多个parents。mercurial还不支持超过两个的parents，也就是说只能将版本两个两个的合并，合并3 个版本需要操作2次，合并4个版本需要操作3次，依次类推，如果碰到8个版本需要合并，则需要合并7次...
hg clone克隆一个版本库到本地，当项目开始的时候，建议在一台电脑上init项目后，然后大家从他那clone出来，而不是各自init。
hg pull从另一个版本库更新版本到本地
hg push将本地版本库更新到其他版本库中，其他版本库需要开通ssh服务，Windows下需要cygwin来启动ssh，linux下用openssh实现。Windows客户端连接ssh服务器时，需要在mercurial.ini的ui段配置，如下 
[ui]
ssh = "C:\Program Files\TortoiseHg\TortoisePlink.exe"
putty.exe 无法配合hg使用。
TortoisePlink.exe对于 ssh://xx/ 之后的路径需要再加一个"/" 以示根路径，如下：
ssh://192.168.107.129//home/arthur/hg/hello
hg incoming将本地版本库同其他版本库进行比较，看看有哪些changeset在其他版本库中可以pull过来
hg outgoing将本地版本库同其他版本库进行比较，看看有哪些changeset可以push到其他版本库中
hg update更新工作目录，默认参数是tip，参数也可以是版本号、tag名字、branch名字。svn中的切换branch/tag通过这个命令来实现
hg tag制定一个永久的版本号，tag存放在.hgtags文件中，这个文件也需要版本化
hg branch显示当前branch，或者新建一个branch，默认的branch名字是default。
hg diff对比版本间的差异
hg merge合并版本到当前工作目录，hg pull之后会提示hg update,hg update之后如果提示hg merge，这时候的merge是在最新版本的基础上进行的merge，merge之后所作的修改需要通过commit来生成新的版本号。 
合并branch : hg merge branchname ，先确认hg branch是什么再执行这个命令。
当一个branch的历史使命完成的时候，这时候需要决定是基于这个branch新开一个branch，还是在某个之前的版本开立branch. default是一个没有创立任何branch时的默认branch名字。
如果希望继续工作在default branch下，则需要先hg update default,然后再考虑需要合并哪些版本到default里面，之后就可以在default下一直工作了。
对于开了多个branch需要合并到default时，需要一个个branch来合并，诸如这样: 
hg merge foo
hg merge bar
hg ci -m "merge foo and bar to default
"
在windows下，如果安装了beyond compare，会自动被调用出来。
显示三个窗口：本地文件、基文件（(在分支分开前的最后一个版本））、其他文件（外来的文件）。这种合并模式同svn是一样的。
merge做完之后，需要hg ci提交修改，这时可以看到tip 信息中的parent有两个，表明是从两个版本中merge过来的。
beyond compare对于冲突有三个基本选项：Take left, take center, take right，分别对应以上三个文件的内容。还有其他几个选项也很容易明白。有冲突时还可能需要手工输入内容。
另外，如果我们没有安装图形合并程序， 我们就会开启文本编辑器来访问需要合并的文件。用手工来做这些事情是非常容易出错并且繁琐的。 最好是退出编辑器并用hg rollback指令来清除["Pull"]带来的改变，然后安装合并程序，再做一次。
hg headshead指的是没有儿子chaneset的changeset，也就是版本树的叶子节点，多个叶子节点可以进行合并为一个叶子， branch heads指那些给了tag但还没有儿子changeset的changeset。 用hg heads显示当前库所有的heads , 如果存在多个heads则说明有多条并行开发的路径，这时需要考虑是否需要合并。
hg serve -n "hellohg" -p 80运行网络服务。之后可以通过hg pull http://localhost/hellohg 来下载这个版本库。这是一个临时性的便捷的提供pull版本库服务的方法
hg export导出changeset，默认导出tip,需要用重定向来导出到文件中,之后这个文件可以通过邮件附件发出，这样可以实现无网络连接状态下的版本同步
hg import导入changeset
DOTA英雄-幽鬼
英雄介绍诞生于远古世界早期的黑暗，Mercurial代表着那些死去多时的灵魂的狂怒和怨恨。和死灵与恶灵一样，它神出鬼没，并以不寻常的热情纠缠那些还活着的生命，而且完全不受自然法则的约束。它还可以利用它垂死友军的生命能量去摧毁天灾军团的敌人。一切都为了冰封王座的荣耀。
初始射程 : 100 | 初始攻击间隔 : 1.7
初始移动速度 : 295 | 初始防御 : 3.3
基本属性 : 敏捷 / Agility | 初始攻击力 : 46 - 50
初始力量值 : 19 | 初始敏捷值 : 23 | 初始智力值 : 16
力量增长系数 : 2.0 | 敏捷增长系数 : 2.2 | 智力增长系数 : 1.9幽鬼之刃幽鬼之刃 (Spectral Dagger) [D]
幽鬼掷出致命的匕首，匕首对划过的敌方单位造成伤害并留下一条暗影之径。被匕首击中的敌方英雄在移动时也会留下一条暗影之径。幽鬼在暗影之径上进入相位移动的状态，无视地形。暗影之径同时提升幽鬼/降低敌方单位的移动速度。
施法距离：2000
冷却时间：25秒
魔法消耗：130/140/150/160点
第一级 - 造成50点的伤害，提升/降低5%的移动速度。
第二级 - 造成100点的伤害，提升/降低9%的移动速度。
第三级 - 造成150点的伤害，提升/降低14%的移动速度。
第四级 - 造成200点的伤害，提升/降低18%的移动速度。荒芜荒芜 (Desolate) [L]
在敌方英雄周围400范围内没有友军存在时，幽鬼和他的镜像在对目标英雄的攻击中能够造成额外的无视防御和抗性的伤害。
英雄攻击 神圣（魔法）伤害
冷却时间：0.4秒
第一级 - 附加15点的伤害。
第二级 - 附加25点的伤害。
第三级 - 附加35点的伤害。
第四级 - 附加45点的伤害。折射折射 (Dispersion) [I]
使幽鬼有一定几率闪避伤害，并将伤害折射给她周围400范围内的敌方单位，并造成0.5秒的晕眩（对英雄造成0.01秒的晕眩）。
不能闪避足以致命的伤害。
英雄攻击魔法伤害
第一级 - 有4%的几率将伤害折射到她周围400范围的区域中去。
第二级 - 有8%的几率将伤害折射到她周围400范围的区域中去。
第三级 - 有12%的几率将伤害折射到她周围400范围的区域中去。
第四级 - 有16%的几率将伤害折射到她周围400范围的区域中去。鬼影重重鬼影重重 (Haunt) [T]
幽鬼在所有敌方英雄身后制造一个鬼影进行攻击。鬼影不可控制，拥有本体50%的攻击力，受到200%的伤害。
幽鬼可以选择以自身代替某个鬼影。
冷却时间：150/120/90秒
魔法消耗：150点
第一级 - 持续4秒。
第二级 - 持续5秒。
第三级 - 持续6秒。版本历史6.28
·新英雄，Mercurial - 复仇天魂
6.33
·英雄更名为幽鬼
·初始攻击由44-48提升至62-66；移动速度由300下降至295；初始力量由17上升至19；智力成长由1.3上升至1.6
·相位移动替代为新技能，幽鬼之刃
·复仇更改为普通技能并改善了作用机理
·完全重写了鬼影重重并作为大招
6.33b
·移除了镜像所拥有的折射技能
·鬼影重重第3级持续时间由6.5秒下降至6秒
6.34
·基础攻击由62-66下降至49-53
·将复仇替换为新技能，荒芜
·幽鬼之刃的持续时间下降
6.36b
·敏捷成长由2.6下降至2.2
6.42
·荒芜的判定范围由900下降至400 
6.48
.折射变为折射攻击5%10%15%20%