Como posso criar um alias para um comando git [action] (que inclui espaços)?

25

A maioria dos meus aliases tem esse formato: alias p='pwd'

Eu quero alias git commit para que ele git commit -v

Mas tentar criar um alias com um espaço gera um erro:

$ alias 'git commit'='git commit -v'
-bash: alias: 'git commit': invalid alias name
    
por Michael Durrant 22.09.2012 / 17:13

6 respostas

29

Não é uma resposta direta à sua pergunta (já que os aliases só podem ser uma palavra), mas você deve usar git-config :

git config --global alias.civ commit -v

Isso cria um alias git para que git civ seja executado em git commit -v . Infelizmente, o AFAIK não é possível substituir os existentes Comandos git com aliases . No entanto, você sempre pode escolher um nome de alias adequado para viver como alternativa.

    
por 22.09.2012 / 17:30
17

Você está falando de um comando que inclui um espaço, mas aqui o comando é git e não há espaço lá.

Para chamar um comando git commit , você precisa escrevê-lo

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

Geralmente, os comandos não têm espaço em seus nomes, por isso é complicado chamá-los em um shell, então não acho que você encontrará um comando desse tipo em seu sistema.

csh, tcsh ou zsh permitirá que você aliasse qualquer um dos acima, mas não bash ou ksh (embora o pdksh permita, mas você não permitirá que você os use). Em zsh:

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

Tornará o comando git command (quando chamado apenas como 'git command' (com aspas simples)) um alias para o comando git com os argumentos commit e -v . Não é o que você estava procurando, eu acho.

Como alias só pode usar alias comandos , tudo que você pode alias aqui é o comando git , e você precisa aliasá-lo a algo que insira um "-v" depois de " commit "na sua lista de argumentos. Melhor seria usar a solução @ jw013, mas se por algum motivo você não puder ou não quiser, em vez de usar um alias, você pode usar uma função para fazer o trabalho:

git() {
  if [ "$1" = commit ]; then
    shift
    set -- commit -v "$@"
  fi
  command git "$@"
}
    
por 22.09.2012 / 18:39
9

No Bash, você não pode criar um alias para um comando com qualquer espaço em branco.
No entanto, eu uso a seguinte função no meu .bashrc como uma solução alternativa.

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

Como isso funciona é: Você começa com o comando que você deseja chamar. No meu caso, é sudo .
Então, você menciona quais parâmetros seriam necessários. Nesse caso, pacman -Syu .
Se, disparado, qual comando deve executar? Na declaração acima, é pacup.sh .
Senão, qual comando deve ser executado, sudo $@ . $@ é, como você deve ter adivinhado, a lista de parâmetros que o comando assume.

Então, fazendo o comando para o seu caso em particular, seria:

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

No entanto, essa solução é para o caso mais geral de quando você deseja alias de comandos com espaços em branco neles. No seu caso específico, eu recomendo que você vá com a solução do jw013 para alias seus comandos do git usando git-config

    
por 23.09.2012 / 06:12
4

Na página de manual do bash alias

The first word of each simple command, if unquoted, is checked to see if it has an alias. If so, that word is replaced by the text of the alias. The alias name and the replacement text may contain any valid shell input, including shell metacharacters, with the exception that the alias name may not contain '='.

The first word of the replacement text is tested for aliases, but a word that is identical to an alias being expanded is not expanded a second time. This means that one may alias ls to "ls -F", for instance, and Bash does not try to recursively expand the replacement text.

Então, porque somente a primeira palavra está marcada, você não pode ter um apelido com várias palavras. Em esta pergunta sobre superusuário , é fornecida uma solução alternativa usando uma função:

ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }

Pode ser adaptado para git .

    
por 22.09.2012 / 17:25
0

Embora a solução correta seja usar aliases como o jw013 sugerido, para fazer alias com espaços que você pode aliases NEST.

Por exemplo, eu tenho um alias para excluir a ramificação tanto local quanto remotamente, mas gostaria que o usuário especificasse a ramificação sempre:

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!'" 
    
por 10.04.2018 / 11:25
-1

De este exemplo, isso deve funcionar:

So, if you still want to use sudo with other commands but not with shutdown and if you can afford to alias shutdown to something else, you can have:

alias sudo='sudo '
alias shutdown="echo nope"

Mas com seus comandos:

alias git='git '
alias commit="commit -v"
    
por 19.03.2015 / 12:07