我可以禁用没有参数的默认行为`hg add`吗?

时间:2014-08-02 02:50:43

标签: mercurial

当我在没有参数的情况下运行hg add时,错误地总是,并且递归地添加所有文件和目录的结果非常烦人且难以撤消,尤其是自上次提交以来(正确)添加其他文件的时间。有没有办法让普通hg add只打印错误信息?

4 个答案:

答案 0 :(得分:3)

尝试将其放入~/.hgrc

[defaults]
add = -X .

告诉hg add除非特别命名,否则应忽略所有文件(全部匹配)。这是一个例子:

(df)Ry4ans-MacBook-Air:~ ry4an$ hg init test
(df)Ry4ans-MacBook-Air:~ ry4an$ cd test/
(df)Ry4ans-MacBook-Air:test ry4an$ vi ~/.hgrc # added the section above
(df)Ry4ans-MacBook-Air:test ry4an$ hg status
(df)Ry4ans-MacBook-Air:test ry4an$ echo this > that
(df)Ry4ans-MacBook-Air:test ry4an$ hg add  # nothing added
(df)Ry4ans-MacBook-Air:test ry4an$ hg status
? that
(df)Ry4ans-MacBook-Air:test ry4an$ hg add that
(df)Ry4ans-MacBook-Air:test ry4an$ hg status
A that

一般情况下,您应该让.hgignore足够强大,以便忽略您不想添加的所有文件

答案 1 :(得分:2)

在您的用户配置文件(~/.hgrc)中,将以下内容添加到[alias]部分:

[alias]
realadd = add
add = add --dry-run

现在,只有hg add总是干涸。要实际添加,您必须使用hg realadd。请注意,您可以重新定义add别名以执行任何操作,但不一定是add --dry-run

答案 2 :(得分:2)

我不知道纯粹使用Mercurial配置执行此操作的方法,但如果您愿意调整bash配置文件,则可以将hg命令重新定义为函数。该函数将检测hg add并失败或以其他方式对真实hg命令进行直通。

function hg() {
    if [ "$#" -eq 1 ] && [ "$1" = "add" ]; then
        echo "hg add with no arguments denied" 1>&2
        false # sets exit code to 1, but doesn't close process like exit would
    else
        command hg $@
    fi
}

以下是我从个人资料中获取新功能后的行动:

hg > /dev/null; echo $?
0

hg add > /dev/null; echo $?
hg add with no arguments denied
1

hg add . > /dev/null; echo $?
0

hg status

touch afile

hg add afile

hg status
A afile

答案 3 :(得分:1)

您可以使用以下命令撤消全局添加:

hg forget $(hg status -an)

此处,hg status -an将列出所有添加的文件。然后,hg forget将从添加的文件列表中删除这些文件。

您还可以在.hgrc中为此创建别名,例如:

[alias]
unadd = !$HG forget $($HG status -an)

请注意,这也会删除您之前添加的所有文件,因此您可能需要重做。

此外,操作系统和shell对可以向命令传递的参数数量有限制。如果您因为意外添加了超过几千个文件而遇到此限制,则可以改为使用xargs

hg status -an | xargs hg forget

或者,作为别名:

[alias]
unadd = !$HG status -an | xargs $HG forget