Executar ‘git status’ em vários repositórios

Script de shell simples, mas muito útil. Escrito usando este tópico do SO como referência.

Executar “find-dirty” irá encontrar e verificar todas as pastas .git no diretório de trabalho para alterações não testadas ou não confirmadas, imprimindo o caminho se um repositório tiver alguma.

#!/bin/bash

function unstaged_changes() {
worktree
=${1%/*};
git --git-dir="$1" --work-tree="$worktree" diff-files --quiet --ignore-submodules --

}


function uncommited_changes() {

worktree=${1%/*};

git --git-dir="$1" --work-tree="$worktree" diff-index --cached --quiet HEAD --ignore-submodules --

}


function find-dirty () {

for gitdir in `find . -name .git`;

do

worktree=${gitdir%/*};

if ! unstaged_changes $gitdir

then

echo "unstaged $gitdir"

fi


if ! uncommited_changes $gitdir

then

echo "uncommitted $gitdir"

fi

done

}