Lista de alias de Git

444

¿Cómo imprimo una lista de mis alias git, es decir, algo análogo al aliascomando bash ?

ma11hew28
fuente
2
Ver también: git-alias, de git-extras
driftcatcher
77
@MattDiPasquale - Creo que la respuesta principal a continuación funciona, ¿tal vez deberías aceptarla?
domoarigato
@domoarigato Gracias. Lo siento por no aceptar una respuesta. Yo solo lo hice.
ma11hew28
Podría ser un candidato para la pregunta útil, que se ha ido sin una respuesta aceptada por más tiempo :): P
domoarigato
@domoarigato Hah. Bueno, gracias. :-)
ma11hew28

Respuestas:

124

Esta respuesta se basa en la respuesta de Johnny . Se aplica si no está utilizando git-aliasdesde git-extras.

En Linux, ejecute una vez:

git config --global alias.alias "! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /"

Esto creará un alias git permanente llamado aliasque se almacena en su ~/.gitconfigarchivo. Usarlo enumerará todos sus alias git, en casi el mismo formato que están en el ~/.gitconfigarchivo. Para usarlo, escriba:

$ git alias
loga = log --graph --decorate --name-status --all
alias = ! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /

Se aplican las siguientes consideraciones:

  • Para evitar que el alias aliasaparezca en la lista anterior, agregue | grep -v ^'alias 'justo antes de la comilla doble de cierre. No recomiendo esto para que los usuarios no olviden que el comando no aliases más que un alias y no es una característica de git.

  • Para ordenar los alias enumerados, agregue | sortjusto antes de la comilla doble de cierre. Alternativamente, puede mantener los alias ~/.gitconfigordenados.

  • Para agregar el alias como un alias de todo el sistema, reemplace --global(para el usuario actual) con --system(para todos los usuarios). Esto generalmente va en el /etc/gitconfigarchivo.

Acumenus
fuente
3
Me gusta este porque se deshace del alias.principio de cada línea
Brian J
3
No estoy seguro de por qué, pero esta respuesta no funciona para mí. Sigo recibiendo fatal: bad config. Sin embargo, la solución de Git-extra funciona para mí: github.com/tj/git-extras/blob/master/bin/git-alias
Ashitaka
1
@ Ashitaka, prueba una versión limitada, por ejemplo git config --global alias.alias "! git config --get-regexp ^alias\.". Alternativamente, asegúrese de git versiontener una versión actual de git.
Acumenus
¡Este es realmente un gran trabajo y lo reúne todo de una manera extremadamente útil!
UpAndAdam
Creo que puedes deshacerte de la parte "! Git", que básicamente se deshace. Vea la sección de cierre de Git Aliases
Daniel Stevens
489
$ git config --get-regexp alias
William Pursell
fuente
39
Para ser pedante, eso debería ser'^alias\.'
Josh Lee
27
O simplemente git config -ey luego usa tus ojos para encontrar la [alias]sección. Pero los fanáticos de git siempre parecen agregar un poco de scripting bash o coincidencia de expresiones regulares para resolver sus problemas, incluso cuando no es necesario :)
MatrixFrog
39
git config -esolo edita el .git/configarchivo. Pero la mayoría de mis alias se definen en lo global ~/.gitconfig.
Boldewyn
21
Para ser práctico, eso debería ser git config --global alias.aliases config --get-regexp '^alias\.'"... y luegogit aliases
Derek Greer
66
@DerekGreer te estás perdiendo un "lugar
Jake Berger
147

Creé un alias de git llamado (curiosamente) aliasexactamente para este propósito ... útil de vez en cuando si usa el alias lo suficiente ...

$ git config --global alias.alias "config --get-regexp ^alias\."

Tenga en cuenta que la expresión regular se asegura de que la línea comience con alias..

johnny
fuente
He agregado una respuesta que se basa ligeramente en esta respuesta.
Acumenus
1
Sugiero en --systemlugar de --globalque algo como esto sea más útil a nivel de sistema, no a nivel de usuario.
ADTC
1
Me gusta esto. You da You da best
Charles Watson
2
Y si desea agregar directamente a su gitconfig debe tener este aspecto: alias = config --get-regexp ^alias\\..
marczych
¿Qué talgit config --global alias.alias "!git config --get-regexp ^alias\. | grep -Po '(?<=alias\.)\S*' | sort"
Keith Robertson,
84

Otra alternativa (puramente algo que encuentro fácil de recordar):

git config --list | grep alias

Rimian
fuente
8
Hablando de fácil de recordar, también podría crear el aliasalias una vez y luego olvidar que incluso lo creó.
Acumenus
3
Puede usarlo -lcomo un atajo conveniente para, --listpero me gusta la idea de crear un alias para enumerar los alias.
ADTC
1
Buena solución, pero mejor usando grep con una expresión regular para producir líneas que comienzan con alias en caso de que algunas configuraciones contengan alias de palabras clave:git config --list | grep -E '^alias'
MasterMind
28

Lo siguiente funciona en Linux, MacOSX y Windows (con msysgit).

Use git la para mostrar alias en .gitconfig

¿Escuché 'scripting bash'? ;)

Sobre la parte 'no necesaria' en un comentario anterior, básicamente creé una página de manual como resumen para mis alias. ¿Por qué tanto alboroto? ¿No es una exageración completa?

Sigue leyendo ...

He configurado los comandos como este en mi .gitconfig, separados como TAB=TAB:

[alias]
        alias1            =            foo -x -y --z-option
        alias2            =            bar -y --z-option --set-something

y simplemente definió otro alias para grep la TAB=parte de los alias definidos. (Todas las demás opciones no tienen pestañas antes y después del '=' en su definición, solo espacios).

Los comentarios no agregados a un alias también tienen un TAB=====anexo, por lo que se muestran después del grepping.

Para una mejor visualización, estoy canalizando la salida grep en menos, así:

versión básica: (negro / blanco)

  #.gitconfig
  [alias]
        # use 'git h <command>' for help, use 'git la' to list aliases  =====
        h     =     help #... <git-command-in-question>
        la    =     "!grep '\t=' ~/.gitconfig | less" 

La parte ' \t=' coincide TAB=.

Para tener una mejor visión general de los alias que tengo, y desde que uso la consola bash, coloreé la salida con colores de terminal:

  • todos '=' están impresos en rojo
  • todos los '#' están impresos en verde

versión avanzada: (coloreada)

       la      =       "!grep '\t=' ~/.gitconfig | sed -e 's/=/^[[0;31m=^[[0m/g' | sed -e 's/#.*/^[[0;32m&^[[0m/g' | less -R"

Básicamente igual que el anterior, solo se agrega el uso de sed para obtener los códigos de color en la salida.

La -Rbandera de menos es necesaria para obtener los colores que se muestran en menos.

(Recientemente descubrí que los comandos largos con una barra de desplazamiento debajo de su ventana no se muestran correctamente en los dispositivos móviles: el texto está cortado y simplemente falta la barra de desplazamiento. Ese podría ser el caso con el último fragmento de código aquí, manténgalo en importa cuando mires fragmentos de código aquí mientras estás en movimiento).


¿Por qué hacer que funcione tanta magia?

Tengo como media milla de alias, adaptados a mis necesidades.
Además, algunos de ellos cambian con el tiempo , por lo que, después de todo, la mejor idea para tener una lista actualizada es analizar el .gitconfig.

Un extracto breve **** de mis alias .gitconfig:

    #  choose       =====
    a       =       add #...
    aa      =       add .
    ai      =       add -i
    #  unchoose     =====
    rm      =       rm -r #... unversion and delete
    rmc     =       rm -r --cached #... unversion, but leave in working copy
    #  do   =====
    c       =       commit -m #...
    fc      =       commit -am "fastcommit"
    ca      =       commit -am #...
    mc      =       commit # think 'message-commit'
    mca     =       commit -a
    cam     =       commit --amend -C HEAD # update last commit
    #  undo =====
    r       =       reset --hard HEAD
    rv      =       revert HEAD

En mis estaciones de trabajo Linux o Mac también existen más alias en los .bashrc, algo así como:

#.bashrc
alias g="git"
alias gh="git h"
alias gla="git la"
function gc { git c "$*" } # this is handy, just type 'gc this is my commitmessage' at prompt

De esa manera, no es necesario escribir git help submodule, no es necesario git h submodule, solo gh submodulees todo lo que se necesita para obtener la ayuda. Son solo algunos caracteres, pero ¿con qué frecuencia los escribe?

Uso todo lo siguiente, por supuesto solo con atajos ...

  • añadir
  • cometer
  • comprometerse
  • restablecer - CABEZA dura
  • empujar
  • ir a buscar
  • rebase
  • revisa
  • rama
  • show-branch (en muchas variaciones)
  • shortlog
  • volver a registrar
  • diff (en variaciones)
  • log (en muchas variaciones)
  • estado
  • show
  • notas
  • ...

Esto fue solo desde lo alto de mi cabeza.

A menudo tengo que usar git sin una interfaz gráfica de usuario, ya que muchos de los comandos de git no se implementan correctamente en ninguna de las interfaces gráficas. Pero cada vez que los uso, es principalmente de la misma manera.

En la parte 'no implementada' mencionada en el último párrafo:
todavía tengo que encontrar algo que se compare con esto en una GUI:
sba = show-branch --color=always -a --more=10 --no-name- muestre todas las ramas locales y remotas, así como las confirmaciones que tienen dentro de ellas
ccm = "!git reset --soft HEAD~ && git commit"- cambie el último mensaje de confirmación

Desde un punto de vista que es más simple:
¿con qué frecuencia escribe git add .o git commit -am "..."? Sin contar ni el resto ...
Conseguir que las cosas funcionen como git aao git ca "..."en Windows,
o con alias bash gaa/ g aao gca "..."/ g ca "..."en Linux y en Mac ...

Para mis necesidades, parecía una cosa inteligente de hacer, personalizar comandos de git como este ...
... y para un uso más fácil, solo me ayudé a mí mismo para comandos menos utilizados, así que no tengo que consultar las páginas de manual cada vez. Los comandos están predefinidos y buscarlos es lo más fácil posible.

Quiero decir, ¿somos programadores después de todo? Hacer que las cosas funcionen como las necesitamos es nuestro trabajo.

Aquí hay una captura de pantalla adicional, esto funciona en Windows:

script que trabaja con cmd.exe

BONIFICACIÓN: si está en Linux o Mac, las páginas man coloreadas pueden ayudarlo un poco:

páginas man coloreadas

revs sjas
fuente
1
No puedo hacer que esto funcione con Windows. Las salidas están en blanco para, por ejemplola = "!grep '\t=' ~/.gitconfig | less"
chwi
1
@Wilhelmsen: ¿Tal vez copiaste y pegaste cosas de la lista anterior? ¿Realmente tienes un TABprecedente cada =? Con espacios no funcionará. Yo mismo tenía espacios en mis ventanas .gitconfig, una vez que los reemplacé con una sola pestaña, cmd.exe se comporta como se esperaba.
sjas
2
sobre ingeniería
Arma X
depende de con qué frecuencia usas algo
sjas
16

Usando git vary filtrando solo aquellos que comienzan con alias:

git var -l | grep -e "^alias"
mkobit
fuente
14

Como se mencionó en otras respuestas, git config -lenumera todos los detalles de configuración de su archivo de configuración. Aquí hay un ejemplo parcial de esa salida para mi configuración:

...
alias.force=push -f
alias.wd=diff --color-words
alias.shove=push -f
alias.gitignore=!git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
alias.branches=!git remote show origin | grep \w*\s*(new^|tracked) -E
core.repositoryformatversion=0
core.filemode=false
core.bare=false
...

Entonces podemos extraer las líneas de alias, usando git config -l | grep alias:

alias.force=push -f
alias.wd=diff --color-words
alias.shove=push -f
alias.gitignore=!git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
alias.branches=!git remote show origin | grep \w*\s*(new^|tracked) -E

Podemos hacer esto más bonito simplemente cutseñalando la alias.parte de cada línea, dejándonos con este comando:

git config -l | grep alias | cut -c 7-

Que imprime:

force=push -f
wd=diff --color-words
shove=push -f
gitignore=!git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
branches=!git remote show origin | grep \w*\s*(new^|tracked) -E

Por último, no olvides agregar esto como un alias:

git config --global alias.la "!git config -l | grep alias | cut -c 7-"

¡Disfrutar!

Anubian Noob
fuente
13

para ventanas:

git config --list | findstr "alias"
176 codificación
fuente
12

Mencioné en junio de 2018 con la " lista de resumen: los comandos de git más utilizados ", el Git 2.18 "use --list-cmds=alias( commit 3301d36 )", que carej informa en su respuesta .

 git --list-cmds=alias

Además de eso o de git config --get-regexp alias, puede combinar su salida con git help, cuya salida cambiará con Git 2.14.x / 2.15:

" git help co" ahora dice " co is aliased to ...", no " git co is".

Ver commit b3a8076 (12 de septiembre de 2017) por Kaartic Sivaraam ( sivaraam) .
(Fusionada por Junio ​​C Hamano - gitster- en commit 5079cc8 , 25 sep 2017)

help: cambiar un mensaje para ser más preciso

Cuando el usuario intenta usar la --helpopción ' ' en un comando con alias, la información sobre el alias se imprime como se muestra a continuación:

$ git co --help
`git co' is aliased to `checkout'

Esto no parece correcto ya que el usuario solo ha alias ' co' y no ' git co'.
Esto podría incluso ser incorrecto en los casos en que el usuario haya usado un alias como ' tgit'.

$ tgit co --help
`git co' is aliased to `checkout'
VonC
fuente
9

Buscar o mostrar todos los alias

Añadir a su .gitconfigdebajo [alias]:

aliases = !git config --list | grep ^alias\\. | cut -c 7- | grep -Ei --color \"$1\" "#"

Entonces puedes hacer

  • git aliases - mostrar TODOS los alias
  • git aliases commit - solo alias que contienen "commit"
Tom Hale
fuente
9

Yo uso este alias en mi global~/.gitconfig

# ~/.gitconfig

[alias]
    aliases = !git config --get-regexp ^alias\\. | sed -e s/^alias.// -e s/\\ /\\ $(printf \"\\043\")--\\>\\ / | column -t -s $(printf \"\\043\") | sort -k 1

para producir el siguiente resultado

$ git aliases
aliases   --> !git config --get-regexp ^alias\. | sed -e s/^alias.// -e s/\ /\ $(printf "\043")--\>\ / | column -t -s $(printf "\043") | sort -k 1
ci        --> commit -v
cim       --> commit -m
co        --> checkout
logg      --> log --graph --decorate --oneline
pl        --> pull
st        --> status
...       --> ...

( Nota: Esto funciona para mí en git bash en Windows . Para otros terminales, es posible que deba adaptar el escape ) .


Explicación

  1. !git config --get-regexp ^alias\\. imprime todas las líneas de git config que comienzan con alias.
  2. sed -e s/^alias.//elimina alias.de la línea
  3. sed -e s/\\ /\\ $(printf \"\\043\")--\\>\\ /reemplaza la primera aparición de un espacio con \\ $(printf \"\\043\")--\\>(que se evalúa como #-->).
  4. column -t -s $(printf \"\\043\")formatea todas las líneas en una tabla de columnas espaciadas uniformemente. El carácter $(printf \"\\043\")que evalúa #se utiliza como separador.
  5. sort -k 1 ordena todas las líneas según el valor de la primera columna

$ (printf \ "\ 043 \")

Esto solo imprime el carácter #(hexadecimal 043) que se utiliza para la separación de columnas. Utilizo este pequeño truco para que el aliases alias en sí no contenga literalmente el #personaje. De lo contrario, reemplazaría esos #caracteres al imprimir. Nota : Cambie esto a otro carácter si necesita alias con #signos literales .

Thomas
fuente
fatal: alias recursivo: alias
Urasquirrel
fatal: línea de configuración incorrecta 15 en el archivo C: / Users / ____ /. gitconfig
Urasquirrel
@Urasquirrel: ¿En qué sistema operativo tienes problemas? Esto funciona para mí en git bash en Windows y en bash en Mac OS X (Apple Git).
Thomas
Definitivamente fue Windows, pero un año o más después no estoy 100% seguro.
Urasquirrel
2

Hay una función incorporada ... intente

$ __git_aliases

enumera todos los alias :)

vigo
fuente
3
¿Puede mostrar un ejemplo de línea de comando de cómo usar esto, junto con la salida de muestra?
Acumenus
¿Construido en qué? No puedo encontrar nada de este tipo en msysgit. ¿Dónde encontraste esto exactamente?
ADTC
2
Ni llamarlo directamente desde la terminal ni como argumento para git produce ninguna salida de valor. ¿Qué es exactamente esto incorporado?
Acordemente-ascifo el
44
Trabajó para mí en git bash. $ __git_aliases devuelve una lista de alias, aunque no muestra a qué están alias.
jaypb
1
@ADTC la línea de código en esta respuesta es un ejemplo de línea de comando. El $ denota el símbolo del terminal de Linux típico. Escriba el resto de esta línea en dicho terminal y presione ENTERy salga una lista de sus alias. Funciona tanto en Linux como en Windows (git bash) porque está integrado en git. (Probablemente sea una función que git usa internamente para resolver alias cuando se usan en la línea de comando).
Superole
1

Si conoce el nombre del alias, puede usar la --helpopción para describirlo. Por ejemplo:

$ git sa --help
`git sa' is aliased to `stash'

$ git a --help
`git a' is aliased to `add'
cmcginty
fuente
1

A partir de git 2.18 puedes usar git --list-cmds=alias

carej
fuente
Solo devuelven el alias cmd, no su contenido. ¿Hay alguna opción para conseguir eso?
Carles Alcolea
0

Otro gitalias (llamado alias) que imprime alias git: agregue lo siguiente a su [alias]sección gitconfig :

[alias]
    # lists aliases matching a regular expression
    alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"

Ejemplo de uso, dando el nombre completo del alias (coincide exactamente con el nombre del alias: es decir, ^foobar$), y simplemente muestra el valor:

$ git alias st
alias.st status -s

$ git alias dif
alias.dif diff

O bien, proporcione regexp, que muestra todos los alias y valores coincidentes:

$ git alias 'dif.*'
alias.dif diff
alias.difs diff --staged
alias.difh diff HEAD
alias.difr diff @{u}
alias.difl diff --name-only

$ git alias '.*ing'
alias.incoming !git remote update -p; git log ..@{u}
alias.outgoing log @{u}..

Advertencias: cite la expresión regular para evitar la expansión de la shell como un globo, aunque no es técnicamente necesario si / cuando ningún archivo coincide con el patrón. Además: cualquier expresión regular está bien, excepto que no se puede usar ^(inicio del patrón) y $(final del patrón); Están implícitos. Asume que no está utilizando git-aliasdesde git-extras.

Además, obviamente sus alias serán diferentes; Estos son solo algunos que he configurado. (Quizás los encuentres útiles también).

Miguel
fuente