MercurialHg分布式代码托管快速入门Word下载.docx
- 文档编号:18317782
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:15
- 大小:27.02KB
MercurialHg分布式代码托管快速入门Word下载.docx
《MercurialHg分布式代码托管快速入门Word下载.docx》由会员分享,可在线阅读,更多相关《MercurialHg分布式代码托管快速入门Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
∙Linux,MacOSX,和其它Unix的变体,参照UnixInstall目录。
∙在Windows中,参照WindowsInstall的说明.
你完成后回到这里。
注:
本教程假定你正在运行Mercurial0.7以上版本。
换句话说,如果你有0.6版的,本教程不适用。
本教程是为Mercurial0.7进行了升级。
Mercurial程序命名为hg。
每一个Mercurial命令以hg开头,后面跟命令名,然后是选项和参数。
目前Mercurial已经安装,我们应该可以在命令行上简单键入hg,程序应该显示一些有用的命令汇总:
$hg
MercurialDistributedSCM
basiccommands(use"
hghelp"
forthefulllistoroption"
-v"
fordetails):
addaddthespecifiedfilesonthenextcommit
annotateshowchangesetinformationperfileline
clonemakeacopyofanexistingrepository
(...)
如果不是这样的,你安装的程序有问题,你应该看看InstallTroubleshooting。
为了知道Mercurial是什么版本,请键入:
$hgversion
MercurialDistributedSCM(version0.7)
Copyright(C)2005MattMackall<
mpm@>
Thisisfreesoftware;
seethesourceforcopyingconditions.ThereisNO
warranty;
notevenforMERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.
如果所有都运行地很好,让我们继续进入教程-克隆仓库。
教程-克隆仓库
我们已经按照ChineseTutorialInstall安装了Mercurial,对吗?
很好!
Mercurial中,我们在仓库里做我们所有的工作。
仓库是一个目录,它包含所有我们希望保留历史的源代码和这些源代码的历史记录。
最简单开始Mercurial的方法是使用一个已经包含文件和一些历史记录的仓库。
我们使用clone命令来做这个事情。
这生产一个仓库的克隆,它生成一个完整的仓库复本,这样我们有一个本地私有的仓库来工作。
让我们克隆一个在上的"
hello,world"
仓库:
$hgclonemy-hello
如果所有都没问题,clone命令输出:
requestingallchanges
addingchangesets
addingmanifests
addingfilechanges
added2changesetswith2changesto2files
我们应该在当前目录下发现一个目录叫my-hello:
$ls
my-hello
在my-hello目录中,我们应该发现这些文件:
$lsmy-hello
Makefilehello.c
这些文件是我们刚克隆的仓库的精确复本。
在Mercurial中,每一个仓库是自包含的。
当你克隆一个仓库后,新仓库变成克隆时它的精确复本,但是后续的两个仓库当中任一方改变都不会在对方显示,除非你用Pull或Push明确地传递改变。
现在我们可以检查新仓库的一些历史记录,继续教程-检查仓库历史。
教程-检查仓库历史
现在我们已经参照教程-克隆仓库克隆了一个仓库;
我们仓库的本地拷贝叫my-hello.
让我们看一看这个仓库的历史记录。
我们用log命令来做这个事情。
这个命令按时间顺序从近到远输出在仓库中发生的每一个事件。
$cdmy-hello
$hglog
changeset:
1:
82e55d328c8c
tag:
tip
user:
mpm@
date:
FriAug2601:
21:
282005-0700
summary:
Createamakefile
0:
0a04b987be5a
20:
502005-0700
Createastandard"
program
这些输出行的含义是这样的。
∙每一段描述一个特定的改变集。
一个或几个文件的改变集合在一起形成一个逻辑单元,称为改变集。
o在上面的例子中,我们可以看到该仓库的历史包括了两个改变集。
∙changeset标识了一个改变集.
o冒号前面的数字代表版本号;
它是一种标识改变集的本地缩写.只是在你的本地仓库中这个版本号才有意义.
o冒号后面的那个很长的十六进制串是ChangeSetID;
它是标识改变集的全局唯一标识符,在所有包含这个改变集的仓库中都相同.如果你正在和其他人讨论某个改变集,请使用这个ChangeSetID,而不是上面说的版本号.
∙tag是一个标签,可以理解成为一个改变集指定的名字.
o你可以给任何改变集指定一个或者多个标签.实际上,许多改变集都是没有标签的,所以tag这一行很多时候都不存在.
o名叫tip的特殊标签总是表示,它是仓库中最后一个改变集。
如果你创建另外的改变集(一会我们会看到),那么它将会变成Tip。
∙user确定了谁创建了本改变集。
这是一个无格式的字符串;
它通常包括电子邮件地址,个人姓名等。
∙date描述了改变集是什么时候创建的。
这些时间是创建改变集的人所在区域的当地时间。
∙summary给出了改变集描述的首行。
它是在创建改变集时进入的,它可以帮助创建者和其它人了解改变集的目的。
∙parent标志了改变集的父辈,当你从几个仓库合并而来的情况下,父辈有多个。
o大多数情况只有一个父辈,它比目前的改变集旧。
这是在我们例子中使用的。
我们可以通过指定-v诊断输出选项来获得更多更详细的历史信息,或者指定--debug选项来获得历史信息中的一切细节:
$hglog-v
82e55d328c8ca4ee16520036c0aaace03a5beb65
files:
Makefile
description:
Createamakefile
$hglog--debug
manifest:
0c7c1d435e6703e03ac6634a7c32da3a082d1600
parent:
0a04b987be5ae354b710cefeba0e2d9de7ad41a9
-1:
0000000000000000000000000000000000000000
files+:
--v的输出比缺省输出要多。
∙changeset给出不缩略的改变集标号。
∙files列出在本改变集中文件的改变。
∙description包含了改变集的完整多行描述而不仅是头一行。
o在我们例子中,描述都只有一行,所以没什么特别不同的地方。
--debug给谓词输出添加了以下方面:
∙file+列出了在此改变集中增加的文件。
∙file-列出了在此改变集中删除的文件。
∙manifest给这个改变集一个Manifest号。
∙两个parent域给这个改变集的两个父辈号码,-1:
0000000000000000000000000000000000000000表示没有父改变集。
log命令与-r选项一起使用可以查看特定改变集。
$hglog-r1
The-r选项实际上支持一种非常灵活的语法来选择改变集的范围。
但是由于在我们例子的仓库里的改变集很有限,我们不能做很好的示范。
你可以看Mercurial的manpage来得到更多的信息。
log命令与-p选项一起可以显示和此改变集相关联的补丁。
$hglog-r1-p
diff-r0a04b987be5a-r82e55d328c8cMakefile
---/dev/nullFriAug2601:
+++b/MakefileFriAug2601:
@@-0,0+1,1@@
+all:
hello
我们也可以使用tip命令来显示tip的信息,如最后的改变集。
tip命令除了不支持-p选项外,它可以当做log
-r
tip的快捷方式,
$hgtip
$hglog-rtip
现在我们对发生了什么有了一点概念,现在让我们进入并做一些修改吧!
进入教程-生成第一个[变更]!
教程-生成第一个[变更]
完成了教程-历史的学习之后,我们来到my-hello[仓库]里面,就是我们在教程-克隆中[克隆]得到的。
在Mercurial开发实践中一个好的做法是把每个变更隔离在各自的仓库里。
这样可以避免把不相关的代码混杂起来,并且便于一个接一个的测试每一部分工作。
我们现在就开始采用这一模式。
我们的目标很简单,让“hello,world”程序打印另外一行输出。
首先,我们给这个小项目创建一个新的仓库叫做my-hello-new-output,方法是对my-hello做克隆。
$cd..
$hgclonemy-hellomy-hello-new-output
这一次,克隆命令如果成功将不会打印任何输出。
注:
注意我们给新的仓库命名了一个描述性的名字,基本上是说明这个仓库的目的。
在Mercurial里面给一个仓库创建[克隆]很方便,我们会很快的积攒起很多稍微不同的仓库。
如果我们不给他们描述性的命名,很快就会没法分辨它们。
现在可以在新的仓库里面进行修改了。
我们进入工作目录,使用我们喜欢的编辑软件修改源文件。
$cdmy-hello-new-output
*PlacedinthepublicdomainbyBryanO'
Sullivan
*
*ThisprogramisnotcoveredbypatentsintheUnitedStatesorother
*countries.
*/
#include<
stdio.h>
intmain(intargc,char**argv)
{
printf("
hello,world!
\n"
);
return0;
}
我们要修改main让它再多打印一行输出:
切换行号显示
sureamgladI'
musingMercurial!
完成之后退出我们喜欢的编辑器,任务完成。
有了刚才的修改我们就可以创建一个[变更集]。
可是万一我们背别的事情打扰,在创建变更集之后忘记了它里面有哪些变更,怎么办呢?
这时候我们要用到status命令。
$hgstatus
Mhello.c
输出很简短。
总之以M开头的行意思就是hello.c文件修改过了,那么我们的变更已经可以加入一个变更集了。
使用diff命令我们可以检查文件实际的改变:
$hgdiff
diff-r82e55d328c8chello.c
---a/hello.cFriAug2601:
+++b/hello.cFriSep3010:
27:
472005+0800
@@-12,5+12,6@@
intmain(intargc,char**argv)
{
+printf("
}
万一我们希望放弃我们的变更并重新开始,我们可以用revert命令来恢复到我们没有更改的状态。
请确认你确实知道这是你真的希望做的。
$hgrevert
创建一个变更集的动作称为提交它。
我们用commit命令来执行提交。
$hgcommit
这个命令把我们带到一个编辑器内,同时给我们展示了几行语焉不详的文字。
缺省的编辑器是vi。
这可以用环境变量EDITOR或HGEDITOR来改变。
同样,根据你怎样输入和保存文件,变更集记录哈希表可能不一样。
(emptyline)
HG:
manifesthash14595beb70bcfb74bf227437d70c38878421c944
changedhello.c
第一行是空的,接下来的几行标明哪些文件将进入本变更集。
T
为了提交变更集,我们必须描述它的原因。
这通常称为变更集注释。
让我们输入一些:
ExpressgreatjoyatexistenceofMercurial
接着,我保存测试并退出编辑器,如果一切正常,commit命令将没有任何提示地退出。
如果你在没有保存文本的情况下退出编辑器,commit将中断操作,这样你可以在提交前改变你的想法。
让我们看看status命令现在告诉我们什么?
什么也没有!
我们的变更已经提交到变更集里了,那里没有修改的文件需要提交的。
我们的末端现在和我们工作目录的内容一致了。
我们现在可以为我们的新工作检查变更的历史:
2:
a58809af174d
26:
ExpressgreatjoyatexistenceofMercurial
就是它了!
我们已经提交了一个变更集。
用户,日期和变更集号当然和我的是不一样的。
正如我们在教程--复制中讨论的,新的变更集只存在于本仓库中。
这是Mercurial关键的一部分工作方法。
如果要分享变更,我们必须继续教程-与别的仓库分享改变。
教程-与别的仓库分享改变
在第一次改变的教程中,我们在my-hello-new-output仓库中创建了一个变更集。
现在我们希望在其它地方扩展那个变化。
遵循Mercurial好的风格,我们首先克隆我们原始的仓库.
$hgclonemy-hellomy-hello-share
我们可以使用tip命令来找出每一个仓库的Tip。
(记住,Tip是最后一个变更集。
)我们在这用了一个-q("
保持安静"
)参数来让Mercurial不要输出Tip的完整描述。
$cdmy-hello-share
$hg-qtip
1:
$cd../my-hello-new-output
2:
我们可以看到Aswecansee,theTip在各个仓库中是不同的。
让我们回到my-hello-share并在那里扩展我们的新变更集。
要达到这个目的,我们用pull命令,这个命令所有在别的仓库中有而在本仓库中没没有的ChangeSet从别的仓库Pull到本仓库。
$cd../my-hello-share
$hgpull../my-hello-new-output
pullingfrom../my-hello-new-output
searchingforchanges
added1changesetswith1changesto1files
(run'
hgupdate'
togetaworkingcopy)
不像其它普通的Mercurial命令,pull有点罗嗦。
在这点上Pull是成功的。
最近一行输出是重要的。
在Pull后,缺省情况下Mercurial不更新工作目录。
这意味着虽然Repository现在有变更集,但在工作目录中的hello.c文件仍然是Pull之前老的内容。
我们可以用以下Mercurial的提醒来Update这个文件(也包括所有其它Pull时改变的文件)。
$hgupdate
现在,我们可以检查并看到my-hello-share和my-hello-new-output有同样的内容和版本历史记录。
为了和别人分享改变,我们继续导出。
教程-和别人分享改变
在《教程-与别的仓库分享改变》中我们学到如何把变更集从一个仓库传递到另一个仓库去。
有很多其它的方式在人和仓库之间分享改变,其中最常见的一种是通过电子邮件。
我们提交(Commit)改变后,我们可以导出(Export)它到一个文件里,并把这个文件作为附件email给其它人。
我们用export命令来导出(Export)改变。
我们必需提供一个Tag,版本号或变更集号来告诉Mercurial有什么进入了导出(Export)。
在我们的这个案例中,我们希望导出(Export)Tip。
假设我们还在my-hello-share这个目录里,让我们做。
$hgexporttip
#HGchangesetpatch
#Usermpm@
#NodeIDa58809af174d89a3afbbbb48008d34deb30d8574
#Parent82e55d328c8ca4ee16520036c0aaace03a5beb65
Expressg
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MercurialHg 分布式 代码 托管 快速 入门