Mercurial这工具确实挺有意思的,名字叫水银,用Python写的,跨平台还开源,听起来就很极客。它主打分布式,每个人都能在自己电脑上折腾,不用老盯着中央服务器,这对经常断网或者想离线干活的人来说太友好了。不过我得吐槽一下,它那个命名空间设计真的让人头疼,一旦跟好几个库打交道,代码很容易乱成一锅粥,这点上感觉不如Git严谨。但话说回来,它的命令行确实简单直观,像hg st看状态、hg add加文件、hg ci提交,几步就能上手,对新手特别友好。分支管理也挺灵活,新建切换合并都方便,不过多人协作时合并分支得小心点,不然容易出岔子。我觉得它最大的优势还是离线操作和健壮性,毕竟分布式架构,单点故障影响小。但如果你项目特别复杂,涉及大量协作,可能还是得权衡下命名空间的问题。总之,Mercurial适合轻量级项目或者个人开发者,简单易用是王道,但大规模团队用的话,得先解决代码混杂的风险。
Mercurial电脑版是一款非常优秀的分布式版本控制系统(DCVS),Mercurial英文意为水银,所以常被缩写为Hg。采用Python语言实现,具有高效率、跨平台、可扩展、使用简便且开源等优点,是目前最为流行的版本控制工具之一。Mercurial电脑版是基于 GNU General Public License (GPL) 授权的开源项目。采用了分布式的模型,具有扩展性强,易学易用的优点。同时Mercurial电脑版有着友好的界面,操作非常简单,设计的非常人性化。但是。Mercurial 没有命名空间,一但和很多个版本库交流,很容易导致自己与别人的代码混成一团,就这个意义而言,Mercurial 根本不是个合格的分散式系统。有需要的用户可以下载体验!
Mercurial(轻量级分布式版本控制系统)特色
1、更轻松的管理
传统的版本控制系统使用集中式的 repository,一些和 repository相关的管理就只能由管理员一个人进行。由于采用了分布式的模型,Mercurial 中就没有这样的困扰,每个用户管理自己的 repository,管理员只需协调同步这些repository。
2、更健壮的系统
分布式系统比集中式的单服务器系统更健壮,单服务器系统一旦服务器出现问题整个系统就不能运行了,分布式系统通常不会因为一两个节点而受到影响。
3、对网络的依赖性更低
由于同步可以放在任意时刻进行,Mercurial 甚至可以离线进行管理,只需在有网络连接时同步。
常用命令
一、正常流程
1、查看项目状态
hg st
2、将未加入索引的文件加入索引
hg add 文件
或者 hg add . 将所有的加入索引中
3、提交修改
hg ci -m "提交说明"
4、初次推送代码
hg push --new-branch
5、非初次推送代码
hg push -b 分支号
二、分支管理
1、新建分支
hg branch 分支号
2、查看当前分支
hg branch
3、查看所有分支
hg branches
4、切换分支
hg update 新分支号
5、合并分支
hg merge 分支号
或者 hg merge,即是不加分支号,此时合并自己分支的多个head头,多用于多人操作同一分支后,进行合并操作
三、更新操作
1、更新当前项目状态
hg update
2、更新代码
hg pull
四、回退操作
1、代码未提交时(即没有进行 hg ci -m “提交" 操作),还原代码
hg revert 文件名
或者 hg revert -a 还原所有修改
2、代码提交了一次,还原提交,此时修改的代码还在,特别注意,此操作只能还原一次,多次是不行的
hg rollback
元素介绍
1、Revision
在使用 Mercurial 的系统中每个改动隔离在各自的 repository 里,既避免把不相关的代码混杂起来, 又便于一个接一个的测试每一部分工作,用户做的每个改动称为一个 revision。一般会有一个所有用户都可以访问得到的 repository 保存了项目的“主要”版本,工作repository 是用户自己做事情的地方,实现新的特性,修改漏洞,重构,实验等,当完成改变后,你可以 push 到共用的 repositor y中,即完成了一个 revision。
2、Changeset
一个或多个文件的改变集合在一起形成一个逻辑单元,称为 changeset。每一个 changeset由两部分内容描述,版本号和 changeset 标识,例如:changeset: 207:58e4906e69e3
冒号前面的数字代表版本号,它用来标识本地 changeset。这个版本号只有在用户的本地repository 中才有意义。冒号后面的那个很长的十六进制串是 changeset标识, 它是确定changeset的全局唯一标识符, 在所有包含这个 changese 的 repository 中都相同。多个用户之间讨论changeset,一般使用这个 changeset 标识,而不是上面说的版本号,因为完全有可能每个用户的 repository 中同样的 changeset 版本号不同。
3、Head
Head 表示 repository 中每个分支最新的 revision,通常在合并几个分支时会用到这个概念。
4、Tip
Tip 是最新的一个 changeset 的版本号的一个别名。在命令中任何使用版本号的地方都可以使用 tip 来代替最新的 changeset的版本号。Tip在各个repository中是不同的,同时一个repository 中只有一个 tip。
5、Log
Log 命令按时间顺序从近到远的记录着在 repository 中发生的每一次事件。可以通过指定-v诊断输出选项来获得更多更详细的历史信息,或者指定—debug选项来获得历史信息中的一切细节。
点击星星用来评分