Skip to content

Instantly share code, notes, and snippets.

@lmj0011
Forked from mzabriskie/README.md
Last active May 1, 2020 08:05
Show Gist options
  • Star 8 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save lmj0011/1a8dd1e376234ac7bf0fba2748ecdd0f to your computer and use it in GitHub Desktop.
Save lmj0011/1a8dd1e376234ac7bf0fba2748ecdd0f to your computer and use it in GitHub Desktop.
Check git status of multiple repos

Usage:

gitCheck [directory]

This will run git status on each repo under the directory specified. If called with no directory provided it will default to the current directory.


Changes

  • non-git directories do not get printed
  • display branch name
#!/bin/bash
dir="$1"
# No directory has been provided, use current
if [ -z "$dir" ]
then
dir="`pwd`"
fi
# Make sure directory ends with "/"
if [[ $dir != */ ]]
then
dir="$dir/*"
else
dir="$dir*"
fi
# Loop all sub-directories
for f in $dir
do
# Only interested in directories
[ -d "${f}" ] || continue
# Check if directory is a git repository
if [ -d "$f/.git" ]
then
echo -en "\033[0;35m"
echo "${f}"
echo -en "\033[0m"
mod=0
cd $f
# Check branch
echo -en "\e[46m"
git status | head -n1
echo -en "\e[49m"
# Check for modified files
if [ $(git status | grep modified -c) -ne 0 ]
then
mod=1
echo -en "\e[45m"
echo "Modified files"
echo -en "\e[49m"
fi
# Check for untracked files
if [ $(git status | grep Untracked -c) -ne 0 ]
then
mod=1
echo -en "\033[0;31m"
echo "Untracked files"
echo -en "\033[0m"
fi
# Check if everything is peachy keen
if [ $mod -eq 0 ]
then
echo "Nothing to commit"
fi
cd ../
echo
fi
done
@gimbo
Copy link

gimbo commented Mar 9, 2017

Thanks for this. I've adapted and extended it to a version which prints a summary table (one line per repo), and also checks for unpulled/unpushed commits: https://gist.github.com/gimbo/f1cc9f5c7a9b5e13dbb007acb0a993d4

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment