Mercurial(hg)仅提交某些文件

117 version-control mercurial commit

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

hg commit -I thefile.foo
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ler 151

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

$ hg commit foo.c foo.h dir/
Run Code Online (Sandbox Code Playgroud)

这才有效,这就是我一直在做的事情.你也可以使用--include你找到的旗帜,你可以像这样使用它几次:

$ hg commit -I foo.c -I "**/*.h"
Run Code Online (Sandbox Code Playgroud)

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

$ hg commit "set:size(1k - 1MB) and not binary()"
Run Code Online (Sandbox Code Playgroud)

没有任何设置可以关闭自动添加行为并使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
Run Code Online (Sandbox Code Playgroud)

我自己并没有真正使用MQ,因为我认为仅仅在命令行上指定文件名就足够了.

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

Rob*_*b W 22

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

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

例如,如果存储库包含"file_1","file_2"和"file_3",则以下内容是等效的,但后者更容易/更快地输入:

hg commit file_1 file_2
hg commit -X file_3
Run Code Online (Sandbox Code Playgroud)


stu*_*eek 7

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

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

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

[ui]
interface = curses
Run Code Online (Sandbox Code Playgroud)