image

Bootcamps ilimitados + curso de inglês para sempre

80
%OFF
Article image
Aluizio Monteiro
Aluizio Monteiro26/06/2024 11:41
Compartilhe

Faça o terminal do Ubuntu detectar repositórios locais e exibir o nome da branch do Git

    Existem comandos e diversas GUI para facilitar operações com o Git no Ubuntu, porém quero compartilhar com vocês, uma maneira de fazer com que o Terminal detecte um repositório local do Git e exiba o nome da Branch atual de forma automática.

    Obs:

    a) Os próximos passos, foram testados no bash do ubuntu 22.04.

    b) Antes de alterar um arquivo do Linux, vale a pena salvar uma cópia para facilitar possíveis restaurações.

    c) Mesmo que você já tenha o Git instalado, é uma boa ideia dar uma atualizada nele. Para maiores instruções sobre isso visite a documentação oficial do Git em:

    https://git-scm.com/book/pt-br/v2/Come%C3%A7ando-Instalando-o-Git

    1 – Abra um terminal e verifique se o seu Shell é o Bash com o seguinte comando:

    echo $0
    

    A saída deve ser a palavra: “bash”

    2 – Abra o arquivo do bash com o nano, gedit ou com o editor de sua preferência:

    
    gedit ~/.bashrc
    
    

    3 – No final do arquivo do bash, adicione o seguinte código:

    
    # Função para exibir o nome da branch atual do Git
    
    git_branch() {
    
    # Comando para obter o nome da branch atual do Git
    
    branch=$(git branch 2>/dev/null | grep '^*' | colrm 1 2)
    
    # Verifica se a variável $branch não está vazia (ou seja, se há uma branch do Git atual)
    
    if [ -n "$branch" ]; then
    
    # Se houver uma branch do Git, exibe o nome entre parênteses e na cor azul
    
      echo -e "\033[0;34m($branch)\033[0m"
      
      fi
      
    }
      
      
    # Configuração do prompt de comando para exibir o nome da branch do Git
    
    PS1='\u@\h:\w $(git_branch)\$ '
    
    

    4 – Salve e feche o arquivo do Bash.

    5 – Atualize o terminal fechando e reabrindo a tela, ou simplesmente digite o comando:

    
    source ~/.bashrc
    
    

    6 – Acesse alguma pasta local que seja um repositório Git e verifique se tudo está funcionando bem:

    A saída esperada é:

    image

    Vamos compreender melhor o que faz o código anterior e depois vamos melhorar um pouco mais esta saída.

    
    1 git_branch() {
    
    2     branch=$(git branch 2>/dev/null | grep '^*' | colrm 1 2)
    
    3     if [ -n "$branch" ]; then
    
    4         echo -e "\033[0;34m($branch)\033[0m"
    
    5     fi
    
    6 }
    
    7
    
    8 PS1='\u@\h:\w $(git_branch)\$ '
    
    
    
    -> Linha 1: git_branch() - nome da nossa função que vai exibir a branch atual.
    
    -> Linha 2: git branch 2>/dev/null - lista todas as branches do Git. O 2>/dev/null redireciona os possíveis erros para /dev/null, o que significa que qualquer mensagens de erro não vai ser exibida no terminal. O grep '^*' - filtra a linha que começa com *, que é a linha que indica a branch atual. O colrm 1 2 - remove o primeiro caractere (*) da linha obtida, deixando apenas o nome da branch. O resultado de tudo isso vai ser armazenado na variável branch.
    
    -> Linha 3: if [ -n "$branch" ]; then - Testa se a variável $branch não está vazia. Caso não esteja vazia, então significa que temos uma branch atual.
    
    -> Linha 4: echo -e "\033[0;34m($branch)\033[0m" - Se existe mesmo uma branch do Git atual, esta linha vai imprimir o nome dela, utilizando códigos ANSI. \033[0;34m - Define a cor azul. ($branch) - Exibe o nome da branch atual. \033[0m - Reseta a cor de volta ao padrão do terminal.
    
    -> Linha 8: PS1 é onde configuramos o formato do nosso prompt de comando. Ele é que faz ser exibido o nosso nome_de_usuario@hostname$ + diretório_atual + o nome da branch que queremos exibir no terminal. \u – Será substituido pelo nome de usuário atual do Ubuntu. \@ - Será substituído pelo hostname da máquina. \w – Será substituído pelo diretório atual. $(git_branch) - Invoca a função git_branch() para exibir o nome da branch atual caso exista uma. \$ - É aquele simbolo que aparece no Terminal mesmo.
    
    

    Melhorando o visual das coisas

    Uma sugestão pode ser colorir e adicionar uma string indicando que o diretório atual, trata-se de um repositório Git:

    1 – Abra novamente o arquivo do Bash com o nano, gedit ou com o editor de sua preferência:

    
    gedit ~/.bashrc
    
    

    2 – Altere a formatação do PS1 conforme o exemplo seguinte:

    
    # Configuração do prompt de comando para exibir o nome da branch do Git
    
    PS1='\[\e[1;38;5;118m\]\u\[\e[0m\]@\[\e[1;38;5;118m\]\h\[\e[0m\]:\w$(__git_ps1 "\[\e[1;31m\] (GIT BRANCH):\[\e[0m\]\[\e[0;35m\]%s\[\e[0m\]")\$ '
    
    

    3 – Salve e feche o arquivo do bash.

    4 – Atualize o terminal fechando e reabrindo a tela, ou simplesmente digite o comando:

    
    source ~/.bashrc
    
    

    5 – A saída esperada é:

    image

    Vamos compreender melhor esta nova formatação:

    
    \[\e[1;38;5;118m\] - Define a formatação para o texto seguinte como negrito e define a cor verde fluorescente. \u -Nome de usuário atual. \[\e[0m\] - Reseta a formatação de cor e estilo para o padrão. @ - Separa o nome de usuário do hostname da máquina. \[\e[1;38;5;118m\] - Define a formatação do texto seguinte para negrito e verde. \h – Nome do hostname da máquina. \[\e[0m\] - Reseta a formatação de cor e estilo para o padrão. \w: Diretório atual.
    $(__git_ps1 ...) - Se você atualizouo seu Git, como recomendado nas observações lá no início desse tutorial, então provavelmente esta função foi definida em seu ambiente. Ela é responsável por retornar o nome da branch atual do Git. Sendo assim, a função que criamos para localizar a branch não é maisútil e deverá ser removida.
    
    No comando __git_ps1 "\[\e[1;31m\] (GIT BRANCH):\[\e[0m\]\[\e[0;35m\]%s\[\e[0m\]", estamos definindo como o Git deve formatar a string.
    
    \[\e[1;31m\] - Define o texto seguinte como vermelho e negrito. (GIT BRANCH): - É simplesmente uma string literal que será exibida antes do nome da branch do Git. \[\e[0m\] - É um código de escape ANSI que reseta a formatação de cor e estilo para o padrão. \[\e[0;35m\] - Define o texto seguinte como roxo. O 0;35 significa sem negrito e da cor roxa. %s - É um marcador de posição que será substituído pelo nome da branch atual do Git pela função __git_ps1. \[\e[0m\] - novamente reseta a formatação de cor e estilo para o padrão após o nome da branch do Git.
    
    

    Para saber mais, busque pela documentação do Shell Bash no Google. Existem também alguns Frameworks e Templates prontos disponíveis por ai...

    Até mais!

    Compartilhe
    Recomendados para você
    Microsoft 50 Anos - Prompts Inteligentes
    Microsoft 50 Anos - GitHub Copilot
    Microsoft 50 Anos - Computação em Nuvem com Azure
    Comentários (0)