Hg 只提交某些文件

我试图只提交 Mercurial 的某些文件。 因为 hg 在我尝试提交更改时会自动添加,所以它想提交所有文件。但我不希望这样,因为某些文件还没有“准备好”。

有的

hg commit -I thefile.foo

但这只是一个文件。对我来说,更好的方法是关闭 Git 中的自动添加。这可能吗?

70509 次浏览

您可以在命令行上指定文件,如 tonfa 所写:

$ hg commit foo.c foo.h dir/

这很管用,我一直都是这么做的。您也可以使用您找到的 --include标志,并且您可以像下面这样多次使用它:

$ hg commit -I foo.c -I "**/*.h"

你甚至可以使用 文件集来选择你想要提交的文件:

$ hg commit "set:size(1k - 1MB) and not binary()"

没有任何设置可以关闭自动添加行为并使 Mercurial 像 Git 那样工作。然而,Mq 扩展可能会引起人们的兴趣。这是一个高级的扩展,但它允许你这样做

$ hg qnew feature-x     # create new patch
$ hg qrefresh -s foo.c  # add a file to the current patch
$ hg qrefresh -s bar.c  # add another file to the patch
$ hg qfinish -a         # convert applied patches to normal changesets

不过,我自己并没有为此目的使用 MQ,因为我认为仅仅在命令行上指定文件名就足够了。

如果要提交少数文件,并排除其他许多文件,请显式列出要提交的文件。只有在希望使用模式而不是文件时才需要 -I

如果要提交多个文件,并且只排除少数文件,则使用 -X更方便。

例如,给定一个包含“ file _ 1”、“ file _ 2”和“ file _ 3”的存储库,以下内容是等价的,但后者更容易/更快地输入:

hg commit file_1 file_2
hg commit -X file_3

在3.8版本中,您还可以使用 hg commit --interactive来选择文件(在3.8版本之前,您可以使用 心电图扩展记录来实现类似的功能)。--interactive(或者仅仅是 -i)标志将导致 hg 提示您输入要包含在提交中的文件。作为额外的奖励,您甚至可以在文件中包含/排除块。

下面是一个接口的示例。注意,这是一个老的屏幕截图(实际上是 crecord 的) ,所以界面略有改变(但基本上是一样的)。 crecord screenshot

注意,要获得这个接口,需要启用 curses 接口。你可以在单次运行时使用 hg commit --config ui.interface=curses --interactive,或者通常在你的 .hgrc中添加以下内容:

[ui]
interface = curses