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

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

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

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

但是尝试创建带有空格的别名会出现错误:

$ alias 'git commit'='git commit -v'
-bash: alias: `git commit': invalid alias name

答案1

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

git config --global alias.civ commit -v

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

答案2

您正在谈论一个包含空格的命令,但这里的命令是git并且其中没有空格。

拨打电话git 提交命令,你需要写它

git\ commit ...
'git commit' ...
"git commit" ...

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

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

alias "'git commit'=git commit -v"
'git commit' ...

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

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

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

答案3

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

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

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

因此,根据您的具体情况制定命令,它将是:

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

但是,此解决方案适用于更一般的情况,即当您想要为命令添加别名时,其中包含空格。
在您的具体情况下,我建议您使用 jw013 的解决方案来使用 git 命令别名git-config

答案4

尽管正确的解决方案是使用 jw013 建议的别名,但要使用空格创建别名,您可以嵌套别名。

例如,我有一个别名可以在本地和远程删除分支,但我希望用户始终指定分支:

remrem = "!sh -c 'if [ $# -ne 1 ]; then git specBranch; else git push origin :$1 && git branch -d $1; fi' -"

#echoing aliases
specBranch = "!sh -c 'echo Specify branch please!'" 

相关内容