繁体   English   中英

Mercurial(hg)仅提交某些文件

[英]Mercurial (hg) commit only certain files

我正在尝试只使用Mercurial提交某些文件。 由于每当我尝试提交更改时hg都会自动添加,因此它想要提交所有文件。 但我不希望这样,因为某些文件还没有“准备好”。

hg commit -I thefile.foo

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

您可以在命令行上指定文件,如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之前,您可以使用crecord扩展来实现类似的功能)。 --interactive (或只是-i )标志将导致hg提示您输入要包含在提交中的文件。 作为额外的奖励,您甚至可以在文件中包含/排除块。

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

请注意,要获得该接口,您需要启用curses接口。 您可以使用hg commit --config ui.interface=curses --interactive进行单次运行,或者通常将以下内容添加到.hgrc

[ui]
interface = curses

正如Stack Overflow问题所示 ,最简单的方法是使用hg shelve

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM