usuario - permisos en git
Cómo incrustar el script bash directamente dentro de un alias git (5)
¿Puedo insertar el siguiente código de shell bash:
for name in $(git diff --name-only $1); do git difftool $1 $name & done
directamente en la creación de un git alias:
git config --global alias.diffall ***my-bash-code-here***
Esto me lleva desde mi pregunta / respuesta anterior en SO, donde puse el código en un archivo .sh y luego alias al archivo:
git config --global alias.diffall ''!sh diffall.sh''
Pero en la búsqueda interminable de simplicidad, debe haber una manera de omitir el archivo e insertar el código directamente en el alias. No puedo entender el formato ...
(De la documentación de ProGit: http://progit.org/book/ch7-3.html )
¿Has intentado agregar un script en .git / hooks?
Por ejemplo, si crea un script .git / hooks / post-checkout:
#!/bin/bash
echo "This is run after a ''git checkout''"
y luego ejecuta el comando:
$ git checkout master
Switched to branch ''master''
This is run after a ''git checkout''
Agregar estas 2 líneas a su archivo .git / config debería hacer el truco.
[alias]
diffall = ''!for name in $(git diff --name-only $1); do git difftool $1 $name & done''
Editar: presumiblemente, la versión de git-config también funciona, pero me gusta mantener mis alias en el archivo de configuración para facilitar la administración.
Hay una buena página en la wiki de git que explica alias muy claramente: http://git.or.cz/gitwiki/Aliases En particular, lea ''alias avanzados con argumentos''
No pude encontrar en la documentación, pero si creas un script "git- <nombre>" en la ruta, puedes llamarlo con "git name" en tu repositorio.
Ver:
$ cd ~/bin
$ echo "echo I love this log:
>pwd
>git log --graph --summary --decorate --all" > git-logg
$ chmod +x git-logg
$ cd /path/to/your/repo
$ git logg
I love this log:
/path/to/your/repo
* commit 3c94be44e4119228cc681fc7e11e553c4e77ad04 (whatever-branch)
| Author: myself <my@Laptop.(none)>
| Date: Fri Apr 1 16:47:20 2011 +0200
|
| would have been better not to do it at all
|
...
$
Por lo tanto, puedes escribir cualquier alias que desees con esta manera (bastante oscura) también.
Aún más, puede agregar autocompletado a ese nuevo comando que define una función. Información here
$ _git_logg ()
{
# you can return anything here for the autocompletion for example all the branches
__gitcomp_nl "$(__git_refs)"
}
Para ejecutar comandos dentro de un git alias, y en particular para pasar argumentos a esos comandos, es probable que tengas que crear una función temporal que luego invocarás inmediatamente:
$ vim ~/.gitconfig
...
[alias]
# compare:
foo = "! echo begin arg=$1/$2/end"
foo2 = "!f() { echo "begin arg=$1/$2/end"; }; f"
En este ejemplo, la función es probablemente lo que necesita (y también es más flexible en cuanto a lo que puede hacer en una sola "declaración"); y probablemente puedas decir que para ambas opciones, las args restantes del comando git simplemente se pasan como args al alias, independientemente de si es "echo" o "f"; invocar la función simplemente consume los argumentos, ignorando lo que no se usa explícitamente:
$ git foo a b c
begin arg=a/b/end a b c
$ git foo2 a b c
begin arg=a/b/end
Otro ejemplo (enumera todos los alias, según el patrón de coincidencia) (nota: puede seguir reutilizando el mismo nombre de función "f ()" en el .gitconfig):
[alias]
alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"
El primero devuelve el alias para solo "foo $", el segundo para "foo. *":
$ git alias foo
alias.foo ! echo begin arg=$1/$2/end
$ git alias ''foo.*''
alias.foo ! echo begin arg=$1/$2/end
alias.foo2 !f() { echo begin arg=$1/$2/end; }; f
(nb: los resultados reales pueden variar según el shell; estoy usando esto con bash en Linux, Unix y Cygwin (Windows).)
git config --global alias.diffall ''!sh diffall.sh''
Esto es redundante de una manera. Si va a agregar ''diffall.sh'' en su $ PATH de todos modos, ¿por qué no guardarlo como ''git-diffall'' y evitar la declaración de un alias? Sí, "git diffall" lo ejecutará.