mercurial开始使用mercurial


备注

Mercurial是一个现代的开源分布式版本控制系统。您可能听说过git,这在今天更受欢迎; git和Mercurial具有很强的可比性,并提供大多数类似的功能。

开发人员使用Mercurial来跟踪其应用程序源代码的更改。它可用于跟踪任何文件目录的更改,但是,与大多数源控制系统一样,当这些文件是文本文件(而不是二进制文件)时,它最有效。 Mercurial还允许多个开发人员同时处理同一个源代码目录,并管理跟踪每个开发人员的更改然后合并这些更改的过程。

版本

Mercurial遵循基于时间的发布计划,并在2月,5月,8月和11月每三个月发布一次主要版本。每个剩余的月份都会发布一个次要版本。请注意,Mercurial不使用sematic版本控制,因此2.9.2(2.9版本中的最后一个)与3.0之间没有显着差异。

向后兼容性是Mercurial的关键要求,因此根据需要简单升级Mercurial安装通常是安全的。但是,至少每三个月执行一次这是一个好主意,因为某些功能可能会使旧客户端无法在较新的存储库上运行。

项目发布说明详细说明了版本之间的变化,而升级说明则提供了用户在升级时需要注意的内容的明确指导。

一系列值得注意的版本:

笔记日期
3.5 删除对Python 2.4和2.5的支持 2015年7月31日
2.1 引入变更集“阶段”,实现安全的历史记录修改 2012-02-01
1.9 推出Command Server API以支持更好的应用程序集成 2011-07-01
1.7 新的存储库格式支持不常见的文件名 2010-11-01

分枝

当我们第一次开始工作时,我们必须决定这是否是我们正在处理的独立工作领域,还是现有工作的一部分。如果它存在,我们可以在该分支机构工作。如果它是新的,我们将开始一个新的分支。

我们的工作流程是:

  • hg branch MyNewFeature
  • 工作工作工作
  • hg commit -m "committing my changes"
  • 工作工作工作
  • hg commit -m "more changes"

此时,我们希望将我们的工作推向远程服务器。但在推送更改之前(如果它是您之前没有推过的新分支,请忽略它),我们需要检查此分支是否有任何传入更改。我们可以查看:

hg incoming -b .
 

如果我们的分支上有任何传入的变更集,我们需要拉动并将我们的更改重新绑定到变更列表的顶部。

hg pull -b . --rebase
 

完成此操作后,或者如果没有传入的变更集,我们可以继续推送。

我们只想推动我们当前的工作,而不是我们所做过的一切。我真的从不推动我的整个存储库,而是我目前的工作。理由是推送整个存储库假设我正在集成多个工作线。但我只想整合我目前的工作,我只希望一次只能在一行中工作。

如果这是我第一次推动这个分支:

hg push -b . --new-branch
 

如果我已经推动了这个分支:

hg push -b .
 

“-b。”命令意味着只需按下当前分支,而不是其他任何东西。

要在工作分支之间切换

hg update myBranchName
 

入门

另请参阅Mercurial教程

创建Mercurial存储库

Mercurial存储库只是一个目录(称为“工作目录”),其中包含一个.hg 目录,其中包含有关存储库内容的元数据。这使得Mercurial非常轻巧,易于使用。要创建新存储库,只需运行:

$ hg init project
 

其中project 是您要创建的目录的名称。这将创建一个project 目录以及包含存储库本身的project/.hg 目录。

   $ cd project
   $ echo Hello World > hello.txt
   $ hg stat
   ? hello.txt
 

我们刚刚在存储库中创建了一个hello.txt 文件并运行了hg status (或简称stat )来查看我们的存储库的当前状态。正如你所看到的, hello.txt 是用? 注释的? ,意思是Mercurial还没有意识到这一点。 add 命令使用Mercurial注册这个新文件,因此它将包含在下一次提交中。

$ hg add hello.txt
 

现在Mercurial知道一个已更改的文件,你可以运行diff 来查看自上次提交以来发生的变化 - 在这种情况下,我们将添加hello.txt 的全部内容:

$ hg diff
diff -r 000000000000 hello.txt
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/hello.txt Sat Jul 23 01:38:44 2016 -0400
@@ -0,0 +1,1 @@
+Hello
 

一旦我们对他们满意并准备检查我们的更改,我们就可以运行commit

$ hg commit -m "Created a hello world file."
 

请注意,我们在-m 包含了提交消息 - 如果未指定-m Mercurial将启动文本编辑器,您可以输入提交消息。如果您想提供更长的多行消息,这将非常有用。

一旦您提交了更改,如果您运行hg stat 它们将不再显示,因为存储库现在与工作目录的内容同步。您可以运行log 以查看提交列表, -v 包含其他详细信息,例如每个提交触及的文件:

$ hg log -v
changeset:   0:b4c06cc77a42
tag:         tip
user:        Michael Diamond@Aodh <dimo414@gmail.com>
date:        Sat Jul 23 01:44:23 2016 -0400
files:       hello.txt
description:
Created a hello world file.
 

安装和设置

您可以从项目的网站下载Mercurial ,如果您更喜欢使用命令行界面,还可以使用Windows,Linux和OSX的图形工具 。大多数Unix包管理器包括Mercurial,例如在Debian / Ubuntu上:

$ apt-get install mercurial
 

您可以通过运行以下命令来验证Mercurial的安装:

$ hg --version
 

建立

Mercurial开箱即用,但您可能希望在进一步开发之前配置Mercurial以了解您的身份。要将用户名与您的提交相关联,请编辑~/.hgrc (或Windows上的主目录中的mercurial.ini )并添加以下行:

[ui]
username = Your Name <your@email.address>
 

如果您不想这样做,您可以在提交-u 标志时始终指定用户名,例如:

$ hg commit -u "Your Name <your@email.address>"
 

推拉

Mercurial可以轻松分享您的工作,并从其他开发人员那里获取捐款。这涉及三个关键步骤; 克隆拉动推动

克隆

要将远程存储库复制到本地磁盘,请“克隆”它。为此,只需传递您要克隆的远程URL即可。要克隆Mercurial源代码,只需运行:

$ hg clone https://selenic.com/hg
 

这将创建一个本地hg 目录,其中包含您可以构建,编辑和提交的Mercurial存储库的副本(尽管您无法将提交发布回父存储库)。

一旦您检出了存储库,您就会希望在其他人发布更改时保持同步。您只需运行以下命令即可下拉新的更改:

$ hg pull
 

这会引入新的提交,但不会更新您的工作目录,因此您不会立即看到任何更改。要更新工作目录的内容,请运行:

$ hg up
 

这会将您的工作目录更新为存储库中的tip(最新)版本。

你也可以运行:

$ hg pull -u
 

引入新更改并一步更新工作目录。

假设您具有对远程存储库的写访问权限,您可以使用以下方法将您在本地进行的任何提交发布到远程存储库:

$ hg push
 

只要自上次提取以来没有任何其他提交,就会上传您的更改。如果您的push 被拒绝,因为它会“创建额外的头”,这意味着您需要引入这些新更改并将它们与您自己的更改合并。

$ hg pull
$ hg merge  # this creates a new changeset merging your changes with the remote changes
$ hg commit -m "Merged in remote changes"
$ hg push
 

大多数情况下,这是您需要做的所有事情,因为Mercurial会自动处理合并您的更改,但有时您需要手动解决合并冲突(请参阅合并主题)。如果需要,您可以随时取消合并并返回到干净的工作目录:

$ hg up -c
 

但请记住,这是一种破坏性的操作;工作目录中的任何更改都将被删除。