Git无法识别本地配置文件中的别名

h5qlskok  于 2022-12-10  发布在  Git
关注(0)|答案(1)|浏览(171)
问题:

我在 ~/.gitconfig(git version 2.38.1.windows.1)中手动添加了一个简单的别名,它看起来像这样:

[alias]
    lg = !git log --oneline --graph -$1 #

我按如下方式使用它(期望得到与键入git log --one-line --graph -5等效的结果):

$ git lg 5

但它不工作,我不知道我错过了什么,因为这个相同的命令为我在其他计算机上工作,以下错误引发:

$ expansion of alias 'lg' failed; 'git' is not a git command
再次检查:

我的git bash中$HOME的值是/c/Users/myself(和预期的一样),因此,如果我执行命令git config --global -e,它会打开我用我的别名修改过的文件。同样,在执行命令git config --list --show-origin后,我也可以看到我的别名:

file:C:/Users/myself/.gitconfig  alias.lg=!git log --oneline --graph -$1
失败的尝试(来自其他答案):

我还尝试将别名添加为bash函数:

[alias]
    lg = "!f() { git log --oneline --graph -$1; }; f"

但是,如果我从配置文件中删除别名并尝试从控制台添加它,问题仍然存在:

$ git config alias.lg 'git log --oneline --graph -$1'

此外,删除!#等符号时也没有效果。
这可能是一个愚蠢的问题,但我不知道还能尝试什么,我有点困在这里...

ldxq2e6h

ldxq2e6h1#

别名只是替换令牌列表,没有字符串构造语言。当你需要它的时候,你可以使用shell的字符串构造。
你在这里并不需要它:

[alias]
        lg = log --graph --oneline

然后可以使用git lg -5(还可以添加其他参数),但是如果构建一个替代命令行而不是用令牌替换别名值得的话,那么可以定义一个shell函数来执行此工作,并使用别名参数执行该函数:

[alias]
        lg = "!f() { git log --graph --oneline -$1; }; f"

然后你就可以git lg 5了。
顺便说一句,这是我的首选日志别名frontender:

lgdo = "!f(){ git log --graph --decorate --oneline \"${@---all}\"; }; f"

相关问题