Mercurial hg轻量级分布式版本控制系统
目录
概述
基本使用
Windows平台安装使用
Linux 平台安装和使用
ercurial分支介绍:https://www.mercurial-scm.org/wiki/Branch
Mercurial初学指南:https://www.mercurial-scm.org/wiki/BeginnersGuides
Mercurial 是一种轻量级分布式版本控制系统,采用 Python 语言实现,易于学习和使用,扩展性强。其是基于 GNU General Public License (GPL) 授权的开源项目。
概述
- Mercurial可以使异地开发进行统一的版本管理,比如一个项目有一部分人在银行内部开发无法用外网,另一部分人在公司开发,这两部分人需要一个统一的版本管理工具,mercurial这时候可以发挥作用
- mercurial 同Subversion很多命令相同,所以学习曲线不陡峭,可以比较快的掌握使用。add,commit,branch,tag等命令都是相似的操作方 式。mercurial也是管理一个全局的版本号,同时每个版本号有一个唯一的ID识别,版本号只是顺序号,不同版本库的相同的版本号并没有可比较的意 义,版本ID相同才说明这个版本是相同的
- mercurial对linux,windows,mac平台都有比较好的支持。在windows平台上有基于命令行的mercurial.exe和基于图形界面的TortoiseHg
- DVCS同集中式版本管理的最大不同点是,每个人机器上都有一个版本库,一个版本库如同一个svn branch,所以如何使用branch,并进行合理的合并,同其他人的版本合并也变得异常重要,不然会形成非常的heads,将会形成混乱。
- mercurial通过导出changeset到文件中,可以方便的通过邮件附件的形式来发送到另外一个项目组成员,继而进行导入,从而实现版本同步
- 在当前最火的两个DVCS中,Google code选择了Mercurial,但Git有它的一些优势,比如版本库存储、多个parents方便merge
基本使用
以下使用大多基于命令行形式,版本是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"]带来的改变,然后安装合并程序,再做一次。
- 合并branch : hg merge branchname ,先确认hg branch是什么再执行这个命令。
- hg heads head指的是没有儿子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
Windows平台安装使用
参考 WIndows版本介绍:https://mercurial.selenic.com/wiki/WindowsInstall
Linux 平台安装和使用
pip install mercurial # 通过 pip 安装 Mercurialhg --version # 查看 Mercurial 版本hg clone http://hg.openjdk.java.net/jdk8/jdk8 openjdk8 # 克隆远程仓库hg log # 查看仓库历史hg pull # 拉取代码hg status # 查看仓库状态
代码托管示例:https://bitbucket.org/luciad/webp-imageio/src/default/
Mercurial hg轻量级分布式版本控制系统相关推荐
- 分布式版本控制系统Mercurial(一):Mercurial基本功能介绍
版本控制系统(Version Control System / Revision Control System,或者叫做源码控制系统Source Control System,以下简称VCS),是软件 ...
- 分布式版本控制系统入门
简介 在过去几年,对于分布式版本控制可以给开发过程提供的益处有许多争论.最近,分布式工具已经很成熟了.尽管分布式工具的一些优点最初可能不明显,但是从长期来看,它们提供的灵活性是非常有意义的.阅读完本文 ...
- 【git】—集中式与分布式版本控制系统
[前言] 大家都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了,之前的linux代码是由Linus本人通过手工方式合并代码,后来为了切 ...
- git(2)---git 分布式版本控制系统
集中式vs分布式 Linus一直痛恨的CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢? 先说集中式版本控制系统,版本库是集中存放在中央服务 ...
- 集中式和分布式版本控制系统的区别
集中式: 先说集中式版本控制系统.简单的说就是,版本库是集中的存放于中央服务器的.干活的时候,先要去中央服务器里领取最新的版本,然后在开始干活.干完活在将自己的版本上传到中央服务器. 就好比要改一本书 ...
- Git分布式版本控制系统(上)
Git分布式版本控制系统(上) 链接:https://pan.baidu.com/s/1CgaEv12cwfbs5RxcNpxdAg 提取码:fytm 复制这段内容后打开百度网盘手机App,操作更方便 ...
- Git分布式版本控制系统
Git分布式版本控制系统 git remote -v 查看仓库 一 企业高效持续集成平台场景介绍: 二,GIT分布式版本控制系统: 2.1 Git简介: 2.1.1 git是什么? Git在Wikip ...
- 分布式版本控制系统 Git 教程
简介 Git 是什么? Git 是一个开源的分布式版本控制系统. 什么是版本控制? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 什么是分布式版本控制系统? 介绍分布 ...
- 使用Git分布式版本控制系统
GIT(分布式版本控制系统) Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理 ...
最新文章
- oracle之alter学习笔记
- Oracle HA 之 Server Pool 实战
- 移动端 fixed 固定按钮在屏幕下方,然后按钮被键盘顶上来...顶上来了有没有~
- 知识库如何跟其他业务系统结合
- Leetcode 440.字典序第k小的数字
- python3----字典
- 盘点2021AI Conference Deadlines及论文写作突击要点
- cocos2d-x之物理世界(创建物理世界)
- 《JavaScript 学习指南》
- 渗透测试-postmessage xss
- java dms项目流程_Xinco DMS
- 锂电池电池管理系统 中颖SH367309保护板方案
- bio-linux软件包教程,biolinux包含软件
- 同步练习(Java SE(九))补充
- 计算机系统图标文件,电脑软件的图标图片文件都集中在哪个文件夹??
- android 日历动态图标,android 日历图标显示星期
- python简易版成绩管理系统_Python学生成绩管理系统简洁版
- 多硬盘分区管理fdisk-张丹
- 解读谷歌财报:17亿美元罚款致利润缩减,流量成本激增已迎来下行拐点
- c语言单链表设计报告,单链表实验报告
热门文章
- Safari浏览器无法打开,如何解决Safari在Big Sur中崩溃的情况
- WPS另存为csv表格
- 直播系统压测应该怎么做?
- range()和np.arange()的区别
- js数组对象及字符串对象,完整详细版
- 数据分析用sql还是mysql_学习使用SQL进行数据分析
- 第三章:RocketMQ集群与搭建
- iPhone制作iMovie基本操作
- 有什么软件可以学计算机二级,有没有学习计算机二级以及英语四级的软件推荐?...
- nodejs实现抖音自动关注小姐姐小哥哥神器