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

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

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

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中操作)建立本地仓库。请注意首次创建的仓库为一个空仓库。可进行必要的提交工作。

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

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

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

TortoiseHg 学习笔记 随笔 第5张
图2.5 改动全局设置
TortoiseHg 学习笔记 随笔 第6张
图2.6 改动本地仓库设置
【启动server】 在tortoiseHg中选择【仓库】->【web server】 TortoiseHg 学习笔记 随笔 第7张
图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/ TortoiseHg 学习笔记 随笔 第8张
图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");
}

【本地提交】     在界面的右下角可看到代码的变化情况,+号代表添加。 TortoiseHg 学习笔记 随笔 第9张
图3.2 本地提交
【拉取操作】     因为A男没有提交代码到远程仓库,全部此时B男拉取时提示没有不论什么更新内容。 【推送操作】     B男运行推送操作。那么远程仓库发生了变化。(此时A男也有可能在编写代码,可是他并没有完毕代码本地提交和推送操作,那么A男拉取时之后。须要和他本地的代码进行合并。然后再进行推送操作。尽管此处B男的拉取和推送操作非常easy,可是没有不论什么代表性,请关注下文A男的操作) TortoiseHg 学习笔记 随笔 第10张
图3.3 拉取并推送到远程仓库
【必要的检查】     通过网页查看推送是否成功,请输入远程仓库URL 192.168.1.102:8000。 TortoiseHg 学习笔记 随笔 第11张
图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"); }


【本地提交】 TortoiseHg 学习笔记 随笔 第12张
图4.1本地提交 【拉取操作】     A男发现B男已经提交了一个版本号。须要进行代码合并。

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

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

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

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

TortoiseHg 学习笔记 随笔 第18张
图4.7 提交必要的合并说明
【推送操作】 TortoiseHg 学习笔记 随笔 第19张
图4.8 推送操作
【检查结果】 TortoiseHg 学习笔记 随笔 第20张
图4.9 必要的检查
5.B男再次操作 【拉取操作】     此时B男发现远程server存在变更,须要进行合并或更新。 TortoiseHg 学习笔记 随笔 第21张
图5.1 拉取操作
【更新操作】     此时B男仅仅须要进行更新操作就可以,及时进行合并操作Hg也会提示没有不论什么能够合并的内容。此时B男仅仅须要通过更新update和server保持一致就可以。【小技巧,可优先进行合并操作,若提示没有任务合并内容便使用更新操作】 TortoiseHg 学习笔记 随笔 第22张
图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同样,仅缺少右键快捷菜单。 TortoiseHg 学习笔记 随笔 第23张
图6.1 ubuntu中TortoiseHg界面
7.參考资料 【1】决定採用Mercurial(Hg)了 【2】server搭建技术——TortoiseHg配置详细过程TortoiseHg 学习笔记 随笔 第24张





扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄