Mercurial(hg)仅提交某些文件


119

我正在尝试仅使用Mercurial提交某些文件。由于hg在我每次尝试提交更改时都会自动添加,因此它想要提交所有文件。但我不希望这样,因为某些文件尚未“就绪”。

hg commit -I thefile.foo

但这仅适用于一个文件。对我来说,更好的方法是像Git中那样关闭自动添加功能。这可能吗?


5
使用记录扩展名?或者您可以在命令行上指定文件hg ci foo bar baz
tonfa 2010年

4
@tonfa,请将您的评论作为答案重新发布
Andrei Dziahel 2010年

请不要破坏您的帖子。
Glorfindel

你为什么要破坏这样一个很好的问题伙计?
Praveen Kumar Purushothaman

Answers:


155

您可以在命令行上指定文件,如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,因为我认为仅在命令行上指定文件名就足够了。


什么是“自动添加行为”行为?hg曾经用来自动添加文件吗?因为现在您必须明确地这样做,否则它们将无法跟踪。
mpen

1
@mpen我认为他的意思是gh如何自动将每个修改的文件添加到提交中,与git不同,在git中,您必须手动将修改的文件添加到下一个提交中,并且可以保留一些未提交的修改文件
simpleuser

24

如果要提交一些文件,而排除许多其他文件,请显式列出要提交的文件。 -I仅在要使用模式而不是文件时才需要。

如果要提交多个文件,而只排除几个文件,请使用 -X更方便。

例如,给定一个包含“ file_1”,“ file_2”和“ file_3”的存储库,以下内容是等效的,但是键入起来更容易/更快:

hg commit file_1 file_2
hg commit -X file_3

8

从3.8开始,您还hg commit --interactive可以选择文件(在3.8之前,可以使用crecord扩展名来实现类似功能)。该--interactive(或只是-i)标志将导致汞提示您输入您要包括在提交的文件。作为额外的好处,您甚至可以在文件中包括/排除块。

这是界面外观的示例。请注意,这是旧的屏幕截图(实际上是crecord的),因此界面略有变化(但基本原理相同)。 crecord屏幕截图

请注意,要获取该界面,您需要启用curses界面。您可以单次运行,也可以hg commit --config ui.interface=curses --interactive将以下内容添加到自己的计算机中.hgrc

[ui]
interface = curses
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.