ver usuario servidor ramas presentación permisos para las configurar configuracion comando git alias

usuario - permisos en git



¿Es posible anular el comando git por git alias? (4)

Como ya se mencionó, no es posible usar un alias git para anular un comando git. Sin embargo, es posible anular un comando git usando un alias de shell. Para cualquier shell POSIXy (es decir, no MS cmd ), escriba un script ejecutable simple que realice el comportamiento modificado deseado y establezca un alias de shell. En mi .bashrc (Linux) y .bash_profile (Mac) tengo

export PATH="~/bin:$PATH" ... alias git=''my-git''

En mi carpeta ~/bin tengo un script ejecutable de Perl llamado my-git que comprueba si el primer argumento (es decir, el comando git) es clone . Se ve esencialmente así:

#!/usr/bin/env perl use strict; use warnings; my $path_to_git = ''/usr/local/bin/git''; exit(system($path_to_git, @ARGV)) if @ARGV < 2 or $ARGV[0] ne ''clone''; # Override git-clone here...

El mío es un poco más configurable, pero entiendes la idea.

mi ~ / .gitconfig es:

[alias] commit = "!sh commit.sh"

Sin embargo, cuando escribo git commit , el script no se llama.

¿Es posible, o tengo que usar otro nombre de alias?


Opté por resolver esto con una función bash. Si llamo a git clone , redirigiré la llamada a git cl , que es mi alias con algunos switches agregados.

function git { if [[ "$1" == "clone" && "$@" != *"--help"* ]]; then shift 1 command git cl "$@" else command git "$@" fi }

Editar: actualicé el código con el command como sugirió Aron.


No es posible

Esto es de mi clon de git.git:

static int run_argv(int *argcp, const char ***argv) { int done_alias = 0; while (1) { /* See if it''s an internal command */ handle_internal_command(*argcp, *argv); /* .. then try the external ones */ execv_dashed_external(*argv); /* It could be an alias -- this works around the insanity * of overriding "git log" with "git show" by having * alias.log = show */ if (done_alias || !handle_alias(argcp, argv)) break; done_alias = 1; } return done_alias; }

Entonces no es posible. ( handle_internal_command llama a exit si encuentra el comando).

Puede corregir esto en sus fuentes cambiando el orden de las líneas y haciendo que handle_alias llame a exit si encuentra el alias.


No solo no es posible, sino también WONTFIX en 2009 http://git.661346.n2.nabble.com/allowing-aliases-to-override-builtins-to-support-default-options-td2438491.html

Hamano responde :

Actualmente, git no permite que los alias anulen los builtins. Entiendo el razonamiento detrás de esto, pero me pregunto si es demasiado conservador.

No lo es.

La mayoría de las shells soportan comandos superiores con alias, y no estoy seguro de por qué git necesita ser más conservador que el shell.

Debido a que los shells cónicos no expanden los alias cuando se usan en un script, y brindan una forma práctica de vencer el alias incluso desde la línea de comando.

$ alias ls=''ls -aF'' $ echo ls >script $ chmod +x script

y compara:

$ ./script $ ls $ /bin/ls