Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mercurial 我可以禁用没有参数的默认行为“hg add”吗?_Mercurial - Fatal编程技术网

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

Mercurial 我可以禁用没有参数的默认行为“hg add”吗?,mercurial,Mercurial,当我在没有参数的情况下运行hgadd时,总是会出错,并且递归添加所有文件和目录的结果非常烦人,很难撤消,尤其是在上次提交后(正确)添加了其他文件的情况下。是否有任何方法可以使普通的hg add只打印一条错误消息?在您的用户配置文件(~/.hgrc)中,将以下内容添加到您的[别名]部分: [alias] realadd = add add = add --dry-run 现在,只要hgadd就可以进行试运行。要实际添加,必须使用hg realadd。请注意,您可以重新定义add别名来执行任何操作

当我在没有参数的情况下运行
hgadd
时,总是会出错,并且递归添加所有文件和目录的结果非常烦人,很难撤消,尤其是在上次提交后(正确)添加了其他文件的情况下。是否有任何方法可以使普通的
hg add
只打印一条错误消息?

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

[alias]
realadd = add
add = add --dry-run
现在,只要
hgadd
就可以进行试运行。要实际添加,必须使用
hg realadd
。请注意,您可以重新定义
add
别名来执行任何操作,它不必是用户配置文件(
~/.hgrc
)中的
add--dry run

),将以下内容添加到
[别名]
部分:

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

现在,只要
hgadd
就可以进行试运行。要实际添加,必须使用
hg realadd
。请注意,您可以重新定义
add
别名来执行任何操作,它不必是
add--dry run

我不知道纯粹使用Mercurial配置来实现这一点的方法,但是如果您愿意调整bash配置文件,那么您可以将
hg
命令重新定义为函数。该函数要么检测
hg add
并失败,要么传递到real
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

我不知道纯粹使用Mercurial配置来实现这一点的方法,但是如果您愿意调整bash概要文件,那么您可以将
hg
命令重新定义为函数。该函数要么检测
hg add
并失败,要么传递到real
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

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

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

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

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

试着把这个放到你的
~/.hgrc

[defaults]
add = -X .
这告诉hgadd,除非特别命名,否则它应该忽略所有文件(get matches all)。下面是一个例子:

(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
足够健壮,可以忽略所有您不想添加的文件

尝试将其放入您的
~/.hgrc

[defaults]
add = -X .
这告诉hgadd,除非特别命名,否则它应该忽略所有文件(get matches all)。下面是一个例子:

(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
足够健壮,可以忽略所有你不想添加的文件

这很有趣,但是当我错误地键入
hg add
时,这是因为我想从vim键入,比如说
hg add%
,我不知怎么地错过了百分号,然后按enter键。因此,如果我这样做,我仍然会遇到同样的问题,我只需键入
hgrealadd
。如果这有意义的话?你不可能让电脑明白你在做你不想做的事情。如果您强制(如果可以的话)它需要一个参数,但您过早地按了enter键,该怎么办?在某种程度上,你必须承认,如果你犯了错误,计算机将无法理解。这有点有趣,但当我错误地键入
hg add
时,这是因为我想从vim键入,比如说
hg add%
,我不知怎的错过了百分号,然后按enter键。因此,如果我这样做,我仍然会遇到同样的问题,我只需键入
hgrealadd
。如果这有意义的话?你不可能让电脑明白你在做你不想做的事情。如果您强制(如果可以的话)它需要一个参数,但您过早地按了enter键,该怎么办?在某个时刻,你必须接受这样一个事实:如果你犯了错误,计算机将无法理解这一点。。“hg add with not arguments denied”(hg add with not arguments denied)可以工作,但如果我执行了
hg add afile
,则不会出现错误消息,但该文件并未实际添加。@Andrewmage,我不确定为什么这样做不起作用。我只是在我的环境中重新测试了一下,它成功了。我编辑了使用示例,以显示一个正在工作的hg add和一个hg状态,然后显示添加的文件。哦,实际上你是对的。只要再试一次就行了。不知道之前发生了什么只是试了一下。。“hg add with not arguments denied”(hg add with not arguments denied)可以工作,但如果我执行了
hg add afile
,则不会出现错误消息,但该文件并未实际添加。@Andrewmage,我不确定为什么这样做不起作用。我只是在我的环境中重新测试了一下,它成功了。我编辑了使用示例以显示一个工作的hg add和一个hg状态show