灵感来自Git初学者:权威的实用指南。

这是一个关于初学者实际使用Mercurial的信息汇编。

初学者——一个接触过源代码控制却没有很好地理解它的程序员。

实用——涵盖大多数用户经常遇到的情况——创建存储库、分支、合并、从远程存储库拉/推到远程存储库等等。

注: 解释如何完成某件事,而不是解释某件事是怎样的 实现的。 回答一个问题。 回答清楚,尽可能简洁。 上编辑/扩展现有答案,而不是创建新答案 同样的话题。 请为想了解更多的人提供Mercurial wiki或HG Book的链接。

问题:

安装/设置

如何安装Mercurial? 如何设置Mercurial? 如何创建一个新的项目/存储库? 如何将其配置为忽略文件?

使用代码

How do you get the latest code? How do you check out code? How do you commit changes? How do you see what's uncommitted, or the status of your current codebase? How do you remove files from the repository? How do you destroy unwanted commits? How do you compare two revisions of a file, or your current file and a previous revision? How do you see the history of revisions to a file or repository? How do you handle binary files (visio docs, for instance, or compiler environments)? How do you merge files changed at the "same time"? How do you revert a Changeset? How do you go back to a previous version of the code? How do you extract a patch from a specific changeset? How do you record that you renamed or deleted a file without using the Mercurial command?

标记、分支、发布、基线

你如何“标记”、“标记”或“发布”一组特定文件的特定修订,以便以后总是可以提取它? 你如何进行特定的“释放”? 你如何分支? 如何合并分支? 如何将一个分支的部分合并到另一个分支中?

其他

好的GUI/IDE插件Mercurial?优点/缺点? 还有其他初学者应该知道的常见任务吗? 如何与Subversion交互?

其他Mercurial参考资料

Mercurial:权威指南 Mercurial维基 满足Mercurial |偷窥码屏幕播放 掌握Mercurial | TekPub屏幕播放 Hg初始化-接地水银教程


当前回答

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

在。hg/hgrc中启用“移植”扩展名

[extensions]
transplant=

加载目标分支,然后移植目标修订版本。 例如:樱桃挑选修订版81从分支'foo'到当前分支

$ hg transplant -b foo 81

其他回答

如何将其配置为忽略文件?

Ignore是在存储库根目录中一个名为.hgignore的普通文本文件中配置的。添加它就像一个普通的文件:

hg add .hgignore

有两种语法选项可用于文件匹配,glob和regexp。Glob是类unix的文件名扩展,regexp是正则表达式。通过在一行上单独添加syntax: glob或syntax: regexp来激活每一个。接下来的所有行都将使用该语法,直到下一个语法标记。您可以有任意多的语法标记。默认语法是regexp,因此如果只使用regexp,则不需要任何语法标记。

您可以使用#添加注释

例子:

# python temporary files
syntax: glob
*.pyc

#editor autosaves
*~

# temporary data
syntax: regexp
temp

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

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

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

$ hg status

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

M - Modified. The file has been changed and the changes have not been committed. A - Added. The file was not tracked before, but if you commit Mercurial will begin tracking it. R - Removed. The file was tracked before, but if you commit Mercurial will cease tracking it in this and future commits. ? - Unknown. The file is not currently tracked by Mercurial. Committing will have no effect on it unless you use hg add to add it. ! - Missing. The file was tracked but Mercurial cannot find it in the working copy.

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

$ hg diff

如何提交更改?

$ hg commit -m "Commit message"

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

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

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

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

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

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

$ hg diff {file.code}

上面的命令将显示不同的“文件”的当前版本。代码”和最新的修订(最新提交的)。

:D

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

从存储库中删除一个文件,并在下次提交时删除它:

$ hg remove {file(s)}

从存储库中删除文件,但不删除该文件

$ hg remove -Af {file(s)}

或从Mercurial 1.3

$ hg forget {file(s)}