59 pontos por GN⁺ 2024-02-17 | 4 comentários | Compartilhar no WhatsApp
  • pull.ff only ou pull.rebase true

    • Ambas as configurações servem para evitar a criação acidental de um commit de merge ao executar git pull quando a branch divergiu da branch upstream.
    • pull.rebase true é o mesmo que executar git pull --rebase todas as vezes.
    • pull.ff only é o mesmo que executar git pull --ff-only todas as vezes.
    • Não faz sentido usar as duas configurações ao mesmo tempo, porque --ff-only sobrescreve --rebase.
  • merge.conflictstyle zdiff3

    • Configuração que torna conflitos de merge mais fáceis de ler.
    • diff3 altera a forma como os conflitos de merge são mostrados no padrão, exibindo o código original no meio.
    • zdiff3 é uma versão aprimorada do diff3 e costuma ser considerada melhor.
  • rebase.autosquash true

    • Recurso que facilita corrigir commits antigos.
    • Se você fizer um commit com git commit --fixup OLD_COMMIT_ID, ao executar git rebase --autosquash main o commit fixup! será combinado automaticamente com o alvo.
  • rebase.autostash true

    • Executa automaticamente git stash e git stash pop antes e depois de git rebase.
  • push.default simple, push.default current

    • Configuram o push automático da branch atual para uma branch remota com o mesmo nome.
    • push.default simple é a configuração padrão e só funciona quando a branch já está rastreando uma branch remota.
    • push.default current sempre faz push da branch local para a branch remota com o mesmo nome.
  • init.defaultBranch main

    • Cria a branch main em vez de master ao inicializar um novo repositório.
  • commit.verbose true

    • Adiciona o diff completo do commit no editor de texto usado para escrever a mensagem, ajudando a lembrar o que foi alterado.
  • rerere.enabled true

    • Lembra como você resolveu conflitos de merge durante git rebase e os resolve automaticamente.
  • help.autocorrect 10

    • O recurso de autocorreção do git verifica erros de digitação, mas não executa automaticamente o comando corrigido.
    • Para executar automaticamente, defina help.autocorrect como 1, 10, immediate ou prompt.
  • core.pager delta

    • É o “pager” usado para exibir a saída de git diff, git log, git show e outros comandos.
    • Define delta, uma ferramenta avançada de visualização de diff com realce de sintaxe.
  • diff.algorithm histogram

    • O algoritmo de diff padrão costuma causar problemas quando a ordem das funções muda.
    • diff.algorithm histogram mostra isso de forma mais clara.
  • core.excludesfile: .gitignore global

    • Define um arquivo gitignore global aplicado a todos os repositórios.
  • includeIf: configurações separadas de git para uso pessoal e de trabalho

    • Usado para configurar endereços de e-mail diferentes para repositórios pessoais e de trabalho.
  • url."git@github.com:".insteadOf 'https://github.com/'

  • fsckobjects: prevenção de corrupção de dados

    • Configuração que detecta corrupção de dados de forma agressiva e já salvou a equipe algumas vezes.
  • Configurações relacionadas a submodule

    • status.submoduleSummary true
    • diff.submodule log
    • submodule.recurse true
  • Outras configurações

    • blame.ignoreRevsFile .git-blame-ignore-revs
    • branch.sort -committerdate
    • color.ui false
    • commit.cleanup scissors
    • core.autocrlf false
    • core.editor emacs
    • credential.helper osxkeychain
    • diff.tool difftastic
    • diff.colorMoved default
    • diff.colorMovedWS allow-indentation-change
    • diff.context 10
    • fetch.prune true e fetch.prunetags
    • gpg.format ssh
    • log.date iso
    • merge.keepbackup false
    • merge.tool meld
    • push.followtags true
    • rebase.missingCommitsCheck error
    • rebase.updateRefs true
  • Como configurar

    • Em geral, a configuração é feita com git config --global NAME VALUE.
    • Para remover uma opção, edite manualmente o ~/.gitconfig.
  • Configurações alteradas após escrever este texto

    • diff.algorithm histogram
    • branch.sort -committerdate
    • merge.conflictstyle zdiff3
  • Encerrando

    • É útil perguntar a muitas pessoas quais são suas configurações favoritas e listar as mais mencionadas.

Opinião do GN⁺

  • O ponto mais importante deste texto é que ele permite conhecer opções de configuração do git usadas com frequência por desenvolvedores.
  • Para engenheiros de software iniciantes que usam git, essas configurações podem ajudar a aumentar a eficiência do trabalho e resolver problemas do dia a dia.
  • Em especial, configurações como merge.conflictstyle zdiff3 e rebase.autosquash true podem reduzir problemas no processo de colaboração ao facilitar a resolução de conflitos de merge e o gerenciamento do histórico de commits.

4 comentários

 
pril1 2024-02-23

Para remover uma opção, também dá para usar o comando git config --global --unset NAME.

 
rumbarum 2024-02-21

Para verificar suas configurações, adicione

git config --list.

 
pmc7777 2024-02-18

No meu ambiente principal de desenvolvimento eu tinha isso configurado, mas em outros ambientes não estava, então já aconteceu de eu ficar pensando "por que isso não funciona?.." kkk. Como desenvolvedores usam Git todos os dias, seria bom se houvesse mais interesse por esse tipo de configuração do Git.

 
GN⁺ 2024-02-17
Comentários do Hacker News
  • Configurações core.autocrlf e safecrlf
    • Evitam o commit de arquivos com CRLF e forçam a conversão para LF
    • Podem ser sobrescritas com gitattributes, se necessário
  • Configuração de alias no .gitconfig
    • Define atalhos para exibir o histórico de commits em um grafo conciso
    • Configuração obtida de uma postagem no Stack Overflow
  • rebase.autosquash e o atalho fixup
    • Configurações usadas com frequência para automatizar o rebase após commits
    • pull.rebase também é importante, mas fixup é usado com mais frequência
  • Utilidade da configuração insteadOf
    • Permite usar atalhos ao adicionar remotos do GitHub
    • Também são mencionadas várias configurações como advice.statusHints, include.path, remote "origin".fetch, interactive.singleKey e outras
  • Exemplo de configuração pessoal de .gitconfig
    • Inclui várias configurações de alias, tag, tar, log, pull, diff, difftool, pager, safe, advice e init
  • Configuração para usar delta como pager
    • Exibe diferenças de forma mais legível e com destaque de sintaxe
    • Adiciona um atalho para fazer checkout da branch padrão
  • Configuração user.useConfigOnly para usar vários e-mails
    • Após comentar user.email, o e-mail é configurado ao fazer commit em um novo repositório
  • Necessidade de mudar o valor padrão de merge.conflictstyle
    • O estilo diff3 fornece mais informações para resolver conflitos
  • Configurações adicionais
    • core.commentChar, alias.newtask, alias.zip, git checkout -, format.pretty, configurações do delta
  • Equívoco sobre a configuração branch.sort
    • Na prática, ela ordena pela data do commit, não pela branch usada mais recentemente
  • Outro exemplo de configuração pessoal de .gitconfig
    • Configurações de alias.lg, alias.hist, alias.quick-push, alias.search, user, core e url
    • É possível definir um fluxo de trabalho simples com o atalho quick-push

O conteúdo acima resume as configurações pessoais de .gitconfig compartilhadas por usuários nos comentários do Hacker News e as dicas de configuração do Git que eles preferem. As configurações têm como foco aumentar a eficiência no uso do Git, automatizar tarefas específicas e melhorar a experiência do usuário.