2012-02-28 13 views
8

Cuando intento crear un aliasAñadir un alias de Git que contiene un punto y coma

[alias] 
    my-alias = submodule foreach 'git foo ; git bar' 

Git (versión 1.7.1) arroja el error

[email protected]:/path/repo.git$ git my-alias 
error: unclosed quote 
fatal: Bad alias.my-alias string 

Parece que .gitconfig utiliza reglas de análisis extraños, de modo que ; se considera comenzando un comentario de línea, incluso dentro de una cita.

¿Cómo especifico este alias?

Respuesta

8

Wrap todo el alias de comando entre comillas dobles:

my-alias = "submodule foreach 'git foo ; git bar'" 

Las comillas dobles hacen que el .gitconfig analizador de pasar el punto y coma. Las comillas simples aún son necesarias para delimitar el argumento a submodule foreach; sin ellos, se analiza como

submodule foreach 'git foo' 
git bar 

modo que git bar solamente es ejecutado una vez, al final.

2

Necesita usar comillas dobles (") en lugar de comillas simples (').

[alias] 
    foo = "submodule foreach 'echo foo; echo bar'" 
    bar = submodule foreach 'echo foo; echo bar' 

$ git foo 
foo 
bar 
$ git bar 
fatal: Bad alias.bar string: unclosed quote 
+0

Eso no funciona; 'barra de eco' solo se ejecuta una vez al final. –

+0

Intenta usar dobles comillas para envolver todo el valor de alias en su lugar. – Amber

0

tengo

[alias] 
    sm-clean-all = "submodule foreach --recursive 'git clean -fXd'" 
3

No estoy seguro si esto está relacionado con el punto y coma, pero aquí va - aquí es otra prueba para alias de git, utilizando bash:

[alias] 
     testbash = "!bash -c \"ix=1; echo a\\$ix\"" 

prueba:

$ git testbash 
a1 

Cualquier otra forma de escape me da ya sea simple "fatal: mala línea de archivo de configuración" o "Unterminate" d cadena entre comillas”o‘archivo inesperado’(véase también shell - Calling bash from sh (dash) with commands read from args, and "Unterminated quoted string"/"unexpected EOF" - Unix & Linux Stack Exchange)

También para multilínea:

[alias] 
    testbashm1 = "!bash -c \"ix=1; echo a\\$ix; \ 
echo b\\$ix \"" 
    testbashm2 = "!bash -c 'ix=1; echo a$ix; \ 
echo b$ix '" 

... y añadir \n\ hasta el final de la línea, si desea utilizar en línea bash comentarios (#):

[alias] 
    testbashm3 = "!bash -c 'ix=1; echo a$ix; \n\ 
    #echo b$ix ; \n\ 
    echo \"c$ix\" ; '" 
0

Simplemente envuelva el comando en comillas dobles, por ejemplo,:

foo  = !"echo foo; echo bar" 

Incluir punto y coma para find, doble escapar de ella, como:

pull-all = !"find . -name .git -type d -print -execdir git pull origin \\;" 

Lo mismo con el comando:

my-alias = "submodule foreach 'git foo; git bar'" 

Para solucionar problemas, el prefijo de su comando con GIT_TRACE=1 de depurar tu alias, por ejemplo

$ GIT_TRACE=1 git my-alias 
18:16:07.904421 git.c:282    trace: alias expansion: my-alias => 'submodule' 'foreach' 'git foo; git bar' 
18:16:07.904437 git.c:557    trace: exec: 'git-submodule' 'foreach' 'git foo; git bar' 
18:16:07.904443 run-command.c:347  trace: run_command: 'git-submodule' 'foreach' 'git foo; git bar' 
0

Para una flexibilidad completa, definir y llamar a una función:

[alias] 
    conf = ! "        \ 
     f() {        \ 
      git config \"[email protected]\" --get-regexp . \ 
      | sort;       \ 
     };         \ 
     f" 

Este alias puede ser llamado como git conf, o git conf --localgit conf --global, y se insertan las opciones adicionales en el lugar apropiado.

Cuestiones relacionadas