Como imprimo uma lista dos meus aliases do git, ou seja, algo análogo ao alias
comando bash ?
Como imprimo uma lista dos meus aliases do git, ou seja, algo análogo ao alias
comando bash ?
Respostas:
Esta resposta baseia-se na resposta de johnny . Aplica-se, se você não está usando git-alias
a partir git-extras
.
No Linux, execute uma vez:
git config --global alias.alias "! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /"
Isso criará um alias permanente do git chamado alias
que é armazenado no seu ~/.gitconfig
arquivo. Usá-lo listará todos os seus aliases do git, quase no mesmo formato em que estão no ~/.gitconfig
arquivo. Para usá-lo, digite:
$ git alias
loga = log --graph --decorate --name-status --all
alias = ! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /
As seguintes considerações se aplicam:
Para impedir que o alias alias
seja listado como acima, acrescente um | grep -v ^'alias '
pouco antes da aspas duplas de fechamento. Eu não recomendo isso, para que os usuários não esqueçam que o comando alias
é apenas um alias e não é um recurso do git.
Para classificar os aliases listados, acrescente um | sort
pouco antes da aspas duplas de fechamento. Como alternativa, você pode manter os aliases ~/.gitconfig
classificados.
Para adicionar o alias como um alias em todo o sistema, substitua --global
(para usuário atual) por --system
(para todos os usuários). Isso normalmente aparece no /etc/gitconfig
arquivo.
alias.
no início de cada linha
fatal: bad config
. A solução da Git-extras funciona para me embora: github.com/tj/git-extras/blob/master/bin/git-alias
git config --global alias.alias "! git config --get-regexp ^alias\."
. Como alternativa, garanta git version
que você tenha uma versão atual do git.
Alias do $ git config --get-regexp
'^alias\.'
git config -e
e então use seus olhos para encontrar a [alias]
seção. Mas os fãs git parece sempre jogar em um pouco de scripting bash ou correspondência de expressões regulares para resolver seus problemas, mesmo quando não é necessário :)
git config -e
edita .git/config
apenas o arquivo. Mas a maioria dos meus aliases é definida no global ~/.gitconfig
.
git config --global alias.aliases config --get-regexp '^alias\.'"
... e entãogit aliases
"
em algum lugar
Eu criei um alias do git chamado (estranhamente) alias
para exatamente esse propósito ... útil de vez em quando se você usar o aliasing o suficiente ...
$ git config --global alias.alias "config --get-regexp ^alias\."
Observe que o regex garante que a linha comece com alias.
.
--system
vez de --global
algo como isso ser mais útil no nível do sistema, não no nível do usuário.
alias = config --get-regexp ^alias\\.
.
git config --global alias.alias "!git config --get-regexp ^alias\. | grep -Po '(?<=alias\.)\S*' | sort"
Outra alternativa (puramente algo que acho fácil de lembrar):
git config --list | grep alias
alias
alias uma vez e depois esquecer que você o criou.
-l
como um atalho conveniente para, --list
mas eu gosto da ideia de criar um alias para listar os alias.
git config --list | grep -E '^alias'
Eu ouvi 'bash scripting'? ;)
Sobre a parte 'não necessária' em um comentário acima, basicamente criei uma página de manual como visão geral para meus apelidos. Por que todo esse barulho? Isso não é um exagero completo?
Leia...
Eu configurei os comandos como este no meu .gitconfig, separados como TAB=TAB:
[alias]
alias1 = foo -x -y --z-option
alias2 = bar -y --z-option --set-something
e simplesmente definiu outro alias para saudar a TAB=parte dos alias definidos. (Todas as outras opções não têm guias antes e depois do '=' em sua definição, apenas espaços.)
Os comentários não anexados a um alias também têm um TAB=====anexo; portanto, eles são mostrados após o grepping.
Para uma melhor visualização, estou canalizando a saída grep para menos, assim:
#.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"
A \t=
parte ' ' corresponde TAB=.
Para ter uma visão geral ainda melhor de quais aliases eu tenho e, desde que eu uso o console bash, pintei a saída com cores de terminal:
la = "!grep '\t=' ~/.gitconfig | sed -e 's/=/^[[0;31m=^[[0m/g' | sed -e 's/#.*/^[[0;32m&^[[0m/g' | less -R"
Basicamente o mesmo que acima, apenas o uso sed é adicionado para obter os códigos de cores na saída.
A -R
bandeira de menos é necessária para obter as cores mostradas em menos.
(Descobri recentemente que comandos longos com uma barra de rolagem embaixo da janela não são mostrados corretamente em dispositivos móveis: o texto é cortado e a barra de rolagem está simplesmente ausente. Esse pode ser o caso do último snippet de código aqui, mantenha-o em (observe os trechos de código aqui em movimento).
Eu tenho um tipo de meia milha de aliases, adaptados às minhas necessidades.
Além disso, alguns deles mudam com o tempo , portanto, a melhor idéia de ter uma lista atualizada em mãos é analisar o .gitconfig.
Um trecho curto **** dos meus aliases .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
Nas minhas estações de trabalho linux ou mac também existem outros aliases nos .bashrc's, 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
Dessa forma, não é necessário digitar git help submodule
, não é necessário git h submodule
, apenas gh submodule
é tudo o que é necessário para obter a ajuda. São apenas alguns caracteres, mas com que frequência você os digita?
Eu uso todos os itens a seguir, é claro, apenas com atalhos ...
Isso foi apenas do topo da minha cabeça.
Geralmente, tenho que usar o git sem uma GUI, pois muitos dos comandos do git não são implementados corretamente em nenhuma das interfaces gráficas. Mas toda vez que eu os uso, é principalmente da mesma maneira.
Na parte 'não implementada' mencionada no último parágrafo:
Ainda preciso encontrar algo que se compare a isso em uma GUI:
sba = show-branch --color=always -a --more=10 --no-name
- mostre todas as ramificações locais e remotas, bem como os commits que elas possuem
ccm = "!git reset --soft HEAD~ && git commit"
- altere a última mensagem de confirmação
De um ponto de vista mais simples: com
que freqüência você digita git add .
ou git commit -am "..."
? Sem contar o resto ...
Fazer as coisas funcionarem como git aa
ou git ca "..."
no Windows,
ou com aliases do bash gaa
/ g aa
ou gca "..."
/ g ca "..."
no linux e no mac ...
Para minhas necessidades, parecia uma coisa inteligente a se fazer, adaptar comandos git como este ...
... e para facilitar o uso, eu apenas me ajudei a usar comandos menos utilizados, para que eu não precise consultar as páginas de manual todas as vezes. Os comandos são predefinidos e procurá-los é o mais fácil possível.
Quero dizer, afinal somos programadores? Fazer com que as coisas funcionem como precisamos delas é o nosso trabalho.
Aqui está uma captura de tela adicional, que funciona no Windows:
la = "!grep '\t=' ~/.gitconfig | less"
TAB
precedente a cada =
? Com espaços, não vai funcionar. Eu mesmo tinha espaços em minhas janelas .gitconfig
, depois de substituí-los por um único tabstop, o cmd.exe se comporta como o esperado.
Como outras respostas mencionadas, git config -l
lista todos os detalhes de sua configuração do seu arquivo de configuração. Aqui está um exemplo parcial dessa saída para minha configuração:
...
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
...
Assim, podemos destacar as linhas 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 tornar isso mais bonito, apenas cut
destacando a alias.
parte de cada linha, deixando-nos com 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 fim, não se esqueça de adicionar isso como um alias:
git config --global alias.la "!git config -l | grep alias | cut -c 7-"
Aproveitar!
Eu mencionei em junho de 2018 com a " lista de visão geral - comandos git mais usados ", o Git 2.18 "use --list-cmds=alias
( commit 3301d36 )", que carej relata em sua resposta .
git --list-cmds=alias
Além disso ou de git config --get-regexp alias
, você pode combinar sua saída com git help
, cuja saída será alterada com o Git 2.14.x / 2.15:
"
git help co
" agora diz "co is aliased to ...
", não "git co is
".
Consulte commit b3a8076 (12 de setembro de 2017) por Kaartic Sivaraam ( sivaraam
) .
(Mesclado por Junio C Hamano - gitster
- na confirmação 5079cc8 , 25 de setembro de 2017)
help
: altere uma mensagem para ser mais precisoQuando o usuário tenta usar a
--help
opção ' ' em um comando com alias, as informações sobre o alias são impressas como mostrado abaixo:
$ git co --help
`git co' is aliased to `checkout'
Isso não parece correto, pois o usuário alias apenas '
co
' e não 'git co
'.
Isso pode até estar incorreto nos casos em que o usuário usou um alias como 'tgit
'.
$ tgit co --help
`git co' is aliased to `checkout'
Eu uso esse alias no meu 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 produzir a seguinte saída
$ 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: Isso funciona para mim no git bash no Windows . Para outros terminais, pode ser necessário adaptar o escape. )
!git config --get-regexp ^alias\\.
imprime todas as linhas do git config que começam com alias.
sed -e s/^alias.//
remove alias.
da linhased -e s/\\ /\\ $(printf \"\\043\")--\\>\\ /
substitui a primeira ocorrência de um espaço por \\ $(printf \"\\043\")--\\>
(que é avaliado como #-->
).column -t -s $(printf \"\\043\")
formata todas as linhas em uma tabela de colunas com espaçamento uniforme. O caractere $(printf \"\\043\")
que avalia #
é usado como separador.sort -k 1
classifica todas as linhas com base no valor na primeira coluna$ (printf \ "\ 043 \")
Isso apenas imprime o caractere #
(hexadecimal 043) que é usado para a separação da coluna. Eu uso esse pequeno truque para que o aliases
apelido em si não contenha literalmente o #
personagem. Caso contrário, ele substituiria esses #
caracteres ao imprimir.
Nota : Altere para outro caractere se precisar de aliases com #
sinais literais .
Há uma função interna ... tente
$ __git_aliases
lista todos os aliases :)
$
denota o prompt de terminal típico linux. Digite o restante desta linha nesse terminal e clique ENTER
e solte uma lista dos seus pseudônimos. Funciona no Linux e no Windows (git bash), porque está embutido no git. (É provavelmente uma função que usa git internamente para resolver aliases quando eles são usados na linha de comando.)
A partir do git 2.18, você pode usar git --list-cmds=alias
Ainda outro git
alias (chamado alias
) que imprime aliases do git: adicione o seguinte à sua [alias]
seção gitconfig :
[alias]
# lists aliases matching a regular expression
alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"
Exemplo de uso, fornecendo o nome completo do alias (corresponde exatamente ao nome do alias: ie, ^foobar$
) e simplesmente mostra o valor:
$ git alias st
alias.st status -s
$ git alias dif
alias.dif diff
Ou, forneça regexp, que mostra todos os aliases e valores correspondentes:
$ 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}..
Advertências: cite o regexp para impedir a expansão do shell como um globo, embora não seja tecnicamente necessário se / quando nenhum arquivo corresponder ao padrão. Além disso: qualquer regexp é bom, exceto ^
(início do padrão) e $
(final do padrão) não podem ser usados; eles estão implícitos. Assume que você não está usando git-alias
a partir git-extras
.
Além disso, obviamente, seus apelidos serão diferentes; estes são apenas alguns que eu configurei. (Talvez você os ache úteis também.)