2

Pitch: Git LGA (Logical Git Aliases) - mnemônicos fáceis de usar e memorizar

Fala, pessoal! Esse é meu primeiro post aqui no TabNews, e quero muito mostrar uma ferramenta que eu criei e uso todos os dias: o Git LGA (Logical Git Aliases).

É um conjunto de aliases para Git. Mas calma que não é qualquer tipo de alias! Tem muitas dessas coleções rolando por aí, mas eu sempre senti que havia um problema: a maioria dos atalhos são um tanto arbitrários e aleatórios: gco, gcam, gpf... você decora um e outro e o resto acaba tendo dificuldade de lembrar. No LGA, os aliases são mnemônicos e seguem todos a mesma lógica. Uma vez que você internaliza essa lógica, pode até conseguir adivinhar combinações para outros comandos de forma intuitiva.

Desde que comecei a usar fiquei bem mais rápido no terminal: os commits agora saem na velocidade da luz. E ainda acabei viciando o pessoal do trabalho 😂

Como usar?

Todos os aliases são estruturados da mesma forma: g (chama o Git) + prefixo (o comando) + sufixo (a inicial da flag). Assim acaba ficando gswc:

g  sw  c
│  │   └─ sufixo: c de --create
│  └───── prefixo: sw de switch
└──────── g: chama o git

gswc  →  git switch --create

O sufixo é opcional. Sem ele fica só o comando: gsw é git switch.

Aqui demonstrando na prática um fluxo bem comum, de uma branch nova até o momento de dar push. Fica assim:

$ gswc feature/login              # git switch --create feature/login
$ gst                             # git status
$ gad src/login.php               # git add src/login.php
$ gcmm "Adiciona tela de login"   # git commit --message "..."
$ gpsh                            # git push origin HEAD

Viu? É muito intuitivo e tranquilo de usar: cm de commit, m de message; ps de push, h de HEAD. E se você curte digitar git, funciona sem o g também: git swc, git st.

Ao todo são 71 aliases, cobrindo add, branch, commit, checkout/switch/restore, diff, fetch/pull/push, log/show, merge/rebase, stash, status, cherry-pick e mais uns utilitários.

Esqueceu algum comando? git lga

No repositório tem o CHEATSHEET.md. Mas tem também uma colinha embutida na ferramenta! É só rodar git lga:

╔═════════════════════════════════════════════════╗
║                   Git Aliases                   ║
╠═════════════════════════════════════════════════╣
║ ── C ──                                         ║
║ cm     │ commit                                 ║
║ cmm    │ commit --message                       ║
║ cma    │ commit --amend                         ║
║ cmn    │ commit --amend --no-edit               ║
║ cmf    │ commit --fixup                         ║
║         ...                                     ║
╚═════════════════════════════════════════════════╝

E o lga em si nada mais é que outro alias, chamando um script:

lga = !~/.git-lga-help.sh

Como funciona?

Não tem plugin manager, nem framework, nem precisa de Oh-My-Zsh. São basicamente duas peças trabalhando em conjunto:

Um gitconfig separado, puxado via include

Os aliases estão em ~/.git-lga.gitconfig e entram no seu ~/.gitconfig por meio de um include.path:

git config --global include.path ~/.git-lga.gitconfig

Ou seja, o seu arquivo de config fica do jeito que está. Se você já tem um alias com o mesmo nome, o Git acaba elegendo a última opção definida na config, então se for de interesse dá pra sobrescrever qualquer comando desde que seja depois do include.

Versão pro PowerShell

No Linux, os aliases com g na frente vêm do git-lga.bashrc. No Windows, quem faz esse papel é o git-lga.ps1 (incluído no instalador).

Escolhas que valem comentar...

O psf usa --force-with-lease, não --force. O --force-with-lease barra o push se o remoto mudou desde o seu último fetch, então você não apaga sem querer algum commit que o colega acabou de subir. Já que é pra ter um atalho de três letras pra push forçado, tem que ser seguro, não acham?

Onde a regra tem umas pequenas exceções (colisões semânticas): tem vezes que a regra dos mnemônicos esbarra em problemas de letras repetidas, e não vou esconder isso:

  • stho é stash pop, porque o p já ficou com o stash push (sthp).
  • ada e rsa são add . e restore .. Não existe flag --all ali, mas o "a de all" continua fácil de lembrar.
  • cha e chc (abort e continue do cherry-pick) fogem do prefixo chp pra ficarem curtinhos.

São poucas exceções, e pra elas sempre existe colinha.

Instalação

É bem simples: um comando só, que roda no Linux e no Windows. Se quiser conferir como instalar, clica aqui e dá uma olhada no GitHub.

Testem aí e me contem o que acharam ;)
Tenho certeza que vocês irão curtir! Se tiver algum alias que você usa direto e tá faltando na lista, comenta aí!

Referências

Carregando publicação patrocinada...
1

Eu já faço algo muito parecido com isso. Tento usar uma regra de mnemônicos com esse mesmo objetivo. Assim a gente não esquece tanto os comandos, porque o alias sempre me faz pensar na sequência de parâmetros.

Mas eu resolvi isso usando o .bash_aliases. Como ele é carregado ao abrir uma seção do bash, qualquer terminal tem todos os comandos disponíveis.

Mas parabéns por fazer algo já embutido no Git. Fica mais transparente para o usuário.