Mercurial简明教程(在工作流程中学习Mercurial)

来源:互联网 发布:淘宝店主的故事 编辑:程序博客网 时间:2024/05/21 16:07

原文地址:http://mercurial.selenic.com/guide/

转载请注明出处http://blog.csdn.net/rightgenius/archive/2011/02/26/6209306.aspx

 

 

Mercurial简明教程(在工作流程中学习Mercurial

Learning Mercurial in Workflows

基本工作流程(Basic Workflows)

1. 日志记录

用例

第一个工作流程是最简单的:你希望Mercurial能够帮你回顾之前的更改。

这只需要安装Mercurial并拥有对某个存储介质的写访问权限。这是复杂工作流程的基础。

工作流程

l  准备Mercurial

第一步,要让Mercurial认识你。打开安装目录,编辑.hgrc文件(在Windows中是.ini文件),在ui章节中(userinteraction用户交互)添加你的用户名

   [ui]

   username = Mr.Johnson <Johnson@smith.com>

l  初始化项目

现在添加一个你想工作的项目文件夹:

   $ hg init project

l  添加文件并追踪修改

   $ cd project

   $ (add files)

   $ hg add

   $ hg commit

----------------------------------------------------

注意:

你也可以进入一个已经有文件的文件夹,在那里初始化项目

   $ cd project

   $ hg init

你可以选择特定的文件add到版本中,而其他的文件将不被mercurial识别。下面的命令告诉mercurial记录所有以“file0”打头的文件和另外3个独立文件“file10”“file11”“file12”

   $ hg add file0* file10 file11 file12

----------------------------------------------------

l  保存修改

   $ (do some changes)

查看哪些文件被修改,哪些被添加或删除到版本中,以及还有哪些没有被版本记录

   $ hg status

查看确切的改动

   $ hg diff

mercurial提交更改

   $ hg commit

执行这个命令时会有一个编辑器弹出,让你提交版本更新信息,保存并关闭编辑器之后,你的更改将被保存到Mercurial

----------------------------------------------------

   注意:

   你也可以直接用hg commit –m ‘MESSAGE’ 提交版本信息

----------------------------------------------------

l  移动和复制文件

当你移动或复制文件时,你一定要使用Mercurial来做这件事,从而能够记录这些文件之间的关系。

记住在移动和复制之后要commit。在基本命令中,只有commit可以产生新的版本。

   $ hg cporiginal copy

   $ hg commit

   (enter thecommit message)

   $ hg mvoriginal target

   $ hg commit

   (enter thecommit message)

现在你有两个文件,”copy””target”Mercurial知道他们之间是如何联系起来的。

----------------------------------------------------

   注意:

如果你忘记了用显式的copymove,你仍然能够告诉Mercurial去检查这些变更:hgaddremove –similarity 100。去hg help查看addremove的使用细节。

l  查看历史记录

$ hg log

这个将打印出所有的版本变化和他们的提交日期,提交者和版本信息。

你可以使用-r开关(--revision)来查看特定的版本。查看显示的版本间的差异,可以使用-p开关(--patch)

   $ hg log –p –r 3

2. 单个开发者和非线性开发历史

用例

第二个工作流程仍然很简单:你是一个独立的开发者,你打算用Mercurial记录你自己的版本变化。

这和日志记录流程有些类似,不同之处在于你有时会回到一个早期版本。

同样的建立新项目,初始化repository,添加文件并提交。

你也要不时的检查的历史记录,看看你是怎么一步步开发到现在的。

工作流程

l  和日志记录一样的基础命令

初始化,添加、查看更改、提交

   $ hg init project

   $ cd project

   $ (add files)

   $ hg add  # tell Mercurial to track all files

   $ (do some changes)

   $ hg diff  # see changes

   $ hg commit  # save changes

   $ hg cp  # copy files or folders

   $ hg mv # move files or folders

   $ hg log # see history

l  查看一个早期版本

日志记录不同,你希望回到某一个早期版本并且直接在那个版本中修改。例如因为一个早期的修改引入了一个bug,你希望修正它。

你可以使用update来查看早期版本的代码。我们假设你要看版本3

$ hg update 3

现在你的代码就返回了版本3的状态了,即第四次提交(从0开始计算)。用idfentify–n确认你所在的版本。

$ hg identify –n

----------------------------------------------------

注意:

不加参数的identity命令将给你一个简写的版本ID,这是Mercurial内部使用的ID。如果你希望告诉其他人你update到的版本,需要使用这个ID,因为本地的计数版本号对于每个人来说是不同的。如果你想弄清楚这么做的原因,请阅读Mercurials [basicconcepts]。当你在最新的版本时,hg identify –n 将会返回”-1”

----------------------------------------------------

你可以使用”tip”作为版本名来update到最新的版本。

$ hg update tip

----------------------------------------------------

注意:

如果某个命令提示错误或警告,你最好按照它的提示进行。

----------------------------------------------------

----------------------------------------------------

注意:

你也可以用缩写hg up 来代替hg update

类似的使用hgci 来代替hg commit

----------------------------------------------------

----------------------------------------------------

注意:

如果要得到没有文件的版本,直接通过updatenull命令升级到“null”。这是什么文件都没有被添加之前的版本。

----------------------------------------------------

l  修正早期版本中的错误

当你发现一个从一个早期版本开始的bug,你有两种选择:直接在当前版本中修改,也可以回到历史版本修改,从而让历史记录更加清晰。

为了让历史记录更清晰,首先要update到过去的版本,修正bug并提交。之后你将整个版本merge到新版本中并提交。别担心,在MercurialMerging快速而轻松,你马上会看到。

首先我们假设bug在版本3中被引入。

   $ hg update 3

   $ (fix the bug)

   $ hg commit

现在修正已经保存在了历史版本中。我们只需要将它和最新版本merge

   $ hg merge

如果版本间有冲突,用hgresolve,当然这同样也是merge命令在出现冲突时会提示你的。

首先列出冲突的文件:

   $ hg resolve–list

然后解决他们,用resolve尝试再次merge

   $ hg resolveconflicting_file

   (fix it byhand, if necessary)

标记修正的文件已经resolved

   $ hg resolve–mark conflicting_file

一旦你解决了所有的冲突,提交merge。即使是没有冲突,这一步也是必要的!

   $ hg commit

这样使用时,你的修正会被应用到所有你其他的工作中,然后你就可以继续coding啦。另外,历史记录将清晰的显示你在哪里修复了bug,所以你可以一直核对是哪里的bug

----------------------------------------------------

   注意:

   大部分merge会直接起作用。当merge出现问题时,你只需要resolve

----------------------------------------------------

因此你现在可以初始化repositories,保存修改,update到之前版本,提交早期的修正并与最新版本merge,从而在一个非线性的历史记录中开发。

----------------------------------------------------

   注意:

如果你修复了早期版本中的bug,而后来的版本复制或移动了那个文件,这个修正将修改所有的目标文件。这是你使用hgcphgmv的主要原因。

----------------------------------------------------