Status do Git em todos os repositórios na pasta

Às vezes, você tem vários repositórios git em uma pasta. Por exemplo, em sua própria pasta de fornecedor ao usar o Composer (por exemplo vendor/cakemail). Durante o desenvolvimento mantenho as versões em @dev e trabalho diretamente nelas.

Eu estava cansado de gravar em cada um deles e fazer um git statuspara ver se esqueci de cometer alguma coisa, então juntei este pequeno oneliner que provavelmente apelidarei em meu .bashrc:

find . -maxdepth 1 -mindepth 1 -type d -exec sh -c '(echo {} && cd {} && git status -s && echo)' ;

Na pasta que o contém, execute este comando e ele listará o status de cada repo nessa pasta.

Como funciona:

  • find . : para encontrar tudo na pasta atual
  • -maxdepth 1 : de modo que não recursivamente em subdiretórios dos repositórios
  • -mindepth 1 : de modo que pule o diretório atual (de profundidade 0)
  • -type d : apenas encontrar diretórios
  • -exec sh -c : gera um shell e dá a ele um comando
  • '(echo {} && cd {} && git status && echo)' : o comando dado ao shell
  • echo {} : echo o diretório encontrado por find
  • cd {} : cd no diretório encontrado por find
  • git status -s: executa o status git real, com a -sopção (curta)
  • echo : echo uma linha vazia, para facilitar a leitura
  • ; : ponto e vírgula para executar o shell para cada um dos diretórios encontrados em vez de passar todos para um shell como argumentos