Skip to content

Instantly share code, notes, and snippets.

@wellington1993
Last active August 23, 2025 14:33
Show Gist options
  • Save wellington1993/e2f97a4f1439b5c8349c0b19a1f859a8 to your computer and use it in GitHub Desktop.
Save wellington1993/e2f97a4f1439b5c8349c0b19a1f859a8 to your computer and use it in GitHub Desktop.

Índice

  1. Princípio Fundamental: pull Antes do push
  2. Ferramentas para o Dia a Dia
  3. Ferramentas para Qualidade e Padronização (Foco em Java)
  4. Fluxo de Trabalho Padrão com Branches
  5. Integração com IDEs (Foco em IntelliJ)
  6. Regras de Proteção de Branch (Server-Side)
  7. Anexo A: Links para Aprofundamento
  8. Anexo B: Solução de Problemas Comuns

1. Princípio Fundamental: pull Antes do push

A regra principal para trabalho colaborativo é sempre integrar as mudanças remotas antes de enviar as suas.

  • Comando Chave: git pull --rebase.
  • Objetivo: Manter um histórico de commits limpo e linear.
  • Configuração Padrão: Para que todo git pull use rebase, configure globalmente:
    git config --global pull.rebase true
  • Resolução de Conflitos em Rebase: Se ocorrer um conflito, o Git pausará.
    1. Resolva o conflito no seu editor.
    2. Adicione o arquivo resolvido: git add <arquivo-resolvido>.
    3. Continue o rebase: git rebase --continue.
    4. Para cancelar a operação: git rebase --abort.

2. Ferramentas para o Dia a Dia

Interfaces de Terminal (TUIs)

  • LazyGit: Agiliza operações Git com uma interface visual no terminal.

Visualizadores de Diff

  • Delta: Melhora a visualização do git diff com visão lado a lado.

GUIs (Interfaces Gráficas) Gratuitas

  • IntelliJ IDEA Git Log: A ferramenta nativa do IntelliJ é extremamente poderosa e, na prática, a melhor GUI para um fluxo de trabalho Java.
  • Gitg: GUI nativa do GNOME, simples e leve. Perfeita para visualizações rápidas do histórico.

Ferramentas de Merge/Diff Dedicadas

  • Meld: Ferramenta visual de comparação e merge de arquivos e diretórios.
    • Instalação: sudo apt install meld
    • Configuração com Git: git config --global merge.tool meld
    • Link: Site Oficial do Meld

3. Ferramentas para Qualidade e Padronização (Foco em Java)

Gerenciamento de Hooks (Automação Local)

  • pre-commit: Framework agnóstico de linguagem para gerenciar hooks de git. Ideal para rodar checagens de Maven/Gradle e outros validadores.
    • Instalação: pipx install pre-commit (ver seção de Troubleshooting se encontrar erros).
    • Uso: Crie o arquivo .pre-commit-config.yaml e rode pre-commit install.
    • Exemplo de Configuração para Java:
      repos:
      -   repo: [https://github.com/pre-commit/pre-commit-hooks](https://github.com/pre-commit/pre-commit-hooks)
          rev: v4.6.0
          hooks:
          -   id: trailing-whitespace
          -   id: end-of-file-fixer
          -   id: check-merge-conflict
          -   id: check-xml
          -   id: check-yaml
      -   repo: local
          hooks:
          -   id: mvn-spotless
              name: Maven Spotless Check
              entry: mvn spotless:check
              language: system
              files: \.(java|xml|pom)$
    • Link: Site Oficial do pre-commit

Padronização de Commits

  • Plugin "Conventional Commits" para IntelliJ: A forma mais prática de seguir o padrão Conventional Commits em um ambiente Java é usar um plugin diretamente na IDE.

Segurança (Análise de Segredos)

  • gitleaks: Ferramenta que escaneia o repositório em busca de segredos.
    • Instalação: Via binário pré-compilado da página de releases.
    • Uso: gitleaks detect -v ou integrado ao pre-commit (como no exemplo acima).
    • Link: Repositório do gitleaks

4. Fluxo de Trabalho Padrão com Branches

  1. Sincronize a Base: Atualize seu branch principal (main ou develop).
    git checkout main
    git pull --rebase
  2. Crie o Branch: Crie seu branch de feature a partir da base atualizada.
    git checkout -b feature/TASK-123-descricao-clara
  3. Faça os Commits: Realize seu trabalho em commits pequenos e lógicos.
    git add .
    git commit # Use o plugin da IDE ou siga o padrão manualmente
  4. Atualize o Branch: Antes de enviar, sincronize novamente com o branch principal.
    git pull --rebase origin main
  5. Envie as Mudanças: Na primeira vez, use -u para ligar o branch local ao remoto.
    git push -u origin feature/TASK-123-descricao-clara
  6. Integre: Abra um Pull Request (PR) no GitHub/GitLab.
  7. Limpeza Pós-Merge: Após o PR ser aprovado e mesclado:
    git checkout main
    git pull
    git branch -d feature/TASK-123-descricao-clara

5. Integração com IDEs (Foco em IntelliJ)

  • IntelliJ IDEA:

    • Configuração Essencial: Vá em File > Settings > Version Control > Git e mude o Update Method para Rebase.
    • Recursos Nativos:
      • Janela Git Log: Sua central de comando para visualizar o histórico e executar ações.
      • Janela de Commit (Ctrl+K): Ative as checagens "Before Commit" para rodar goals do Maven/Gradle (como verify).
      • Resolvedor de Conflitos: Ferramenta visual de três painéis para resolver conflitos.
  • VS Code:

    • Para edições pontuais, as extensões abaixo continuam úteis.

6. Regras de Proteção de Branch (Server-Side)


Anexo A: Links para Aprofundamento


Anexo B: Solução de Problemas Comuns

  • Problema: Comando 'go' não encontrado.

    • Solução: Prefira instalar o binário pré-compilado da seção "Releases" do repositório no GitHub.
  • Problema: E: O pacote 'snapd' não tem candidato para instalação.

    • Solução: Instale o software via um método alternativo, como um pacote .deb ou AppImage.
  • Problema: error: externally-managed-environment ao usar pip install.

    • Solução: Use pipx (sudo apt install pipx) para instalar pacotes Python em ambientes isolados.
  • Problema: Erro context canceled ou 100% packet loss na rede.

    • Diagnóstico: Problema com a rota de rede via IPv6.
    • Solução: Force o uso de IPv4. Confirme com ping -4 google.com. Para desabilitar o IPv6 permanentemente, edite /etc/sysctl.conf.
  • Problema: Erro NO_PUBKEY e repositório "não assinado" no apt update.

    • Solução: Adicione a chave GPG do repositório e rode sudo apt-get update novamente.
  • Problema: Falhas de compilação de software (erros de cmake ou make).

    • Diagnóstico: Dependências de desenvolvimento (-dev) faltando ou incompatíveis com a versão do sistema operacional.
    • Solução: A solução mais pragmática é buscar um método de instalação alternativo e mais resiliente, como Flatpak ou usar a ferramenta integrada à sua IDE.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment