Mercurial:如何在命令行中输入多行提交信息?

59

我怎样能在Mercurial命令行中指定多行提交信息?

hg commit -m "* add foo\n* fix bar"

不起作用。日志显示:

changeset:   13:f2c6526e5911
tag:         tip
date:        Fri Jan 23 23:22:36 2009 +0100
files:       foobar.cpp
description:
    * add foo\n*fix bar

我猜这个问题必须通过命令行本身来解决。如果你的命令行可以提供一种方式将多行文本作为单个参数传递(可能是通过在行末添加''),那么HG就不会有问题了... - Hosam Aly
是的,我想你是对的。然而,这是我个人唯一经常使用它的用例,这就是为什么我没有将其作为bash问题提出的原因。 - Martin
7个回答

84

如何在命令行中使用Mercurial提交多行信息?

按回车键即可。

$ hg commit -m "Did some work
> Now I'm done"

其中一个问题是只有第一行在hg日志中显示:

$ hg log
changeset:   0:d2dc019450a2
tag:         tip
user:        Aaron Maenpaa <zacherates@gmail.com>
date:        Sat Jan 24 07:46:23 2009 -0500
summary:     Did some work

...但如果您启动“hg view”,则可以看到整个消息。

编辑后添加:

...但是使用“hg -v log”可以显示整个消息:

$ hg -v log
changeset:   0:d2dc019450a2
tag:         tip
user:        Aaron Maenpaa <zacherates@gmail.com>
date:        Sat Jan 24 07:46:23 2009 -0500
files:       work
description:
Did some work
Now I'm done

5
“Enter”行为取决于类UNIX shell。在Windows CMD中是否有相应的方法? - Hosam Aly
@Hosam 除了安装Cygwin(或Mingwin)并使用Bash,我想不到其他的东西。 - Aaron Maenpaa
3
谢谢!对我来说,hg help log没有v标志。完整摘要正是我所需要的 :) - Justin
FYI:即使所有*NIX shell都不起作用。我最喜欢的“tcsh”会显示“Unmatched '.” 当我需要上述解决方案中描述的行为时,我暂时切换到bash。 - JS.
@Justin:完整的帮助,包括全局选项,都隐藏在 hg -v help log 后面。 - Robert Siemer
显示剩余2条评论

17

Windows cmd 中,使用此命令进行多行提交。

hg commit -l con
这使您可以直接从命令行输入多行提交消息。 若要结束消息,请按Enter,然后单独一行按Ctrl+ZEnter为什么?-l选项指定从文件读取提交消息,con指定该文件实际上是控制台。

1
仍在查找文档中如何为“hg tag”命令执行此操作的方法,因为“-l”是“--local”,而不是“--logfile”(就像hg commit一样)。 - zanlok

9

如果您是交互式地进行操作(而不是从脚本中),只需执行hg commit,不需要-m标志。我不确定在Linux或Mac上的行为如何,但在Windows上,它会弹出带有文件的记事本,您可以填写并保存多行消息。


有没有一种方法可以在按下一个键时保存并关闭记事本?这就是这种方法令我感到恼怒的地方。 - Doug McClean
2
我认为有一种方法(通过一个 .ini 文件)可以告诉 Mercurial 调用其他应用程序而不是记事本,然后你只需要找到你喜欢的编辑器。 - Jason S
1
它使用在hgrc中指定的编辑器。在Windows上,默认情况下,如果没有指定,则为记事本。 - Clayton Hughes
@DougMcClean 我只需要按 Alt, F, S, Alt, F, X 这六个键。虽然按键次数有点多,但是因为有规律,所以可以很快地完成。(请注意,我不是指 Alt+F, S, Alt+F, X,那样似乎更难打。) - Dave Cousineau

5
我知道,对于Linux用户已经有了解决方案,但是我需要另一种Windows命令行的解决方案,所以我一直在寻找它...
而我找到了一个: https://www.mercurial-scm.org/pipermail/mercurial/2011-November/040855.html
hg commit -l filename.txt

我希望这对某些人有所帮助,:)
[编辑] oO-它已经被添加到帮助文档中了

-l --logfile FILE 从文件中读取提交消息


2

这里有另一种更接近你最初尝试的方法:

hg commit -m "$(echo -e 'foo\nbar')"

2
在bash中(自2.0版本起):
hg commit -m $'foo\nbar'

(即在单引号前加上美元符号,以使其解析字符串中的转义序列(如\n) — 请注意,它不能用于双引号。)


1

针对带有PowerShell的Windows操作系统:

 hg commit --message "foo`nbar"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接