0.前言
    TortoiseHg是分布式的源代码管理工具Mercurial的GUIclient。 mercurial 作为3大主流的分布式源代码管理工具。已经被广泛的使用。比如 googlecode.com和codeplex.com都支持mercurial作为源代码管理工具。

以下结合某个场景。叙述TortoiseHg的详细用法。

1.假想场景
【1】主管在版本号库server中建立一个仓库。该server的IP地址为192.168.1.102,版本号库server的port为8000(默认)。
在版本号库中仅仅有一个main.c文件,main.c文件的内容例如以下
#include <stdio.h>
int main(void) {
printf("Hg Test\n");
}

【2】A男和B男分别clone版本号库
【3】A男试图在main.c中min函数。B男试图在版本号库中加入max函数。

两人同一时候開始改动。

【4】B男似乎速度快一点。添加了max函数并提交。
【5】A男也完毕了max函数。拉取版本号库之后发现B男已经提交了一个版本号,A男发现两个版本号存在冲突。
【6】A男和B男相互沟通。决定同一时候保留min函数和max函数。
【7】A男使用合并工具完毕合并并提交至server。
【8】B男拉取server内容,并进行更新。

最后A男和B男本地版本号库中的内容全然同样。main.c中的内容变为
#include <stdio.h>
int min(int a, int b) {
return a < b ? a : b;
}
int max(int a, int b) {
return a > b ? a : b;
}
int main(void) {
printf("Hg Test\n");
}
【基本概念介绍】
【Init】 初始化,创建一个空的仓库。

【Clone】 复制仓库,来源能够是一个http或ssh链接表示的仓库。也能够是本地仓库。

【Commit】 提交,即接受全部的改动将当前版本号作为最新版本号(也叫tip)。仅仅提交的本地仓库。并且本地仓库会详细记录全部的变动(称为变更集或改动集)。

多次提交并不会影响远程仓库。

【Revert】恢复,即撤销全部的改动,恢复到未更改的状态。
【Pull】拉取。将雅远程仓库有而当前仓库没有的变更集“下载”到本地仓库。只是这仅仅是加入了变更集本地文件并不会改动
【Update】更新,当获取了其它变更集,更改以保持和远程仓库一致
【Push】推送,将当前仓库的变更集“上传”到其它仓库去。
【Merge】合并。当一个文件同一时候被多次改动。并存放在多个仓库时,要获得一个统一的版本号就须要合并。
2.server搭建
【若干准备】
创建一个名为main.c的函数,文件内容例如以下
#include <stdio.h>
int main(void) {
    printf("Hg Test\n");
}
【建立仓库】
在该文件所在目录。右击选择tortoiseHg -> create respository here(或在Hg workbench中操作)建立本地仓库。请注意首次创建的仓库为一个空仓库。可进行必要的提交工作。

图2.1 建立本地仓库

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHVrYWk4NzExMDU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

图2.2 建立本地仓库
【首次提交】
进行提交操作时,须要首先选中最新版本号。接着选择须要跟踪文件,然后编写必要的改动说明,最后点击提交button。请注意提交操作仅仅提交到本地仓库。若要使远程仓库产生变化须要进行下一步推送操作。(因为此处为server并没有推送目标。全部没有推送操作。可是相对于下文提到的A男和B男情况就不一样了。)
图2.3 首次提交
图2.4 提交之后结果
【改动server设置】
选择server选项,改动全局參数和该仓库參数。当中取消SSL加密推送,并同意他人推送

为了简单说明问题。全局參数和该仓库设置同样。

在该项设置中默认的port号位8000,也能够使用其它port号,请一定要避免知名port号。

图2.5 改动全局设置
图2.6 改动本地仓库设置
【启动server】
在tortoiseHg中选择【仓库】->【web server】

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHVrYWk4NzExMDU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

图2.7 启动webserver
3.B男操作过程
【过程概述】——clone远程仓库至本地->改动源代码->本地提交Commit->拉取远程代码pull->合并merge或更新update->推送到远程仓库push
【clone过程】
    新建一个空目录(必须为空目录)。在空文件里右击,选择TortoiseHg->Clone。源地址中输入远程仓库URL,比如远程仓库server的IP地址为192.168.1.102,Hg仓库的port号为8000。那么远程仓库的URL可写为:
    http://192.168.1.102:8000/
图3.1 clone操作
【改动代码】
    改动源代码,添加一个max函数,改动之后的main文件例如以下所看到的。
#include <stdio.h>
int max(int a, int b) {
return a > b ? a : b;
}
int main(void) {
printf("Hg Test\n");
}
【本地提交】

    在界面的右下角可看到代码的变化情况,+号代表添加。

图3.2 本地提交
【拉取操作】
    因为A男没有提交代码到远程仓库,全部此时B男拉取时提示没有不论什么更新内容。
【推送操作】
    B男运行推送操作。那么远程仓库发生了变化。(此时A男也有可能在编写代码,可是他并没有完毕代码本地提交和推送操作,那么A男拉取时之后。须要和他本地的代码进行合并。然后再进行推送操作。尽管此处B男的拉取和推送操作非常easy,可是没有不论什么代表性,请关注下文A男的操作)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHVrYWk4NzExMDU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

图3.3 拉取并推送到远程仓库
【必要的检查】
    通过网页查看推送是否成功,请输入远程仓库URL 192.168.1.102:8000。
图3.4 必要的检查
4.A男操作过程
【本地克隆】
    和B均操作同样
【改动代码】
    添加min函数。
#include <stdio.h>
int min(int a, int b) {
return a < b ? a : b;
}
int main(void) {
printf("Hg Test\n");
}

【本地提交】

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHVrYWk4NzExMDU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

图4.1本地提交
【拉取操作】
    A男发现B男已经提交了一个版本号。须要进行代码合并。

图4.2 拉取操作
【合并操作】
    合并操作可借助合并工具,可是在合并之前还是和同事沟通一下。合并一般发生在两个人同一时候改动了同一个文件。

图4.3 合并操作
    同一个文件里在两个分支中出现改动。已经无法自己主动合并须要进行下一步手动合并。
图4.4 合并操作
    选择合并工具并開始合并。TortoiseHg会加入在系统中安装的合并工具,比如Bcompare或者winmerge。

在界面中选择Tool Resolve使用工具解决合并,Take Local选择本地文件。Take Other选择远程文件(相当于放弃了本地改动)。建议选择使用工具合并同一时候和您的同一时候好好沟通一下,怎样合并。

图4.5 合并操作
    使用合并工具时,左側为远程内容,右側为本地内容。尽管合并工具提示仅存在非常小的差异,比如min和max,<和>。可是假设有效沟通一下的话便会发送实际上应该添加一个函数。须要把max函数拷贝到本地已完毕合并。
图4.6 使用工具完毕合并
    合并完毕。编写必要的改动说明。

图4.7 提交必要的合并说明
【推送操作】

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHVrYWk4NzExMDU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

图4.8 推送操作
【检查结果】

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHVrYWk4NzExMDU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

图4.9 必要的检查
5.B男再次操作
【拉取操作】
    此时B男发现远程server存在变更,须要进行合并或更新。
图5.1 拉取操作
【更新操作】
    此时B男仅仅须要进行更新操作就可以,及时进行合并操作Hg也会提示没有不论什么能够合并的内容。此时B男仅仅须要通过更新update和server保持一致就可以。【小技巧,可优先进行合并操作,若提示没有任务合并内容便使用更新操作】
图5.2 更新操作
    最后A男和B男的本地仓库中,main.c的内容全然同样。
6.ubuntu中使用
【1】安装过程
    依次输入以下指令:
sudo add-apt-repository ppa:tortoisehg-ppa/releases
sudo add-apt-repository ppa:mercurial-ppa/releases
sudo apt-get update
sudo apt-get install mercurial python-nautilus tortoisehg
【2】使用界面
    使用界面和windows同样,仅缺少右键快捷菜单。
图6.1 ubuntu中TortoiseHg界面
7.參考资料

TortoiseHg 学习笔记的更多相关文章

  1. TortoiseHg 学习笔记一

    因项目需要频繁的提交.合并代码,前段时间别人在我笔记本上装了个TortoiseHg,我不怎么会用 现在学习一下,目前没时间写太多东西,未完待续 记录一下查看的文章 http://jingyan.bai ...

  2. Linux学习笔记——如何使用共享库交叉编译

    0.前言     在较为复杂的项目中会利用到交叉编译得到的共享库(*.so文件).在这样的情况下便会产生下面疑问,比如:     [1]交叉编译时的共享库是否须要放置于目标板中,假设须要放置在哪个文件 ...

  3. Linux学习笔记——怎样在交叉编译时使用共享库

    0.前言     在较为复杂的项目中会利用到交叉编译得到的共享库(*.so文件).在这样的情况下便会产生下面疑问,比如:     [1]交叉编译时的共享库是否须要放置于目标板中,假设须要放置在哪个文件 ...

  4. cJSON学习笔记 续集

    0.前言     本文试图说明怎样使用CJSON构造各种各样的JSON数据包.在前段时间已经写过一篇cJSON的文章,所以本文成为"续集".     [相关博文]     [前端学 ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  7. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  8. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  9. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

随机推荐

  1. Mac下安装最新版本的Graphviz

    由于版本兼容问题,Mac下Graphviz之前一直装的是低版本的2.36.高版本的安装方法如下: 1.log in & download Xcode an Xcode Command Line ...

  2. js正则表达式 URL格式匹配详解

    0.URL格式 protocol :// hostname[:port] / path / [;parameters][?query]#fragment [;parameters]没见过 这里就不做相 ...

  3. h5+js视频播放器控件

    由于h5兼容性问题,很多浏览器对于插入视频播放的支持都大不相同.火狐支持的比较完整,谷歌则支持的不是很好,很多功能都不能实现,这就需要我们去自制一个播放界面,去兼容不同的浏览器. 只插入一个视频时,浏 ...

  4. C# SqlBulkCopy类批量导入 测试

    一.功能说明 1.可以选择,只导入部分列,或者导入全部列. 2.导入速度的确比一般sql要快. 3.不用写sql语句 ----------------------------------------- ...

  5. js (jQuery)分组数据

    function getobjArr (data) { var result = []; data.HELMET.system = '系统分类' // console.log(data) $.each ...

  6. elementUI vue v-model的修饰符

    v-model的修饰符 v-model.lazy 只有在input输入框发生一个blur时才触发 v-model.trim 将用户输入的前后的空格去掉 v-model.number 将用户输入的字符串 ...

  7. Retrieve OpenGL Context from Qt 5.5 on OSX

    In the latest Qt 5.5, the QOpenGLWidget is much better and has less bugs than the QGLWidget, but it ...

  8. 编程一小时 code.org [六一关注]

    编程一小时活动的组织者是Code.org, 它是一个面向公众的公益组织,致力于在更多的学校推广计算机科学教育,并为女性和就业率低的有色人种学生学习计算机的机会.同时,一个空前强大的合作伙伴联盟也在支持 ...

  9. 虚拟机中安装Virtualbox,嵌套的虚拟机不能运行64位系统

    https://www.quora.com/Can-I-install-Virtualbox-in-a-virtual-machine Here is a previous question on Q ...

  10. 使用Visual Studio Team Services敏捷规划和项目组合管理(四)——冲刺计划和任务板

    使用Visual Studio Team Services敏捷规划和项目组合管理(四)--冲刺计划和任务板 团队在sprint计划会议期间创建冲刺积压工作项,通常在冲刺的第一天召开该会议.每个冲刺都对 ...