当前位置:  开发笔记 > 编程语言 > 正文

Mercurial for Beginners:The Definitive Practical Guide

如何解决《MercurialforBeginners:TheDefinitivePracticalGuide》经验,为你挑选了5个好方法。

灵感来自Git的初学者:最终的实用指南.

这是一个信息使用水银为汇编初学者实际使用.

初学者 - 一个已经触及源代码控制而不太了解它的程序员.

实用 - 涵盖大多数用户经常遇到的情况 - 创建存储库,分支,合并,从/向远程存储库提取/推送等.

备注:

解释如何完成某些事情而不是如何实现某些事情.

每个答案处理一个问题.

尽可能简明扼要地回答.

编辑/扩展现有答案,而不是在同一主题上创建新答案.

请为想要了解更多信息的人提供Mercurial wiki或HG Book的链接.

问题:

安装/设置

如何安装Mercurial?

如何设置Mercurial?

你如何创建一个新的项目/存储库?

你如何配置它来忽略文件?

使用代码

你如何获得最新的代码?

你怎么看代码?

你如何提交变更?

您如何看待未提交的内容或当前代码库的状态?

如何从存储库中删除文件?

你如何破坏不必要的提交?

如何比较文件的两个版本,或者当前文件和以前的版本?

您如何看待文件或存储库的修订历史记录?

你如何处理二进制文件(例如,visio文档,或编译器环境)?

如何合并"同时"更改的文件?

你如何恢复变更集?

你如何回到以前版本的代码?

如何从特定变更集中提取补丁?

如何在不使用Mercurial命令的情况下记录您重命名或删除文件?

标记,分支,发布,基线

你如何'标记''标记'或'释放'特定文件集的特定修订集,以便你可以随后拉出那个?

你怎么拉特定的'释放'?

你怎么分支?

你如何合并分支机构?

如何将一个分支的部分合并到另一个分支?

其他

Mercurial的优秀GUI/IDE插件?优点缺点?

初学者应该知道的任何其他常见任务?

我如何与Subversion接口?

其他Mercurial参考

Mercurial:权威指南

Mercurial Wiki

认识Mercurial | Peepcode截屏视频

掌握Mercurial | TekPub Screencast

Hg Init - 全面的Mercurial教程

Joakim Lundb.. 16

你如何配置它来忽略文件?

忽略是在存储库根目录中名为.hgignore的普通文本文件中配置的.像普通文件一样添加它:

hg add .hgignore

有两种语法选项可用于文件匹配,glob和regexp.glob是类似unix的文件名扩展,regexp是正则表达式.您可以通过添加syntax: globsyntax: regexp逐行添加来激活每个.之后的所有行将使用该语法,直到下一个语法标记.您可以拥有任意数量的语法标记.默认语法是regexp,因此如果您只使用regexp,则不需要任何语法标记.

您可以使用#添加评论

例:

# python temporary files
syntax: glob
*.pyc

#editor autosaves
*~

# temporary data
syntax: regexp
temp

忽略仅适用于非托管文件(即尚未签入的文件).要忽略受版本控制的文件,可以使用开关-I和-X.



1> Joakim Lundb..:
你如何配置它来忽略文件?

忽略是在存储库根目录中名为.hgignore的普通文本文件中配置的.像普通文件一样添加它:

hg add .hgignore

有两种语法选项可用于文件匹配,glob和regexp.glob是类似unix的文件名扩展,regexp是正则表达式.您可以通过添加syntax: globsyntax: regexp逐行添加来激活每个.之后的所有行将使用该语法,直到下一个语法标记.您可以拥有任意数量的语法标记.默认语法是regexp,因此如果您只使用regexp,则不需要任何语法标记.

您可以使用#添加评论

例:

# python temporary files
syntax: glob
*.pyc

#editor autosaves
*~

# temporary data
syntax: regexp
temp

忽略仅适用于非托管文件(即尚未签入的文件).要忽略受版本控制的文件,可以使用开关-I和-X.


如果您手动`hg add`忽略文件,Mercurial会跟踪它们,这可能很有用.例如,如果您有一堆文件,如`deploy-test.conf`,`deploy-production.conf`等,并且不想对它们进行版本化(它们可能包含密码),但您*需要*想要对于版本`deploy-template.conf`你可以忽略`deploy*`并手动添加`deploy-templace.conf`.

2> Steve Losh..:

您如何看待未提交的内容或当前代码库的状态?

要查看已更改的文件列表:

$ hg status

这将打印已更改的每个文件及其状态,其中可包括:

M - 修改.该文件已更改,并且尚未提交更改.

A- 添加.之前未跟踪该文件,但如果您提交,Mercurial将开始跟踪它.

R - 删除了.该文件之前已被跟踪,但如果您提交,Mercurial将在此提交和将来的提交中停止跟踪它.

? - 未知.Mercurial目前未跟踪该文件.除非您使用hg add添加,否则提交将不会对其产生任何影响.

!- 失踪.该文件已被跟踪,但Mercurial无法在工作副本中找到它.

要查看实际对文件所做的更改:

$ hg diff



3> 小智..:

你如何创建一个新的项目/存储库?

$ hg init my-repository



4> quark..:

我如何与Subversion接口?

有三种方式:


该转换扩展将克隆现有的Subversion版本库到水银之一.它与Mercurial一起提供.它的工作方式大致如下:

hg convert  

例如,这将获取SixApart memcached存储库的主干.

hg convert http://code.sixapart.com/svn/memcached/trunk

扩展可以逐步将新版本从Subversion存储库引入Mercurial存储库(有点像拉动).但是它不支持Mercurial修订并将它们发送回Subversion(没有推送). [XXX:如果错误,请纠正此问题].


该hgsubversion扩展.它在很多方面都是最复杂的解决方案,因为它使用Subversion API与Subversion存储库进行通信.它的目标是成为 HG-svn的桥梁.它允许完全舍入修改(完全克隆,拉动和推送),但在撰写本文时[XXX:如果/当它变得不正确时修改此内容]它仍在开发中,并且还没有正式发布.因此,它只适用于最新的Mercurial(撰写本文时为1.3).

它映射标签和分支(在所有标签之前tags/用于区分它们与等效命名的分支).

它维护了一个特殊的分支,closed-branches用于关闭在Subversion中删除的分支.

要求根据trunk/branches/tags的约定来布置Subversion存储库.

命令集通常hg svn 虽然它的目的是集成到你不需要'svn'部分的那一点(即它希望尽可能多地处理Subversion克隆,就像任何其他Mercurial存储库一样).

它的工作原理如下:

克隆:

hg svnclone  

或(仅适用于svn://URL)

hg clone 

拉:

hg svn pull

推:

hg svn push

来电:

hg svn incoming

传出:

hg svn outgoing

签出整个存储库:

hg svnclone http://code.sixapart.com/svn/memcached

该hgsvn实用程序(到位桶树).直到最近,这只允许你克隆并提取一个Subversion存储库,但hgsvn 0.1.7它支持push.[我不知道它的推力有多.任何具有更多经验的人都应该更新.]它具有以下显着特征:

它为每个SVN标记生成Mercurial标记.

它在每个变更集上放置一个本地标记以标记其SVN修订版.

它将每个Mercurial修订版放在以其SVN分支命名的命名分支上.例如branches/some-feature,就像hg branch some-feature.它打开了主干trunk(即Mercurial默认分支上没有任何内容,除非用户明确切换到它.)

它将尝试识别分支和标签,并创建它们,但如果它不能它只是跳过它们.当Subversion存储库不遵循传统的trunk/branches/tags布局时,这很方便.

它的工作原理如下:

克隆:

hgimportsvn 

拉:

hgpullsvn

推:

hgpushsvn

来电:

hgpullsvn -n

传出:

hgpushsvn -n

签出整个存储库:

hgimportsvn http://code.sixapart.com/svn/memcached

只检查行李箱:

hgimportsvn http://code.sixapart.com/svn/memcached/trunk


我刚刚使用了`hg convert`,当你拥有一个包含很多提交的svn存储库时,它确实需要很长时间.使用`svnsync`设置本地存储库有助于加快速度 - 尤其是当您需要多次执行时,因为您在convert命令中有一些错误的选项.

5> NawaMan..:

如何比较文件的两个版本,或者当前文件和以前的版本?

两者都用hg diff.何时hg diff使用工作副本和提示(最新提交)中的所有更改都会显示.

对于"如何比较文件的两个修订版?"

$ hg diff -r{rev1} -r{rev2} {file.code}

上面的命令将显示"file.code"的rev1和rev2之间的不同.

对于"如何比较当前文件和以前的版本?"

$ hg diff {file.code}

上面的命令将显示当前版本的"file.code"和最新版本(最新提交的)之间的不同.

:d

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有