跟踪你

更新时间:2023-03-18 23:26:25 阅读: 评论:0

己衣大裂谷-几岁可以上幼儿园

跟踪你
2023年3月19日发(作者:我是大老板)

hg常⽤命令

关于hg命令选项

如果你是在windows系统下,使⽤的是图像界⾯,你很可能不常⽤它。但是⼀旦你了解这些命令之后,会觉得很⽅便。hg有很多命令,这些

命令都有⼀定的选项,在开始的时候,只知道⽤它,有时候命令选项以”–”开头,有时⼜以”-”开头。翻阅资料,发现对于命令选项,hg有以下

的约定。

1.每⼀个命令选项都有⼀个长的名称,如hglog命令会使⽤–rev选项;

2.⼤多数选项拥有⼀个短的名称,如—rev有⼀个-r的短名;

3.长名称以两条横线(–)作为起始,短名起始是⼀条横线(-)。如—rev、-r;

4.⽆论是长名还是短名,其⽤途是⼀致的。如-r和—rev其后尼古拉一世 都跟⼀个变更集合的ID或版本号;

5.如果使⽤的是短名,多个名称可以连在⼀起运⾏。如hglog–v–r–p2可以写作hglog–vpr2。

关于hglog命令

使⽤该命令可以了解代码仓库变更的历史,其输出的结果中包含以下⼏个字段:

t该字段被⼀个分号(:)分成两部分,分号的前⾯是⼀个数字,其后是⼀个⼗六进制的字符串。在查看版本历史的时候,

常常会⽤到前⾯得数字。这⾥需要注意的是,该数字所代表的变更集合不是唯⼀的(⽐如a,b,c在⼀个代码仓库中的顺序是

0,1,2,在另外⼀个代码仓库中可能是0,2,1)。真正指向唯⼀的变更集合的是后⾯的⼗六进制的字符串。

代表集合的创建者;

代表集合创建的时间;

y创建者提供的关于该集合的描述⽂本;

有⼀些集合会包含⼀个tag字段,这个特别的字段总是指向代码仓库中最新的版本。

明⽩以上字段的含义,对于你查看版本历史和提交代码时书写描述性⽂本很有意义。在后⾯的章节中,甚⾄可以根据这些字段改变其输出的

格式。

要查看特定的版本,在hglog后跟上版本号即可,如:

1.//查看特定的版本;

-r2

同时查看⼏个版本,可以使⽤如下的命令:

1.//查看版本2,3,4

-r2:4

如果要查看版本的详细内容,包括⽂件发⽣改变的内容,可以添加-p(–patch)命令选项。

1.//查看版本的详细内容

-log-vpr1

下图是使⽤该命令后的输出结果:

使⽤hgcommit提交代码的需青铜器 要注意的问题

第⼀次使⽤hgcommit命令提交代码时,很可能会出现代码⽆法提交的问题。这是因为在代码提交时hg会尝试去找到⼀个有效的⽤户名。它

会按下⾯的顺序去逐个尝试寻找有效的⽤户名:

1.如果在使⽤hgconmit提交代码时,使⽤-u命令选项,并在其后跟上⼀个⽤户名(如:dexibe@)。此时,该命令将具有最⾼

的优先权;

2.如果没有第⼀步的命令选项,它会查看你是否设置了HGUSER环境变量;

3.如果在你的home⽬录下,你创建了.hgrc⽂件,并且该⽂件设置了urname,它会启⽤该⽤户名;

4.到这⼀步,它会查看你的email环境变量;

5.如果以上都没有找到合适的⽤户信息,hg将查看你的系统寻找⽤户名和主机名称,并试图根据这些组件构建有效的⽤户名,通常情况

下⽤户名是不可⽤的,只会呈现⼀段警⽰语句;

下图是没有设置⽤户名提交代码时的输出结果:

拉取和推送代码

拉取代码,使⽤hgpull即可,有⼀个hgincoming命令我很少⽤到,仔细看了看,这个命令还是很管⽤。hgincoming命令不会真正的拉取代

码到本地仓库,它只是告诉你使⽤hgpull会将哪些变更集合拉⾄本地仓库。这对于你拉取特定的版本集合很管⽤。

推送代码,使⽤hgpush即可。在真正推送之前,可以使⽤hgoutgoing查看有哪些改变将会被推送⾄代码仓库。

在项⽬推进的过程中,经常会出现两个⼈共同修改⼀个⽂件的情况。这个时候,我们就要进⾏代码合并。使⽤hg合并代码⾮常简单。Hg记

录每⼀次变更集合的⽗级,如果变更集合⼀个⽗级,⼀个head就是⼀个没有⼦级的集合。当多⼈修改同⼀个⽂件时,就会出现不⽌⼀个

head的情况,此时需要进⾏代码合并。

如果⼀个⽂件同时被⼏个⼈修改,hgpull命令会告知你”heads”的情况。此时如果使⽤hgupdate命令,会出现以下的提⽰语:abort:cross

branches(u‘hg渔场 merge’or‘hgupdate-C’)

如果要强制更新,可以使⽤hgupdate–C。要查看heads可以使⽤hgheads命令,该命令会告知你head的情况,使⽤hgmerge就会完成两

个head之间的代码合并。此时使⽤hgparents命令会看到⽗级的情况。在完成代码合并之后,⼀定不要忘记使⽤hgcommit命令提交更改的

代码。

⼤多数情况下,代码合并都很简单。但是,如果多个⼈修改⽂件的同⼀个地⽅,情况就有所不同了。除⾮修改的内容⼀样,否则会导致冲突

发⽣。Hg不能很好的处理这些冲突,但是它能运⾏外部程序来处理这些冲突,如kdiff3。这种合并就是所谓的“三路合并”(three-way

merge)。此时,窗⼝会被分成三部分:

1.左边是⽂件的的基础版本;

2.中间是你⾃⼰的版本,⽂件包括被修改的内容;

3.右侧是你将要与之合并的版本。

你可以在三个窗⼝之间来回切换,修改⽂件的冲突部分,将其更改为我们需要的部分。⼀旦完成⽂件合并,⼀定要记住提交合并之后的代

码。Hg本⾝不能处理有冲突的变更集合,它会在存在冲突⽂件上留下⼀个标记,告知⽤户该⽂件存在冲突。

仔细回忆⼀下,从代码仓库中拉取代码(hgpull)后,更新(hgupdate)本地仓库,进⾏代码合并(hgmerge),提交(hgcommit)合并

的代码。在hg中有⼀个命令可以完成前三步操作,它就是fetch。要启⽤它,只需在.hgrc中的[extensions]设置fetch=即可,这是个标准的扩

展,hg知道在何处去查找这个扩展,使⽤hghelpextensions命令,你可以看到关于fetch的描述:pull,updateandmergeonecommand。

启⽤成功之后,使⽤hgfetch试试。

前⾯的两节简要地记录了使⽤hg命令的⼀些注意事项,并提到了⽂件merge的⼀些知识,这⼀节将回顾使⽤hg来添加、删除、复制⽂件的⼀

些操作。

⼀、如何让HG跟踪你的⽂件

hg不会⾃动的管理你仓库中⽂件,hgstatus命令会告诉你那些它不知道的⽂件,它会在这些⽂件的前⾯打上⼀个“?”号。假如在你的仓库中

有⼀个的⽂件,执⾏hgstatus你会看到:

在前⾯,我们会看到⼀个“?”号。如要让hg管理该⽂件,执⾏如下命令:

此时运⾏hgst,你会看到:

⽂件前⾯的“?”号变成了“A”。执⾏hgcommit命令之后,就不会再出现在hgstatus的输出结果之中。hgstatus命令的输出结

果中仅包含删除的(removed)、被修改的(modified)、重命名的(renamed)⽂件。添加⼀个⽂件,hg什么也不会做,它只是在执⾏下

⼀次提交(hgcommit)之前对该⽂件“拍⼀张快照”。

在将⽂件添加到代码仓库中,需注意⼀下⼏点:

1.如果使⽤hgadd后跟的是⼀个⽬录,该命令会将该⽬录下的所有⽂件添加到仓库之中,包括⼦⽬录中的⽂件。假如有⼀个⽬录b,其下

有⼀个⽂件和d⽬录,d⽬录之下有⼀个⽂件。运⾏hgaddb,你会看到:

并不追踪⽂件夹信息,⽽是追踪⽂件的路径。在创建⼀个⽂件之前,⾸先创建⽂件所在的路径。删除⼀个⽂件后,它会删除⽂件所

在路径的所有空的⽂件夹。⼀般情况下,很少⽤到空⽂件夹。如果在你的代码仓库中需要空⽂件夹,可以通过hgadd来添加⼀个隐藏

的⽂件。在linux系统中,任何以“.”开头的⽂件都被视作隐藏⽂件。除此之外,你可以在需要它之前通过⾃动化执⾏脚本⽅式创建空⽂

件夹。

⼆、如何停⽌⽂件跟踪

如果你决定不让代码仓库跟踪你的⽂件,使⽤hgremove命令即可。⽂件删除之后,运⾏hgst跑步频率 atus后的输出结果中,被删除的⽂件之前会打

上“R”标识符。假如我移除我仓库中的⽂件,你会看到:

使⽤hgremove删除⼀个⽂件后,hg将停⽌追踪该⽂件的任何改变。即使你重新创建⼀个与之同名的⽂件,hg也会⽆动于衷。假设你重新创

建⼀个与之同名的⽂件,运⾏hgadd命令让hg跟踪它。hg会认为新添加的⽂件与先前的同名⽂件毫⽆关联。

删除⼀个⽂件并不会对该⽂件的历史带来任何影响。它仅仅从当前⼯作⽬录中移除⽂件的当前版本,并在下⼀次代码提交的时候让hg停⽌对

该⽂件的追踪。

如果你不是使⽤hgremove来删除⼀个⽂件,hg会认为⽂件丢失。它会在丢失的⽂件之前打上“!”标识符。假设我⼿动删除⼯作⽬录下的

,然后运⾏hgstatus命令,你会看到如下结果:

假设你的本意是将该⽂件删除,你可以在任何时候运⾏hgremove–after命令来真正的删除该⽂件。紧跟上⾯的例⼦,执⾏该命令会看到如

下结果:

可以看到,前⾯打上了“R”标识符。

如果意外的删除了丢失的⽂件,可以使⽤hgrevert命令将其恢复。还是紧跟上⾯的例⼦,运⾏该命令,你会看到:

你可能认为⽂件添加和删除操作相当繁琐。令⼈兴奋的是,hg有⼀些快捷⽅式可以⼀次完成⽂件的添加和删除⽂件操作。

1.使⽤hgaddremove命令;

2.在提交代码时使⽤-A参数,即hgcommint-A-m“提交代码”。

三、复制⽂件

hg提供了hgcopy命令来复制⼀个⽂件。⽤该命令来复制⽂件,hg会记住新的的⽂件是源⽂件的副本。在你合并代码的时候,它会对其作特

殊的处理。下图是使⽤hgcopy复制⽂件后的截图:

从图中可以看到,hgstatus-C可以看到是从复制⽽来。复制的⽂件在代码合并的时候会发⽣什么呢?以下是在在两

个⼯作⽬录中复制⽂件,并在⼀个仓库中修改⽂件时的截图。

查看,你会看到,对所作的修改同步到了。这看上去有些怪异,但是其结果却相当尽如⼈意。可以想

见,如果hg不将其同步到⽂件副本,那么该副本就会保持原来的版本不变。当然,你也可以⼿动去修改副本⽂件。这⾥需要注意的是,这种

信息直播仅发⽣在以下⼏种情况:

1.代码合并的时;

2.你的代码仓库中还没有该⽂件的副本时。

如果说这种⽂件复制所导致的信息直播并不是你所需要的结果,你可以使⽤系统正常的⽂件复制操作。⽐如使⽤unix中的cp命令,然后⽤hg

add命令将其添加⾄代码仓库。

如果你修改⼀个⽂件,但是在没有提交代码的情况下复制该⽂件,那么在该副本⽂件中仍将包含⽂件被修改的部分。

hgcopy命令与unix系统中的cp命令极其相似,只需要提供两个或三个以上的参数即可,最后的⼀个参数被视作⽬的地,其它都被视作复制

源。这种操作包括以下⼏种情况:

1.⽬的地不存在,源⽂件为单个⽂件,将创建同名的新⽂件;如:

ak//⽬录k不存在,重建k⽬录,并将a复制到k⽂件夹之下

2.⽬的地是⼀个⽬录,将源⽂件复制草房子读书笔记摘抄 到该⽬录之下;如:

abd//将a和b复制到d⽬录之下

3.复制源跟⽬的地都是⽬录,则将复制源复制到⽬标⽂件夹之下,并在⽬标⽂件夹之下根据复制源⽬录的名称重建⽬录,且保持复制源

的⽬录树结构;如:

zd//假设z的⽬录树结构为z/a/c,复制到⽬录d后,d的⽬录树结构为d/z/a/c

4.复制源是⼀个⽬录,⽬的地不存在,则创建新的⽬录,并将复制源下的⽬录树复制到新的⽬录之下;如:

ze//假设z的⽬录结构为z/a/c,复制完成后e的⽬录结构为e/a/c

与hgremove命令⼀样,如果你⼿动复制⼀个⽂件,牛肉炒辣椒的做法 并让hg能跟踪此⽂件,可以使⽤hgcopy–after[源⽂件][⽬标⽂件],如:

--afterab

四、⽂件重命名

与⽂件复制操作相⽐,⽂件重命名操作更为常见。在hg代码管理中,⽂件重命名操作在本质上等同于⽂件复制操作。因此,理解了⽂件的复

制操作,⽂件重命名操作就不是太难。

使⽤hgrename进⾏重命名操作时,hg先对⽂件进⾏复制操作,然后删除该⽂件,并标注该⽂件已经删除。如:

从图中可以看到,重命名的前⾯打上了“A”标识符,源⽂件前⾯打上了“R”标识符。运⾏hgstatus-C你会看到如下的结

果:

同样,如果你⼿动重命名⼀个⽂件,你也可以使⽤–after选项来让hg追踪你重命名的⽂件。在unix系统中,可以使⽤hgmv命令来重命名⼀

个⽂件。以下是在windows系统中操作的截图:

既然重命名操作与复制操作相似,那么在代码合并时对被重命名⽂件所作的操作将会同步⾄被重命名后的⽂件。⽐如,当你对⼀个⽂件进⾏

修改,⽽你的同伴对该⽂件进⾏了重命名操作。在代码合并的时候,你所做的修改将被同步到被重命名的⽂件之中。

对⽂件进⾏重命名操作时,会遇到以下两种情况:

1.同⼀个⽂件被重命名为不同的名称。在这种情况下,进⾏代码合并的时候,hg会发出警告,提⽰⽤户该⽂件存在不同的⽂件名,让⽤

户去决定选择哪⼀个⽂件名;

2.不同的⽂件被命名为相同的⽂件名。在这种情况下,hg会按正常合并程序来合并代码,让⽤户去选择合适的⽅案

3.在你的代码仓库中的有⼀个⽬录⽂件,它的名称与另外⼀个代码仓库中的⽂件名相同。这种情况下进⾏代码合并时,合并将会终⽌,

这是Mercurial遗留下来的⼀个bug。详情可以查看/bts/issue29。

五、如何处理较为复杂的代码合并

⼀般来说,合并代码是⼀件很简单的事情。不过有些时候代码合并也不是那么顺利。假如⼀个项⽬中有⼀个较⼤的⽂件同时被⼏个⼈编辑,

冲突就很容易出现,运⾏hgheads命令就会看到两个或多个head的情况,此时就需要分别与每⼀个head进⾏合并,并提交代码,直⾄看到

⼀个head为⽌。如果代码合并没有完成,hg将会阻⽌代码提交。

如果合并代码后提交代码失败,可以使⽤hgresolve命令铅笔卡通图片 。进⾏代码合并后,如果hg发现⽂件为unresolved状态,则认为代码合并失败。

hgresolve–list或hgresolve-l会输出每⼀个合并⽂件的状态,如果⽂件前⾯有⼀个标识符“U”,则认为合并不成功,提交代码就会失败。对

于hgresolve,有以下⼏个常见的选项:

1.–all或-a,尝试去合并所有u跳绳能长高吗 nresolved状态的⽂件;

2.–mark或-m,直接将⽂件修改为resolved状态;

3.–unmask或-u,直接将⽂件修改为unresolved状态。

六、关于hgdiff

hgdiff有⼀个选项–或者-g,该选项我们很少⽤到。假如你修改了⼀个⽂件的权限,运⾏hgstatus会看到⽂件被修改,⽽运⾏hgdiff将看不到

任何输出结果。如果在hgdiff后跟上-g选项,你将会看到⽂件的实际状态。在unix系统下运⾏以下代码,看看输出结果。

+xa

-g

七、后话

系统通常⽤来管理⽂本⽂件,⼀些集中式版本控制系统也能处理⼆进制⽂件。集中式版本控制系统提供⼀种锁定机制来编辑⽂件,这会很好

的处理⽂件冲突的发⽣。假如⼀个项⽬中有多个⼈频繁的修改⼀些⼆进制⽂件,那么hg或其它的分布式管理系统也许就不是最好的⼯具。

在修改⽂件时,hg仅仅存贮⽂件当前版本与上⼀个版本间的差异。如果对⽂件做⼀次⼩⼩的改动导致⽂件的逻辑发⽣了巨⼤的改变,hg就不

能很有效的存储这些差异,并直接影响到存储的空间和clone代码所花费的时间。因此,对于以下的两种情形应慎之⼜慎:

1.较⼤⽽且不能压缩的⽂件;

2.⽂件频繁编辑导致版本间产⽣巨⼤差异。

hg维护着克隆的所有历史,任何⼈的代码仓库都可以作为备份源。当然,可以在远程服务器上构建⼀个⼩⼩的脚本来定时备份最大降水量 代码仓库。如

果只是作传统的备份,运⾏即可,这⾥的选项-U会在clone完成后不对⼯作⽬录进⾏更新操作,详情可以参

看hghelpclone。

本文发布于:2023-03-18 23:26:23,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/1679153185304144.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:跟踪你.doc

本文 PDF 下载地址:跟踪你.pdf

上一篇:肉火锅
下一篇:返回列表
标签:跟踪你
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图