Mercurial(Hg)基本操作

来源 https://www.cnblogs.com/gb2013/archive/2012/05/18/Mercurial_Basic.html

Mercurial简介

Mercurial是一款非常优秀的分布式版本控制系统(DCVS),具有高效率、跨平台、可扩展、使用简便且开源等优点,是目前最为流行的版本控制工具之一。Mercurial英文意为水银,所以常被缩写为Hg。在使用Mercurial之前,我曾经使用过VSS(已停止更新)和SVN,也尝试过微软的TFS,它们都不是分布式版本控制系统,换句话说,就是当源码服务器故障或网络不通时,你将无法提交你所做的本地修改。这也是之前的版本控制工具与Mercurial最大的不同,目前与Mercurial类似的工具还有Git,但由于对Windows系统的支持做得不是很人性化,我个人不太喜欢。

最开始接触Mercurial时,由于长期使用SVN的缘故,已经习惯了依赖中央源码服务器,也曾感觉Mercurial的操作很别扭,不是很方便。但当我在项目中使用了一段时间以后,就喜欢上这个它了。下面放出Mercurial相关的一些信息:

  1. Mercurial官网:http://mercurial.selenic.com/
  2. Mercurial客户端(TortoiseHg):http://tortoisehg.bitbucket.org/
  3. 支持Visual Studio中使用Mercurial的插件VisualHg:http://visualhg.codeplex.com/,如果你使用的是Visual Studio 2010或更高版本,可以直接从扩展管理器中获取此插件。
  4. Mercurial官方中文教程:http://mercurial.selenic.com/wiki/ChineseTutorial
  5. 免费的代码托管服务:https://bitbucket.org/,免费帐户可以管理5个用户,可以托管公共和私有项目。

Mercurial安装

TortoiseHg本身集成了Mercurial的服务器功能,因此我们只需要获取最新的TortoiseHg并安装,即可在本地进行文件的版本控制。接下来你需要下载并安装VisualHg以便于我们在Visual Studio中使用Mercurial。

TortoiseHg是集成在资源管理器中的,在安装完成以后,我们在桌面空白处点击右键便可以看到TortoiseHg的菜单项,具体见下图:

在Visual Studio中,我们在解决方案管理器中的解决方案文件或项目文件上点击右键,便会出现如下菜单:

如果你操作后看到的结果和上面一样,那说明你已经完成了Mercurial的本地安装,此时你已经可以用它来进行本地文件的版本控制,如果愿意,你甚至可以在本地架设一个Mercurial版本控制服务器。

Mercurial基本操作

1.创建版本库

在任意文件夹上,点击右键,便可看到如下菜单:

在TortoiseHg的子菜单中选择“在当前位置创建版本库”,出现新的会话窗口:

勾选“添加特殊文件”选项,此处添加的便是Hg的全局忽略文件。以Visual Studio为例,全局忽略规则如下:

# Ignore file for Visual Studio 2008
 
# use glob syntax
syntax: glob
 
# Ignore Visual Studio 2008 files
*.obj
*.exe
*.pdb
*.user
*.msi
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.cache
*.ilk
*.log
*.lib
*.sbr
*.scc
*.sws
*.pdsync
*.pdsyncu
~*.doc
*.orig
[Pp]ackages*/
[Bb]in*/
[Dd]ebug*/
[Ll]ogs/
Backup/
obj/
[Rr]elease*/
_ReSharper*/
_UpgradeReport_Files/
[Tt]est[Rr]esult*
[Bb]uild[Ll]og.*
*.[Pp]ublish.xml
UpgradeLog.XML
*.csproj.user
*.ncb
*.suo

点击创建以后,本地版本库就创建完成了。此时你就看到了那个熟悉的图标—绿色的对勾,是的,和SVN样式相同的图标。

2.提交变更集到本地版本库

我们可以在Visual Studio的解决方案管理器中,右击解决方案,然后就可以看到如下菜单:

选择Commit后,可以看到提交会话窗口:

强烈建议大家写一些有语义明确、对变更集描述清晰的提交日志。也可以直接到解决方案的文件夹上右击,操作与同面描述的相同。

3.使用Bitbucket管理项目源码

如果当前项目是个人开发的小型项目,上述操作便可满足需求。但对于有多人参与合作开发的项目来说,只进行变更集的本地提交,显然是不够的。在没有稳定的私有源码服务器的情况下,我目前(推荐)的做法是,使用Bitbucket来托管项目源码。免费版本的Bitbucket帐户,可管理的团队成员上限为五人,对于一般的开发团队来说,我想这已经足够了。好了,闲话少说,我们看一下怎么利用Bitbucket来管理项目源码。

注册一个Bitbucket帐号,登录以后,在控制面板页面,可以看到如下的一些信息:

左侧是你参与的项目的最新的变更信息以及事件的操作人,右侧是你所参与或主持的项目。其中,封闭的锁说明当前项目为私有项目,只能由项目所有者指定的开发人员进行源码提交和修改,并且只对团队成员可见;开发的锁则说明是公共项目,源码对所有人可见,任何人都可以查看并下载源码。点击Repositories旁边绿色的加号,可以创建新的版本库;也可以使用旁边的导入版本库的功能,从其他源码服务器上同步源码并创建版本库。选择新建版本库后,可以看到下面的会话界面:

编程语言下拉列表中已经包含了几乎所有的开发语言种类,虽然这个对版本控制影响并不是很大,但我还是建议你选择正确的语言类型。项目创建成功后,便进入了项目的管理页面,具体见下图:

每个选项卡代表一个功能模块,这里我不再赘述,我只就当前介绍要用到的概览(Overview)和管理(Admin)功能做一下说明。概览页面中,克隆(clone)后面的便是当前项目的同步URL。在本地文件夹的空白处点击右键,选择TortoiseHg—>clone:

弹出的会话窗口中,在“源”那一栏填写克隆地址,点击克隆即可将版本库下载至本地:

打开克隆到本地的版本库,目录结构如下:

其中,.hg目录即是本地的Mercurial版本库。

4.获取外部变更集

前面已经描述了怎么提交变更集到本地版本库,在多人合作开发的情况下,我们还需要将本地变更集同步到中心服务器上。在同步之前,我们要先获取外部变更集。操作如下:

在Hg工作台(桌面空白处右键可见)中,选择要操作的项目,如图所示,点击向下拉取的图标:

在弹出的会话窗口中填写Bitbucket网站中的帐号密码:

获取完成后,可看到如下分枝列表:

如果分枝列表的形状如下图所示,说明在你将本地变更集同步至服务器之后,团队中其他成员已进行过合并操作,此时只需要在右键菜单中直接选择更新(Update)即可:

否则,需要进行外部变更集和本地变更集的合并。

5.合并变更集

对于两个不同的分枝,需要进行合并操作。如下图所示,从菜单中选择“与本地库合并”:

在合并会话窗口中,取消“尽量自动解决合并的冲突”选项(个人感觉这个自动合并不但作用不大,反而影响合并后文件的准确性):

合并开始后,会自动提示冲突文件的个数,此时选择窗口中的resolved选项:

在列出的冲突文件列表中,选择“Mercurial Resolve”选项:

此时,冲突文件会移至“Resolved conflicts”列表,选择其中的某个文件,点击“3路合并(3-way diff)”:

三路合并工具我推荐大家使用(Beyond Compare),合并界面如下图:

合并界面中,左侧是本地版本,右侧是外部版本,下方是合并后的文本。点击绿色箭头就会将本地版本合并到文件中,点紫色箭头会将外部变更合并到文件中,版本选择根据项目情况自行决定。

合并完成后,选择当前修改的本地文件,并点击下拉框右侧的保存按钮:

点击提交,将合并结果提交至本地库:

6.同步合并后的版本至托管服务器

打开Hg工作台(Workbench),选择快捷菜单栏的推送按钮(向右上的绿色箭头):

在弹出的推送会话窗口中选择“确认(Yes)”,并填写Bitbucket的帐户密码:

同步开始后,可以在最下方的日志输出窗口看到同步状态:

进度条结束,同步操作即已完成:

============ End

Mercurial(Hg)基本操作的更多相关文章

  1. mercurial(Hg) Server 搭建 过程记录

    mercurial(Hg) Server 搭建 过程记录 1.  环境说明 只是测试搭建,环境为本机开发环境:win 8.1 + IIS8.5 软件准备: 2.  软件安装 先安装Python2.7, ...

  2. Mercurial(HG) Windows+Eclipse安装、配置、使用

    Mercurial(HG) Windows客户端安装 Mercurial(HG): http://mercurial.selenic.com/ Windows客户端下载:http://mercuria ...

  3. mercurial(hg)使用

    # 版本管理软件的比较 svn 每个目录下建一个.svn目录实在是不爽. git 分支管理非常方便,但没感觉有什么用,主要还是在修改前提交一次代码, 等后悔时再回来,没什么其他的目的.关键是中文乱码问 ...

  4. debian7(wheezy)升级安装mercurial hg最新版2.8-RC,解决tortoisehg2.9.2不能使用。

    debian&(wheezy)之前的仓库版本是2.2.2.  注: 本文以 # 为开始的行是工作在root下的模式,在终端显示为root的提示符# ,用户目录的($:)需要切换到root(使用 ...

  5. Mercurial hg web server的配置

    在windows下安装tortoisehg-1.0.3-hg-1.5.3-x64.exe的版本控制工具后,克隆建立中心库后,启动web server,其他分库可以连接中心库进行pull但无法push. ...

  6. Mercurial (hg) Hook : PHP Syntax Check , hg 代码检测 钩子

    用百度搜了一遍hg的hook教程,发现真的是太少了.公司目前正要用到这个,正好本人负责,So. 百度是个坑,少有的几篇文章,再加上善于发现的眼睛,发现TortoiseHg的UI操作都会在控制台显示动作 ...

  7. TortoiseHg简单的入门使用说明

    参考资料: 互普的 TortoiseHg使用说明_百度文库 Mercurial(Hg)基本操作 - Tim Gong - 博客园 Mercurial与TortoiseHg使用入门教程(转) - mee ...

  8. Mercurial笔记(hg命令)

    两个站点: http://z42.readthedocs.org/zh/latest/devtools/hg.html http://bucunzai.net/hginit/ 添加用户名 在.hg目录 ...

  9. Mercurial (hg)

    附上两个站点: http://z42.readthedocs.org/zh/latest/devtools/hg.html http://bucunzai.net/hginit/ Mercurial( ...

随机推荐

  1. 将WinForm程序(含多个非托管Dll)合并成一个exe的方法

    原文:将WinForm程序(含多个非托管Dll)合并成一个exe的方法 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. ILMerge能把托管dl ...

  2. Combobox值自定义(不通过数据库)

    前台 <ext:ComboBox ID="cmbYear" runat="server"/> .aspx.cs int year = DateTim ...

  3. 2.RapidIO串行物理层的包与控制符号

    转自https://www.cnblogs.com/liujinggang/p/9932150.html 一.RapidIO串行物理层背景介绍 上篇博文提到RapidIO的物理层支持串行物理层与并行物 ...

  4. ABP+AdminLTE+Bootstrap Table权限管理系统第七节--登录逻辑及几种abp封装的Javascript函数库

    返回总目录:ABP+AdminLTE+Bootstrap Table权限管理系统一期         简介 经过前几节,我们已经解决数据库,模型,DTO,控制器和注入等问题.那么再来看一下登录逻辑.这 ...

  5. TRIO-basic指令--MOVEMODIFY

    Syntax: MOVEMODIFY(position) Parameters: position: Absolute position for the current move to complet ...

  6. Mysql读写分离方案-MySQL Proxy环境部署记录

    Mysql的读写分离可以使用MySQL Proxy和Amoeba实现,其实也可以使用MySQL-MMM实现读写分离的自动切换.MySQL Proxy有一项强大功能是实现"读写分离" ...

  7. 电梯调度系统(界面由C图形库编绘)

    1.编程题目 电梯调度系统 2.结对编程组员 黄冠译,刘畅 3.编程语言 C语言图形库 4题目要求 编写人员:刘畅,黄冠译 代码如下: # include <stdio.h> # incl ...

  8. 基于UML的需求分析和系统设计

    小序: 从学生时代就接触到UML,几年的工作中也没少使用,各种图形的概念.图形的元素和属性,以及图形的画法都不能说不熟悉.但是怎样在实际中有效地使用UML使之发挥应有的作用,怎样捕捉用户心中的需求并转 ...

  9. [转帖] BIO与NIO、AIO的区别

    培训里面讲的东西  自己查了下 啥意思,,, 转帖强化一下. http://blog.csdn.net/skiof007/article/details/52873421 IO的方式通常分为几种,同步 ...

  10. [书摘]图解HTTP 状态码

    状态码类别: 1XX informational 信息性状态码 2XX Suess   成功状态码 3XX Redirection 重定向状态码 4XX Client error 客户端错误状态码 5 ...