Git别名returns使用管道命令时出错

Git alias returns an error when using pipe command

我正在使用 git-ftp 并尝试执行 awk 以仅包含第一行:

git ftp show | awk 'NR<7'

它在终端中完美运行。但是作为别名 returns 执行它会出错。

这是我的 git 配置文件的样子:

[alias]
sh = ftp show | awk 'NR<7'

如果我 运行 git sh 它 returns: fatal: Unrecognized option: awk

我也尝试过只使用 show,但它也 returns 一个错误:

[alias]
sh = show | awk 'NR<7'

致命:不明确的参数“|”:未知修订版或不在工作树中的路径。

能否以某种方式格式化此命令以使其作为 git 别名使用?

首先要注意的是 git 别名仅在带有感叹号(感叹号)前缀的情况下与 shell 命令一起使用。 我没有使用 git-ftp 所以我无法测试你的精确命令,但我使用了 git remote show origin 因为它在我的一个回购协议中非常冗长。 我发现以下 git 别名工作正常:sh = "!git remote show origin | awk 'NR<7'" 因此,我希望这个 git 别名能成为您的解决方案:

sh = "!git ftp show | awk 'NR<7'"

请注意,某些 bang/pipe/quote 组合可以用作 git 别名,而其他组合可能会失败,可能与 "fatal bad config line" 一样。 大多数情况下,真正的问题是如何使用引号。技巧可以是仅更改您的特定 git 别名 shell 命令行以消除或更改引号用法。 例如,我有一个 git 别名的要求,我通过将 sed 命令更改为 tr 来解决引用问题。然后我不得不使用以下命令双重转义反斜杠:...| tr \\n.

对于这个特定问题,虽然我认为 git-alias 的引号没有问题,但更安全的引号解决方案是:

sh = ! git ftp show | head -6

虽然大多数读者可能已经知道 shell 的要求,但他们可能没有意识到引用是一个更困难的问题。 虽然不完全正确,但我发现这篇文章对想法很有用:https://www.atlassian.com/blog/git/advanced-git-aliases