TortoiseHg 学习笔记
0.前言
TortoiseHg是分布式的源代码管理工具Mercurial的GUIclient。 mercurial 作为3大主流的分布式源代码管理工具。已经被广泛的使用。比如 googlecode.com和codeplex.com都支持mercurial作为源代码管理工具。
1.假想场景 【1】主管在版本号库server中建立一个仓库。该server的IP地址为192.168.1.102,版本号库server的port为8000(默认)。 在版本号库中仅仅有一个main.c文件,main.c文件的内容例如以下
【2】A男和B男分别clone版本号库 【3】A男试图在main.c中min函数。B男试图在版本号库中加入max函数。
【基本概念介绍】 【Init】 初始化,创建一个空的仓库。 【Clone】 复制仓库,来源能够是一个http或ssh链接表示的仓库。也能够是本地仓库。 【Commit】 提交,即接受全部的改动将当前版本号作为最新版本号(也叫tip)。仅仅提交的本地仓库。并且本地仓库会详细记录全部的变动(称为变更集或改动集)。
【Push】推送,将当前仓库的变更集“上传”到其它仓库去。 【Merge】合并。当一个文件同一时候被多次改动。并存放在多个仓库时,要获得一个统一的版本号就须要合并。
2.server搭建 【若干准备】 创建一个名为main.c的函数,文件内容例如以下 #include <stdio.h> int main(void) { printf("Hg Test\n"); } 【建立仓库】 在该文件所在目录。右击选择tortoiseHg -> create respository here(或在Hg workbench中操作)建立本地仓库。请注意首次创建的仓库为一个空仓库。可进行必要的提交工作。
图2.1 建立本地仓库
图2.2 建立本地仓库
【首次提交】 进行提交操作时,须要首先选中最新版本号。接着选择须要跟踪文件,然后编写必要的改动说明,最后点击提交button。请注意提交操作仅仅提交到本地仓库。若要使远程仓库产生变化须要进行下一步推送操作。(因为此处为server并没有推送目标。全部没有推送操作。可是相对于下文提到的A男和B男情况就不一样了。)
图2.3 首次提交
图2.4 提交之后结果
【改动server设置】 选择server选项,改动全局參数和该仓库參数。当中取消SSL加密推送,并同意他人推送。
图2.5 改动全局设置
图2.6 改动本地仓库设置
【启动server】 在tortoiseHg中选择【仓库】->【web server】
图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文件例如以下所看到的。
【本地提交】 在界面的右下角可看到代码的变化情况,+号代表添加。
图3.2 本地提交
【拉取操作】 因为A男没有提交代码到远程仓库,全部此时B男拉取时提示没有不论什么更新内容。 【推送操作】 B男运行推送操作。那么远程仓库发生了变化。(此时A男也有可能在编写代码,可是他并没有完毕代码本地提交和推送操作,那么A男拉取时之后。须要和他本地的代码进行合并。然后再进行推送操作。尽管此处B男的拉取和推送操作非常easy,可是没有不论什么代表性,请关注下文A男的操作)
图3.3 拉取并推送到远程仓库
【必要的检查】 通过网页查看推送是否成功,请输入远程仓库URL 192.168.1.102:8000。
图3.4 必要的检查
4.A男操作过程 【本地克隆】 和B均操作同样 【改动代码】 添加min函数。
【本地提交】
图4.1本地提交 【拉取操作】 A男发现B男已经提交了一个版本号。须要进行代码合并。
图4.2 拉取操作
【合并操作】 合并操作可借助合并工具,可是在合并之前还是和同事沟通一下。合并一般发生在两个人同一时候改动了同一个文件。
图4.3 合并操作
同一个文件里在两个分支中出现改动。已经无法自己主动合并须要进行下一步手动合并。
图4.4 合并操作
选择合并工具并開始合并。TortoiseHg会加入在系统中安装的合并工具,比如Bcompare或者winmerge。
图4.5 合并操作
使用合并工具时,左側为远程内容,右側为本地内容。尽管合并工具提示仅存在非常小的差异,比如min和max,<和>。可是假设有效沟通一下的话便会发送实际上应该添加一个函数。须要把max函数拷贝到本地已完毕合并。
图4.6 使用工具完毕合并
合并完毕。编写必要的改动说明。
图4.7 提交必要的合并说明
【推送操作】
图4.8 推送操作
【检查结果】
图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.參考资料 【1】决定採用Mercurial(Hg)了 【2】server搭建技术——TortoiseHg配置详细过程
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄
以下结合某个场景。叙述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中操作)建立本地仓库。请注意首次创建的仓库为一个空仓库。可进行必要的提交工作。

图2.1 建立本地仓库

图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】

图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男的操作)

图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"); }
【本地提交】

图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 提交必要的合并说明
【推送操作】

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

图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.參考资料 【1】决定採用Mercurial(Hg)了 【2】server搭建技术——TortoiseHg配置详细过程


更多精彩