TortoiseHg 学习笔记 (转)

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

图2.2 创建本地仓库

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

图2.4 提交以后结果

【修改服务器设置】
选择server选项,修改全局参数和该仓库参数。其中容许他人推送。为了简单说明问题,全局参数和该仓库设置相同。在该项设置中默认的端口号位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文件以下所示。
  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. }  

【本地提交】

    在界面的右下角可看到代码的变化状况,+号表明增长。web

图3.2 本地提交

【拉取操做】
    因为A男没有提交代码到远程仓库,全部此时B男拉取时提示没有任何更新内容。
【推送操做】
    B男执行推送操做,那么远程仓库发生了变化。(此时A男也有可能在编写代码,可是他并无完成代码本地提交和推送操做,那么A男拉取时以后,须要和他本地的代码进行合并,而后再进行推送操做。虽然此处B男的拉取和推送操做很是简单,可是没有任何表明性,请关注下文A男的操做)
图3.3 拉取并推送到远程仓库

【必要的检查】
    经过网页查看推送是否成功,请输入远程仓库URL 192.168.1.102:8000。
图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. }  


【本地提交】
图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中使用
图6.1 ubuntu中TortoiseHg界面
相关文章
相关标签/搜索