0.前言
    TortoiseHg是分布式的源码管理工具Mercurial的GUI客户端。 mercurial 作为3大主流的分布式源码管理工具,已经被广泛的使用。例如 googlecode.com和codeplex.com都支持mercurial作为源码管理工具。下面结合某个场景,叙述TortoiseHg的具体使用方法。

1.假想场景
【1】主管在版本库服务器中建立一个仓库,该服务器的IP地址为192.168.1.102,版本库服务器的端口为8000(默认)。
在版本库中只有一个main.c文件,main.c文件的内容如下
  1. #include <stdio.h>  
  2. int main(void) {  
  3.     printf("Hg Test\n");  
  4. }  
【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中的内容变为
  1. #include <stdio.h>  
  2. int min(int a, int b) {  
  3.     return a < b ? a : b;  
  4. }  
  5. int max(int a, int b) {  
  6.     return a > b ? a : b;  
  7. }  
  8. int main(void) {  
  9.     printf("Hg Test\n");  
  10. }  



【Init】 初始化,创建一个空的仓库。
【Clone】 复制仓库,来源可以是一个http或ssh链接表示的仓库,也可以是本地仓库。
【Commit】 提交,即接受所有的改动将当前版本作为最新版本(也叫tip)。只提交的本地仓库,而且本地仓库会详细记录所有的变动(称为变更集或改动集)。多次提交并不会影响远程仓库。
【Revert】恢复,即撤销所有的改动,恢复到未更改的状态。
【Pull】拉取,将雅远程仓库有而当前仓库没有的变更集“下载”到本地仓库。不过这只是添加了变更集文件【Update】更新,当获取了其他变更集,更改以保持和远程仓库一致
【Push】推送,将当前仓库的变更集“上传”到其他仓库去。
合并。当一个文件同时被多次修改,并存放在多个仓库时,要获得一个统一的版本就需要合并。

2.服务器搭建
【若干准备】
创建一个名为main.c的函数,文件内容如下
#include <stdio.h>
int main(void) {
    printf("Hg Test\n");
}
【建立仓库】
在该文件所在目录,右击选择tortoiseHg -> create respository here(或在Hg workbench中操作)建立本地仓库。请注意首次创建的仓库为一个空仓库,可进行必要的提交工作。
TortoiseHg 学习笔记 (转)
图2.1 建立本地仓库

图2.2 建立本地仓库

【首次提交】
进行提交操作时,需要首先选中最新版本,接着选择需要跟踪文件,然后编写必要的修改说明,最后点击提交按钮。请注意提交操作仅仅提交到本地仓库,若要使远程仓库产生变化需要进行下一步推送操作。(由于此处为图2.3 首次提交

图2.4 提交之后结果

【修改服务器设置】
选择server选项,修改全局参数和该仓库参数。其中允许他人推送。为了简单说明问题,全局参数和该仓库设置相同。在该项设置中默认的端口号位8000,也可以使用其他端口号,请一定要避免知名端口号。
TortoiseHg 学习笔记 (转)
图2.5 修改全局设置

图2.6 修改本地仓库设置

【启动服务器】
在tortoiseHg中选择【仓库】->【web server】
TortoiseHg 学习笔记 (转)
图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/
TortoiseHg 学习笔记 (转)
图3.1 clone操作
【修改代码】
    修改源代码,增加一个max函数,修改之后的main文件如下所示。
  1. #include <stdio.h>  
  2. int max(int a, int b) {  
  3.     return a > b ? a : b;  
  4. }  
  5. int main(void) {  
  6.     printf("Hg Test\n");  
  7. }  

【本地提交】

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

TortoiseHg 学习笔记 (转)
图3.2 本地提交

【拉取操作】
    由于A男没有提交代码到远程仓库,所有此时B男拉取时提示没有任何更新内容。
【推送操作】
    B男执行推送操作,那么远程仓库发生了变化。(此时A男也有可能在编写代码,但是他并没有完成代码本地提交和推送操作,那么A男拉取时之后,需要和他本地的代码进行合并,然后再进行推送操作。虽然此处B男的拉取和推送操作非常简单,但是没有任何代表性,请关注下文A男的操作)
TortoiseHg 学习笔记 (转)
图3.3 拉取并推送到远程仓库

【必要的检查】
    通过网页查看推送是否成功,请输入远程仓库URL 192.168.1.102:8000。
TortoiseHg 学习笔记 (转)
图3.4 必要的检查

4.A男操作过程
【本地克隆】
    和B均操作相同
【修改代码】
    增加min函数。
  1. #include <stdio.h>  
  2. int min(int a, int b) {  
  3.     return a < b ? a : b;  
  4. }  
  5. int main(void) {  
  6.     printf("Hg Test\n");  
  7. }  


【本地提交】
TortoiseHg 学习笔记 (转)
图4.1本地提交
【拉取操作】
    A男发现B男已经提交了一个版本,需要进行代码合并。
TortoiseHg 学习笔记 (转)
图4.2 拉取操作

【合并操作】
    合并操作可借助合并工具,但是在合并之前还是和同事沟通一下。合并一般发生在两个人同时修改了同一个文件。
TortoiseHg 学习笔记 (转)
图4.3 合并操作

    同一个文件中在两个分支中出现修改,已经无法自动合并需要进行下一步手动合并。
TortoiseHg 学习笔记 (转)
图4.4 合并操作

    选择合并工具并开始合并,TortoiseHg会添加在系统中安装的合并工具,例如Bcompare或者winmerge。在界面中选择Tool Resolve使用工具解决合并,Take Local选择本地文件,Take Other选择远程文件(相当于放弃了本地修改)。建议选择使用工具合并同时和您的同时好好沟通一下,如何合并。
TortoiseHg 学习笔记 (转)
图4.5 合并操作

    使用合并工具时,左侧为远程内容,右侧为本地内容。虽然合并工具提示仅存在很小的差异,例如min和max,<和>。但是如果有效沟通一下的话便会发送实际上应该增加一个函数,需要把max函数复制到本地已完成合并。
TortoiseHg 学习笔记 (转)
图4.6 使用工具完成合并

    合并完成,编写必要的修改说明。
TortoiseHg 学习笔记 (转)
图4.7 提交必要的合并说明

【推送操作】
TortoiseHg 学习笔记 (转)
图4.8 推送操作

【检查结果】
TortoiseHg 学习笔记 (转)
图4.9 必要的检查

5.B男再次操作
【拉取操作】
    此时B男发现远程服务器存在变更,需要进行合并或更新。
TortoiseHg 学习笔记 (转)
图5.1 拉取操作

【更新操作】
    此时B男只需要进行更新操作即可,及时进行合并操作Hg也会提示没有任何可以合并的内容。此时B男只需要通过更新update和服务器保持一致即可。【小技巧,可优先进行合并操作,若提示没有任务合并内容便使用更新操作】
TortoiseHg 学习笔记 (转)
图5.2 更新操作
    最后A男和B男的本地仓库中,main.c的内容完全相同。

6.ubuntu中使用
TortoiseHg 学习笔记 (转)
图6.1 ubuntu中TortoiseHg界面
 

相关文章:

  • 2021-10-26
  • 2021-07-26
  • 2022-02-17
  • 2022-01-16
  • 2022-01-29
  • 2022-01-23
  • 2022-02-05
  • 2021-12-30
猜你喜欢
  • 2022-12-23
  • 2022-02-22
  • 2021-11-17
  • 2021-12-09
  • 2021-10-04
  • 2021-07-17
  • 2021-10-06
相关资源
相似解决方案