如何为 git [action] 命令(包括空格)创建别名?

Mic*_*ant 29 shell bash terminal git alias

我的大部分别名都是这种形式: alias p='pwd'

我想别名,git commit以便它git commit -v

但是尝试使用空格创建别名会出现错误:

$ alias 'git commit'='git commit -v'
-bash: alias: `git commit': invalid alias name
Run Code Online (Sandbox Code Playgroud)

jw0*_*013 32

不是您问题的直接答案(因为别名只能是一个词),但您应该使用git-config

git config --global alias.civ commit -v
Run Code Online (Sandbox Code Playgroud)

这将创建一个 git 别名,以便git civ运行git commit -v. 不幸的是,AFAIK无法使用 aliases 覆盖现有的 git 命令。但是,您始终可以选择一个合适的别名作为替代。


Sté*_*las 17

你说的是一个包含空格的命令,但这里是命令git,里面没有空格。

要调用git commit命令,您需要编写它

git\ commit ...
'git commit' ...
"git commit" ...
Run Code Online (Sandbox Code Playgroud)

通常命令的名称中没有空格,因为在 shell 中调用它们很麻烦,所以我认为您不会在系统上找到这样的命令。

csh、tcsh 或 zsh 将允许您对上述任何一个进行别名,但不能为 bash 或 ksh(虽然 pdksh 允许您但您不会让您使用它们)。在 zsh 中:

alias "'git commit'=git commit -v"
'git commit' ...
Run Code Online (Sandbox Code Playgroud)

将使git command命令(仅在作为'git command'(使用单引号)调用时)成为git带有commit-v参数的命令的别名。不过我猜不是你要找的东西。

因为aliascan only alias commands,所以您可以在此处别名是git命令,并且您需要将其别名为在其参数列表中的“commit”之后插入“-v”的内容。最好是使用@jw013 的解决方案,但如果由于某种原因你不能或不会,而不是使用别名,你可以使用一个函数来完成这项工作:

git() {
  if [ "$1" = commit ]; then
    shift
    set -- commit -v "$@"
  fi
  command git "$@"
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,允许带有空格或其他特殊字符的别名是 Bourne 风格的 shell(zsh 以一种奇怪的方式模拟)中不存在的 csh 功能。当以任何方式引用第一个单词时,Bourne 风格的 shell 会禁用别名扩展,请参阅 [Renan 的回答](http://unix.stackexchange.com/a/48864)。 (3认同)

dar*_*nir 9

在 Bash 中,您不能为包含任何空格的命令创建别名。
但是,我在 .bashrc 中使用以下函数作为解决方法。

sudo() { if [[ $@ == "pacman -Syu" ]]; then command pacup.sh; else command sudo "$@"; fi; }
Run Code Online (Sandbox Code Playgroud)

它的工作原理是:您从要调用的命令开始。就我而言,它是sudo.
然后,您提到需要哪些参数。在这种情况下,pacman -Syu
如果被触发,它应该执行什么命令?在上面的语句中是pacup.sh
否则,要执行什么命令,sudo $@. $@正如您已经猜到的,是命令采用的参数列表。

因此,为您的特定情况制作命令,它将是:

git() { if [[ $1 == "commit" ]]; then command git commit -v; else command git "$@"; fi; }
Run Code Online (Sandbox Code Playgroud)

但是,此解决方案适用于更一般的情况,即您希望使用空格对命令进行别名时。
在您的特定情况下,我建议您使用 jw013 的解决方案来为您的 git 命令使用别名git-config