Erros com o comando shell alias git

4

Estou usando o bash versão 4.1.2 (1) -release (x86_64-redhat-linux-gnu) no cygwin com o git 1.7.1. Eu queria fazer um alias para um comando que precisava usar o argumento de entrada duas vezes. Seguindo estas instruções , escrevi

[alias]
branch-excise = !sh -c 'git branch -D $1; git push origin --delete $1' --

e eu recebo este erro:

$> git branch-excise my-branch
sh: -c: line 0: unexpected EOF while looking for matching '''
sh: -c: line 1: syntax error: unexpected end of file

Eu tentei os dois - e -- no final, mas recebo os mesmos erros. Como posso consertar isso?

    
por user394 29.10.2015 / 14:59

1 resposta

7

man git-config diz:

The syntax is fairly flexible and permissive; whitespaces are mostly ignored. The # and ; characters begin comments to the end of line, blank lines are ignored.

Então:

branch-excise = !bash -c 'git branch -D $1; git push origin --delete $1'

é equivalente a:

#!/usr/bin/env bash

bash -c 'git branch -D $1

A execução do script acima é impressa:

/tmp/quote.sh: line 3: unexpected EOF while looking for matching '''
/tmp/quote.sh: line 4: syntax error: unexpected end of file

Uma solução é colocar um comando inteiro em " :

branch-excise = !"bash -c 'git branch -D $1; git push origin --delete $1'"

No entanto, ainda não funciona porque $1 está vazio:

$ git branch-excise master
fatal: branch name required
fatal: --delete doesn't make sense without any refs

Para que funcione, você precisa criar uma função fictícia em .gitconfig e chamá-la assim:

branch-excise = ! "ddd () { git branch -D $1; git push origin --delete $1; }; ddd"

Uso:

$ git branch-excise  master
error: Cannot delete the branch 'master' which you are currently on.
(...)
    
por 29.10.2015 / 15:17