Mercurial使用简单介绍zz
Mercurial使用简单介绍
概述
- 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 foohg merge barhg 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
转载于:https://www.cnblogs.com/SunWentao/archive/2009/08/20/1550482.html
Mercurial使用简单介绍zz相关推荐
- VAE 模型基本原理简单介绍
VAE 模型基本原理简单介绍 1. 编写目的 2. 推荐资料 3. 相关背景 3.1 生成模型(Generative model): 3.2 隐变量模型(Latent Variable Models) ...
- (一)Ns3网络仿真软件简单介绍
(一)Ns3网络仿真软件简单介绍 1. 什么是NS-3? NS是一个开源离散事件驱动网络模拟器.官方定义:(fromhttp://www.nsnam.org/) ns-3 is a discrete ...
- 遗传算法的简单介绍以及模式定理的简单证明
遗传算法 遗传算法(Genetic Algorithm,GA),最早是由美国的John holland在20世纪70年代提出.算法通过模拟达尔文生物进化论的自然选择以及遗传学机理的生物进化过程来搜 ...
- 2021年大数据ELK(十八):Beats 简单介绍和FileBeat工作原理
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Beats 简单介绍和FileBeat工作原理 一.Beats 二.FileB ...
- 2021年大数据ELK(十五):Elasticsearch SQL简单介绍
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Elasticsearch SQL简单介绍 一.SQL与Elasticsear ...
- 2021年大数据ELK(二):Elasticsearch简单介绍
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 一.Elasticsearch简介 1.介绍 2.创始人 二.E ...
- iOS开发UI篇—多控制器和导航控制器简单介绍
iOS开发UI篇-多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个vi ...
- 简单介绍一下R中的几种统计分布及常用模型
统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...
- LVS(Linux Virtual Server)三种负载均衡模型和十种调度的简单介绍
LVS(Linux Virtual Server)三种负载均衡模型和十种调度的简单介绍 LVS (Linux Virtual Server) LVS(Linux Virtual Server)其实就是 ...
- dubbo学习过程、使用经验分享及实现原理简单介绍
一.前言 部门去年年中开始各种改造,第一步是模块服务化,这边初选dubbo试用在一些非重要模块上,慢慢引入到一些稍微重要的功能上,半年时间,学习过程及线上使用遇到的些问题在此总结下. 整理这篇文章差不 ...
最新文章
- 意料之外,情理之中,Spring.NET 3.0 版本发布-
- 摩尔投票法(力扣- -229. 求众数 II)
- DecimalFormat 用法
- iOS CoreImage之滤镜简单使用
- JS onclick 传参异常问题
- QLineEdit使用正则表达式小剖析
- 怎么配置FlyMcu(stm32串口下载软件)有图 超详细
- linux i2c驱动协议
- Navicat for my sql 数据结构导出(制作数据字典)
- 完整的企业机房设计(上)
- 关于安卓脚本打包apk
- 100个Python实战项目(七)实现摩斯密码翻译器
- 移动硬盘数据错误循环冗余检查,要怎么恢复资料
- 记录解决Win10底部任务栏转圈圈问题的过程(Windows假死)
- 值传递,指针传递,引用传递的区别
- 学嵌入式为什么要学Linux?
- 停车场车牌识别收费系统厂家
- 手机号码归属地查询(php+redis)
- android程序开发笔记
- kafka系列之Coordinator(14)
热门文章
- H5 FormData 表单数据对象详解 与 Json 对象相互转换
- 在mysql中怎么存储表情符号,如何在MySQL数据库中存储表情符号字符
- 阶段3 2.Spring_09.JdbcTemplate的基本使用_4 JdbcTemplate的CRUD操作
- 阶段3 2.Spring_08.面向切面编程 AOP_2 spring中的aop术语和细节
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_1_序列化和反序列化的概述...
- 图论--最短路径--观光旅游
- jQuery(非插件)制作商城放大镜效果
- linux的sudo apt-get install 和dpkg -i package.deb命令
- shell的EOF用法
- java对【配置文件的读取】与【读配置文件时的路径问题】代码总结