Bash ~ never forget to git commit again ๐Ÿ’ฅ

Chris Bongers - Sep 4 '20 - - Dev Community

Are you:

  • โœ… Tired of failing to git commit
  • โœ… Sick of having staged changes
  • โœ… Colleagues complaining they're missing code
  • โœ… Angry because your laptop fried, and you didn't commit?

Then this article is for you!

Today we will be making a bash script that we can run at the end of our day.
It will loop through our project directory and tell us the following statistics per project:

  • Is it a git repo
  • Did you forget to commit something
  • Do we have unstated changes

Have a look at hacking your morning routine!

It will look like this:

Bash to show git status

Bash git commit prompt script

Today we'll be looking at a single bash script.
I'm going through this section by section. At the end I'll link it on GitHub for you to download.

We will start by defining our variables

Change the DIR to your project folder.

DIR=~/www/
GITBASED=.git
Enter fullscreen mode Exit fullscreen mode

Then we need to loop over each subdirectory in our projects folder.

for dir in $DIR*
do
    // Loop here
done
Enter fullscreen mode Exit fullscreen mode

Then inside the loop, we need first to check if it's a directory we are checking:

if [[ -d $dir ]]; then
    // Yes I'm a directory
fi
Enter fullscreen mode Exit fullscreen mode

You can see we check the dir based on the -d (directory)

If it's a directory, we can work with it:

We'll cd into the directory and define an empty message.

cd $dir
MSG="";
Enter fullscreen mode Exit fullscreen mode

Then we check if it's a git project.
If it's not a git project we change our message.

if [ -d "$GITBASED" ]; then
        // Git based!
else 
    // Not a valid git project
    MSG=": Not a valid git project ๐Ÿ‘€"
fi
Enter fullscreen mode Exit fullscreen mode

If it is a git project, we will first define a test variable that will execute git status.

TEST=$(git status $dir);
Enter fullscreen mode Exit fullscreen mode

Our variable TEST now contains the return value of git status now we will use some if...else statements to check if it contains certain substrings:

if [[ $TEST == *"nothing to commit"* ]]; then
    MSG=": No changes โœ…"
// Check if git status has unstaged changes
elif [[ $TEST == *"Changes not staged for commit"* ]]; then
    MSG=": Unstaged changes ๐Ÿคทโ€โ™‚๏ธ"
// Check if git status has uncommitted changes
elif [[ $TEST == *"Untracked files"* ]]; then
    MSG=": You forgot to commit some files ๐Ÿ˜ก"
fi 
Enter fullscreen mode Exit fullscreen mode

And lastly, we will echo the message prefixed with he project name and change back a directory.

echo ${dir##*/}$MSG
cd ..
Enter fullscreen mode Exit fullscreen mode

That's it!

If we run our bash.sh script, we will get all lines per project folder with the status.

Run it with: sh bash.sh

No more reasons to forget your commits!

Find the project on my GitHub afterwork.

Thank you for reading, and let's connect!

Thank you for reading my blog. Feel free to subscribe to my email newsletter and connect on Facebook or Twitter

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Terabox Video Player