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 é:
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 é:
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!