Introducing list-repos for git repositories management

list-repos utility list the repository directories and their active branches to quickly decide on the target directory to work on

Introducing list-repos for git repositories management


What a tedious and confusing task it is to manage multiple repositories! Multiple repositories where few of them were copies of same repos but on different branches.

So I have assembled the list-repos utility to solve the at-least few bits of this problem by listing the repository directories and their active branches to quickly decide on the target directory to work on.

Attempt #1

In the beginning I had created a shell based solution which was very brittle and accepted no input. It changed the directories and echoed the active branch.

#!/bin/bash

echo "Brahch Listing"
cd /c/xampp/htdocs/
cd ./REPO1
x="$(git rev-parse --abbrev-ref HEAD)"
printf "REPO1\t$x"

cd ./REPO2
x="$(git rev-parse --abbrev-ref HEAD)"
printf "REPO2\t$x"

cd ./REPO3
x="$(git rev-parse --abbrev-ref HEAD)"
printf "REPO3\t$x"

cd ./REPO4
x="$(git rev-parse --abbrev-ref HEAD)"
printf "REPO4\t$x"

Attempt #2

Later the script got modified to do shell loops and had one hard-coded value. It was looking good but still brittle as it had one hard-coded value in terms of the directory to look into.

#!/bin/bash

echo "Brahch Listing"
cd /c/xampp/htdocs/

RED='\033[0;31m'
BLUE='\033[1;34m'
GREEN='\033[1;32m'
NC='\033[0m' # No Color

for i in $( ls ); do
    cd $i
    if [ $? -eq 0 ]; then
        # echo $i
        output="$i"
        git rev-parse --abbrev-ref HEAD &> /dev/null
        if [ $? -eq 0 ]; then
            # output="$output $x"
            x="$(git rev-parse --abbrev-ref HEAD)"
            printf "${BLUE}$output\t${GREEN}$x"
        else
            printf "${BLUE}$output\t${RED}--"
        fi
        printf "\n"
        cd ..
    fi
done 

Attempt #3

But later this whole code got rewritten in JavaScript to provide a quick and easy CLI utility to provide you info about the repositories. You can find the package at https://www.npmjs.com/package/list-repos

To install it on your system, simply type the following command and hit enter:

npm i -g list-repos

And to use it, type following command and hit enter:

list-repos <dir-path>

The <dir-path> in above command is the path where all the copies of repositories are. Hence for above hardcoded example, /c/xampp/htdocs is the directory where the copies are, command will be

list-repos /c/xampp/htdocs

And on running above command, it will generate output like following:

/c/xampp/htdocs
┌─────────────────────────────┬───────────────────┐
│ Directory                   │ Current Branch/NA │
├─────────────────────────────┼───────────────────┤
│ movieDB                     │ master            │
├─────────────────────────────┼───────────────────┤
│ list-repos                  │ master            │
├─────────────────────────────┼───────────────────┤
│ list-repos-old              │ old               │
├─────────────────────────────┼───────────────────┤
│ get-it-ready                │ master            │
├─────────────────────────────┼───────────────────┤
│ time2hack                   │ master            │
├─────────────────────────────┼───────────────────┤
│ ui-bootstrap                │ master            │
└─────────────────────────────┴───────────────────┘

This utility can accept the relative paths. So suppose I am in any of the above directories, I can launch the utility with .. to get the list in following way and will generate same output as above:

list-repos ..

Please use the tool and let me know if you think of any new feature or encounter any problem in the comments. The tool is open source and can be forked from https://github.com/pankajpatel/list-repos