OK ... Vendo que não há uma maneira integrada de fazê-lo, fui em frente e escrevi meu próprio programa em Python. Você pode obtê-lo com pip:
pip3 install mklsgit
Atualmente suportam apenas o Python3.
É possível configurar o comando ls
para que, quando eu usar ls -l
, ele anexe o nome da ramificação git após o nome do diretório, se o diretório for um repositório git?
Desta forma, posso encontrar rapidamente os repositórios git no diretório atual, assim como o status de trabalho deles.
Algo parecido com isto:
-rw-rw-r-- 1 michael michael 8 Aug 26 02:07 a-file
drwxrwxr-x 3 michael michael 4096 Aug 26 02:07 a-repo/ (master)
drwxrwxr-x 2 michael michael 4096 Aug 26 02:07 not-a-repo/
Nota: Eu não estou olhando para mostrar ramificação git para o diretório atual ou como parte do prompt do shell, que eu já sei como .
OK ... Vendo que não há uma maneira integrada de fazê-lo, fui em frente e escrevi meu próprio programa em Python. Você pode obtê-lo com pip:
pip3 install mklsgit
Atualmente suportam apenas o Python3.
Eu escrevi uma pequena função Bash usando principalmente awk
para processar a saída de ls
e anexar nomes de ramificação de diretórios a diretórios, se eles fazem parte de repositórios.
Para instalar a função, simplesmente copie a linha abaixo e anexe-a ao final do seu arquivo ~/.bashrc
. Você precisa source .bashrc
depois disso ou reiniciar a sessão do shell para que a alteração entre em vigor.
lg (){ ls -alF "$@"|awk '{match($0,/^(\S+\s+){8}(.+)$/,f);b="";c="git -C \""f[2]"\" branch 2>/dev/null";while((c|getline g)>0){if(match(g,/^\* (.+)$/,a)){b="("a[1]")"}};close(c);print$0,b}';}
Depois disso, você terá um novo comando lg
disponível que se comporta como o padrão ll
alias (na verdade ls -alF
), mas com a ramificação git atual anexada.
Aqui estão alguns exemplos de saída, não os nomes das ramificações entre colchetes atrás de git1/
e git2/
:
$ lg
total 48
drwxrwxr-x 12 bytecommander bytecommander 4096 Aug 26 14:48 ./
drwxr-xr-x 74 bytecommander bytecommander 4096 Aug 26 15:30 ../
drwxrwxr-x 6 bytecommander bytecommander 4096 Aug 26 14:43 git1/ (master)
drwxrwxr-x 7 bytecommander bytecommander 4096 Aug 26 14:42 git2/ (develop)
drwxrwxr-x 4 bytecommander bytecommander 4096 Aug 26 14:45 no-git/
-rw-rw-r-- 1 bytecommander bytecommander 0 Aug 26 14:42 regular-file
O comando lg
ainda aceita todos os tipos de argumentos, assim como ls
. Você pode, por exemplo execute lg -h
, lg ~/projects
, lg ..
etc.
#
. ls
(por exemplo, diretórios são azuis, executáveis verdes, links simbólicos cyan, ...). ls
sempre estará correta e exibirá informações sobre o caminho especificado como argumento (se houver, caso contrário, o diretório atual será o padrão). No entanto, as informações de ramificação para as entradas ./
e ../
são sempre relativas ao diretório de trabalho atual, não ao diretório especificado. Se você encontrar mais problemas ou conhecer uma solução para um dos problemas listados, fique à vontade para deixar um comentário.
Tags command-line git ls