Como um desenvolvedor core do Git configura e usa o Git?
(blog.gitbutler.com)- Scott Chacon, autor de "Pro Git", explica algumas configurações de Git que ele ativou globalmente e por quê
- Muitas dessas configurações foram aprendidas, na prática, com desenvolvedores que trabalham no próprio código-fonte core do Git
- Abaixo estão configurações do
~/.gitconfigque tornam o Git melhor[column] ui = auto [branch] sort = -committerdate [tag] sort = version:refname [init] defaultBranch = main [diff] algorithm = histogram colorMoved = plain mnemonicPrefix = true renames = true [push] default = simple autoSetupRemote = true followTags = true [fetch] prune = true pruneTags = true all = true # Por que não usar? [help] autocorrect = prompt [commit] verbose = true [rerere] enabled = true autoupdate = true [core] excludesfile = ~/.gitignore [rebase] autoSquash = true autoStash = true updateRefs = true # Configurações por preferência pessoal (descomente e use se necessário) [core] # fsmonitor = true # untrackedCache = true [merge] # (se a versão do Git for anterior à 2.3, use `diff3`) # conflictstyle = zdiff3 [pull] # rebase = true
Como os desenvolvedores core do Git configuram o Git?
- Na mailing list do Git, Felipe Contreras chegou a sugerir que a equipe core removesse todas as configurações e aliases e tentasse usar o Git padrão
- Como resultado desse experimento, 9 configurações e 3 aliases foram propostos como novos padrões
merge.conflictstyle = zdiff3 rebase.autosquash = true rebase.autostash = true commit.verbose = true diff.colorMoved = true diff.algorithm = histogram grep.patternType = perl feature.experimental = true branch.sort = committerdate - Essas configurações ainda não foram adotadas como padrão
- Ainda assim, é interessante que muitos desenvolvedores do Git tenham dificuldade para usá-lo sem ativar algumas delas
- Mais interessante ainda é que a maioria de vocês provavelmente não faz ideia do que isso significa
- A explicação será dividida em três categorias
- O que claramente deixa o Git melhor (Clearly Makes Git Better)
- Por que diabos não? (Why the Hell Not?)
- Uma questão de gosto (A Matter of Taste)
# O que claramente deixa o Git melhor
Ordenação da lista de branches
- Por padrão, o Git ordena as branches em ordem alfabética, mas pode ser mais útil ordená-las pela data do commit mais recente
- Com as configurações abaixo, as branches são ordenadas pelos commits mais recentes e exibidas em formato de colunas
git config --global column.ui auto git config --global branch.sort -committerdate
Ordenação da lista de tags
- Para ordenar tags por versão em vez de ordem alfabética, use a configuração abaixo
git config --global tag.sort version:refname
Definição do nome da branch padrão
- Para definir o nome da branch padrão ao inicializar um novo repositório, configure assim
git config --global init.defaultBranch main
Configurações de diff aprimoradas
- Altera o algoritmo de diff padrão para
histogram, permitindo comparações mais precisas - Para detectar trechos de código movidos e destacá-los com cor, adicione estas configurações
git config --global diff.algorithm histogram git config --global diff.colorMoved plain git config --global diff.mnemonicPrefix true git config --global diff.renames true
Configurações de push aprimoradas
- As configurações abaixo melhoram o comportamento do push
git config --global push.default simple git config --global push.autoSetupRemote true git config --global push.followTags true
Configurações de fetch aprimoradas
- Para remover automaticamente branches e tags desnecessárias ao fazer fetch, use as configurações abaixo
git config --global fetch.prune true git config --global fetch.pruneTags true git config --global fetch.all true
# Por que diabos não?
Prompt de correção automática
- Para detectar erros de digitação ao inserir comandos e sugerir correções, use
git config --global help.autocorrect prompt
Diff ao fazer commit
- Para exibir junto as mudanças ao escrever a mensagem de commit, adicione esta configuração
git config --global commit.verbose true
Reutilização da resolução de conflitos
- Para reutilizar automaticamente resoluções de conflitos anteriores, use as configurações abaixo
git config --global rerere.enabled true git config --global rerere.autoupdate true
Configuração de arquivo .gitignore global
- Para definir arquivos ignorados globalmente, configure assim
git config --global core.excludesfile ~/.gitignore
Melhoria das configurações de rebase
- Para executar squash e stash automaticamente durante o rebase, use as configurações abaixo
git config --global rebase.autoSquash true git config --global rebase.autoStash true git config --global rebase.updateRefs true
# Uma questão de gosto
Exibição aprimorada de conflitos de merge
- Para mostrar também a versão base durante conflitos de merge, considere esta configuração
git config --global merge.conflictstyle zdiff3
Usar rebase no pull
- Para executar rebase automaticamente ao usar
git pull, configure assimgit config --global pull.rebase true
Melhorar a velocidade de detecção de alterações em arquivos
- Para melhorar o desempenho de comandos como
git status, você pode usar estas configuraçõesgit config --global core.fsmonitor true git config --global core.untrackedCache true
# Conclusão
- Com essas configurações, é possível usar o Git de forma mais prática, e algumas delas são usadas ativamente até pelos desenvolvedores core
- Ao otimizar a configuração do Git, você pode melhorar seu fluxo de trabalho e usá-lo com mais eficiência
7 comentários
"O mais interessante é que a maioria de vocês não faz a menor ideia do que isso significa" foi bem certeiro. 😨😨😨
É
-globale não--global?É
--global. Houve um engano ao copiar e colar. Já foi corrigido.Opções de configuração populares do Git
A reutilização da resolução de conflitos é ótima.
Quando vou ver
diff, uso o git-delta para visualizar no formato TUI.Se não quiser esquentar muito a cabeça, dá para usar o
tig... hahahaSerá que existe algo melhor...?
Comentários do Hacker News
git out. Ele lista todos os commits que ainda não foram enviados com push. Uso o tempo todogit config --global core.pager bat