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

    技术2022-05-20  49

    原文地址: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并拥有对某个存储介质的写访问权限。这是复杂工作流程的基础。

    工作流程

    准备Mercurial

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

       [ui]

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

    初始化项目

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

       $ hg init project

    添加文件并追踪修改

       $ 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

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

    保存修改

       $ (do some changes)

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

       $ hg status

    查看确切的改动

       $ hg diff

    mercurial提交更改

       $ hg commit

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

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

       注意:

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

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

    移动和复制文件

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

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

       $ hg cp original copy

       $ hg commit

       (enter the commit message)

       $ hg mv original target

       $ hg commit

       (enter the commit message)

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

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

       注意:

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

    查看历史记录

    $ hg log

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

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

       $ hg log –p –r 3

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

    用例

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

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

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

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

    工作流程

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

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

       $ 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

    查看一个早期版本

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

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

    $ hg update 3

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

    $ hg identify –n

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

    注意:

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

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

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

    $ hg update tip

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

    注意:

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

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

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

    注意:

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

    类似的使用hg ci 来代替 hg commit

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

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

    注意:

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

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

    修正早期版本中的错误

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

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

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

       $ hg update 3

       $ (fix the bug)

       $ hg commit

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

       $ hg merge

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

    首先列出冲突的文件:

       $ hg resolve –list

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

       $ hg resolve conflicting_file

       (fix it by hand, if necessary)

    标记修正的文件已经resolved

       $ hg resolve –mark conflicting_file

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

       $ hg commit

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

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

       注意:

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

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

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

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

       注意:

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

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

     


    最新回复(0)