【问题标题】:Mercurial (hg) commit only certain filesMercurial (hg) 仅提交某些文件
【发布时间】:2012-01-01 13:58:13
【问题描述】:

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

hg commit -I thefile.foo

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

【问题讨论】:

  • 使用记录扩展?或者你可以在命令行指定文件hg ci foo bar baz
  • @tonfa,转发您的评论作为答案
  • 请不要破坏您的帖子。
  • 你为什么要破坏这么好的问题?

标签: version-control mercurial commit


【解决方案1】:

你可以在命令行上指定文件,就像 tonfa 写的那样:

$ hg commit foo.c foo.h dir/

这很有效,这就是我一直在做的事情。你也可以使用你找到的--include标志,你可以像这样多次使用它:

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

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

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

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

$ 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 我认为他的意思是 gh 如何自动将每个修改后的文件添加到提交中,这与 git 不同,在 git 中您必须手动将修改后的文件添加到下一次提交中,并且可以保留一些修改后的文件未提交跨度>
【解决方案2】:

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

如果你想提交很多文件,只排除少数文件,使用-X更方便。

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

hg commit file_1 file_2
hg commit -X file_3

【讨论】:

    【解决方案3】:

    从 3.8 开始,您还可以使用 hg commit --interactive 来选择文件(在 3.8 之前,您可以使用 crecord extension 来获得类似的功能)。 --interactive(或只是-i)标志将导致 hg 提示您输入要包含在提交中的文件。作为额外的奖励,您甚至可以在文件中包含/排除块。

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

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

    [ui]
    interface = curses
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      • 2019-01-06
      相关资源
      最近更新 更多