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
并失败,要么传递到realhg
命令
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
并失败,要么传递到realhg
命令
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