Mercurial for Beginners:The Definitive Practical Guide

Laz*_*Laz 237 version-control mercurial

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

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

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

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

备注:

  • 解释如何完成某些事情而不是如何实现某些事情.
  • 每个答案处理一个问题.
  • 尽可能简明扼要地回答.
  • 编辑/扩展现有答案,而不是在同一主题上创建新答案.
  • 请为想要了解更多信息的人提供Mercurial wikiHG Book的链接.

问题:

安装/设置

使用代码

标记,分支,发布,基线

其他

其他Mercurial参考

Joa*_*org 16

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

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

hg add .hgignore
Run Code Online (Sandbox Code Playgroud)

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

您可以使用#添加评论

例:

# python temporary files
syntax: glob
*.pyc

#editor autosaves
*~

# temporary data
syntax: regexp
temp
Run Code Online (Sandbox Code Playgroud)

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

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

Ste*_*osh 7

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

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

$ hg status
Run Code Online (Sandbox Code Playgroud)

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

  • M - 修改.该文件已更改,并且尚未提交更改.
  • A- 添加.之前未跟踪该文件,但如果您提交,Mercurial将开始跟踪它.
  • R - 删除了.该文件之前已被跟踪,但如果您提交,Mercurial将在此提交和将来的提交中停止跟踪它.
  • ? - 未知.Mercurial目前未跟踪该文件.除非您使用hg add添加,否则提交将不会对其产生任何影响.
  • !- 失踪.该文件已被跟踪,但Mercurial无法在工作副本中找到它.

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

$ hg diff
Run Code Online (Sandbox Code Playgroud)


小智 6

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

$ hg init my-repository
Run Code Online (Sandbox Code Playgroud)


qua*_*ark 5

我如何与Subversion接口?

有三种方式:


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

hg convert <Subversion URL or directory> <path to new Mercurial repository>
Run Code Online (Sandbox Code Playgroud)

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

hg convert http://code.sixapart.com/svn/memcached/trunk
Run Code Online (Sandbox Code Playgroud)

扩展可以逐步将新版本从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 <subcommand>虽然它的目的是集成到你不需要'svn'部分的那一点(即它希望尽可能多地处理Subversion克隆,就像任何其他Mercurial存储库一样).

它的工作原理如下:

克隆:

hg svnclone <Subversion URL> 
Run Code Online (Sandbox Code Playgroud)

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

hg clone <svn:// URL>
Run Code Online (Sandbox Code Playgroud)

拉:

hg svn pull
Run Code Online (Sandbox Code Playgroud)

推:

hg svn push
Run Code Online (Sandbox Code Playgroud)

来电:

hg svn incoming
Run Code Online (Sandbox Code Playgroud)

传出:

hg svn outgoing
Run Code Online (Sandbox Code Playgroud)

签出整个存储库:

hg svnclone http://code.sixapart.com/svn/memcached
Run Code Online (Sandbox Code Playgroud)

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 <Subversion URL>
Run Code Online (Sandbox Code Playgroud)

拉:

hgpullsvn
Run Code Online (Sandbox Code Playgroud)

推:

hgpushsvn
Run Code Online (Sandbox Code Playgroud)

来电:

hgpullsvn -n
Run Code Online (Sandbox Code Playgroud)

传出:

hgpushsvn -n
Run Code Online (Sandbox Code Playgroud)

签出整个存储库:

hgimportsvn http://code.sixapart.com/svn/memcached
Run Code Online (Sandbox Code Playgroud)

只检查行李箱:

hgimportsvn http://code.sixapart.com/svn/memcached/trunk
Run Code Online (Sandbox Code Playgroud)

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

Naw*_*Man 5

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

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

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

$ hg diff -r{rev1} -r{rev2} {file.code}
Run Code Online (Sandbox Code Playgroud)

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

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

$ hg diff {file.code}
Run Code Online (Sandbox Code Playgroud)

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

:d