设置git别名,但是调用时出现“命令未找到”的错误。

3

我想在git中设置一个别名来计算代码库中的总行数,于是我进入了Git Bash并输入了以下命令:

git config --global alias.linecount 'ls-files -z | xargs -0 wc -l'

我输入了指令后,没有出现错误信息。然后我输入了

linecount

我遇到了这个错误信息:

sh: linecount: command not found

我应该以不同的方式设置别名吗?


2
你设置了一个 Git 别名,而不是 shell 别名。你需要使用 Git 来运行它。git linecount. - Etan Reisner
2个回答

6

你设置了一个git别名,而不是shell别名。

你需要使用git来运行它。

git linecount

如果您希望使用shell功能(例如管道),还需要使用shell-exec git别名。

git config --global alias.linecount '!git ls-files -z | xargs -0 wc -l'

输入该命令后,我收到了“未知开关'0'”的提示,并跳转到了“git ls-files”的帮助页面。 - sigil
啊,没错,你正在使用管道,这意味着你需要一个 shell-exec git 别名。 - Etan Reisner

5

你漏了一个感叹号 (!)。

参考:man git-config

如果别名展开以感叹号作为前缀,它将被视为一个 shell 命令。

你可以这样做:

git config alias.linecount 'ls-files -z'

这将是一个别名,指向git命令,但由于您使用了shell语法(比如管道),所有参数都会被git本身解释,因此在这种情况下,您需要明确说明这应该被视为一个shell命令。

以下是~/.gitconfig中的示例git别名:

[alias]
  linecount =       !git ls-files -z | xargs -0 wc -l

从命令行输入,正确的语法是:

git config alias.linecount '!git ls-files -z | xargs -0 wc -l'

注意:添加 --global 是可选的。

然后您通过以下方式调用它:

git linecount

设置了别名后,我使用 git linecount 命令运行它,但是出现了以下错误:ls-files -z | xargs -0 wc -l: ls-files: command not found - sigil
我可以轻松运行 git ls-files。但是当我像你发布的那样使用 git config 别名时,git linecount 就会出现错误。 - sigil
1
是的,就是这个问题——!ls-files作为shell命令运行了。谢谢! - sigil

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