| 
 | 
	
 
0.前言 
    TortoiseHg是分布式的源码管理工具Mercurial的GUI客户端。 mercurial 作为3大主流的分布式源码管理工具,已经被广泛的使用。例如 googlecode.com和codeplex.com都支持mercurial作为源码管理工具。下面结合某个场景,叙述TortoiseHg的具体使用方法。 
 
1.假想场景 
【1】主管在版本库服务器中建立一个仓库,该服务器的IP地址为192.168.1.102,版本库服务器的端口为8000(默认)。 
在版本库中只有一个main.c文件,main.c文件的内容如下 
[cpp] view plaincopy   
 
 
- #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男使用合并工具完成合并并提交至服务器。 
【8】B男拉取服务器内容,并进行更新。 
最后A男和B男本地版本库中的内容完全相同,main.c中的内容变为 
[cpp] view plaincopy   
 
 
- #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.服务器搭建 
【若干准备】 
创建一个名为main.c的函数,文件内容如下 
#include <stdio.h> 
int main(void) { 
    printf("Hg Test\n"); 
} 
【建立仓库】 
在该文件所在目录,右击选择tortoiseHg -> create respository here(或在Hg workbench中操作)建立本地仓库。请注意首次创建的仓库为一个空仓库,可进行必要的提交工作。 
图2.1 建立本地仓库  
图2.2 建立本地仓库  
【首次提交】 
进行提交操作时,需要首先选中最新版本,接着选择需要跟踪文件,然后编写必要的修改说明,最后点击提交按钮。请注意提交操作仅仅提交到本地仓库,若要使远程仓库产生变化需要进行下一步推送操作。(由于此处为服务器并没有推送目标,所有没有推送操作,但是相对于下文提到的A男和B男情况就不一样了。) 
图2.3 首次提交  
图2.4 提交之后结果  
【修改服务器设置】 
选择server选项,修改全局参数和该仓库参数。其中取消SSL加密推送,并允许他人推送。为了简单说明问题,全局参数和该仓库设置相同。在该项设置中默认的端口号位8000,也可以使用其他端口号,请一定要避免知名端口号。 
图2.5 修改全局设置  
图2.6 修改本地仓库设置  
【启动服务器】 
在tortoiseHg中选择【仓库】->【web server】 
图2.7 启动webserver  
3.B男操作过程 
【过程概述】——clone远程仓库至本地->修改源代码->本地提交Commit->拉取远程代码pull->合并merge或更新update->推送到远程仓库push 
 
【clone过程】 
    新建一个空文件夹(必须为空文件夹),在空文件中右击,选择TortoiseHg->Clone。源地址中输入远程仓库URL,例如远程仓库服务器的IP地址为192.168.1.102,Hg仓库的端口号为8000。那么远程仓库的URL可写为: 
    http://192.168.1.102:8000/ 
图3.1 clone操作 【修改代码】 
    修改源代码,增加一个max函数,修改之后的main文件如下所示。 
[cpp] view plaincopy   
 
 
- #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男的拉取和推送操作非常简单,但是没有任何代表性,请关注下文A男的操作) 
图3.3 拉取并推送到远程仓库  
【必要的检查】 
    通过网页查看推送是否成功,请输入远程仓库URL 192.168.1.102:8000。 
图3.4 必要的检查  
4.A男操作过程 
【本地克隆】 
    和B均操作相同 
【修改代码】 
    增加min函数。 
[cpp] view plaincopy   
 
 
- #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男发现远程服务器存在变更,需要进行合并或更新。 
图5.1 拉取操作  
【更新操作】 
    此时B男只需要进行更新操作即可,及时进行合并操作Hg也会提示没有任何可以合并的内容。此时B男只需要通过更新update和服务器保持一致即可。【小技巧,可优先进行合并操作,若提示没有任务合并内容便使用更新操作】 
图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】服务器搭建技术——TortoiseHg配置具体过程  
 
 
http://blog.csdn.net/xukai871105/article/details/25649331 
 
 |   
 
 
 
 |