Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Conditional statement to check if you are in a git repository in shell

I’m trying to edit my git bash terminal on Windows in the C:/Program Files/Git/etc/profile.d/git-prompt.sh directory and I want to check if my current working directory is a Git repository.

Below is my current code:

if test -f /etc/profile.d/git-sdk.sh
then
    TITLEPREFIX=SDK-${MSYSTEM#MINGW}
else
    TITLEPREFIX=$MSYSTEM
fi

if test -f ~/.config/git/git-prompt.sh
then
    . ~/.config/git/git-prompt.sh
else
    PS1='\[\033]0;$TITLEPREFIX:$PWD\007\]' # set window title
    PS1="$PS1"'\[\033[1;32m\]'       # change to green
    PS1="$PS1"'➜  '                 # arrow
    PS1="$PS1"'\[\033[1;36m\]'      # change color to bold cyan
    PS1="$PS1"'\W'                  # current working directory
    if test -z "$WINELOADERNOEXEC"
    then
        GIT_EXEC_PATH="$(git --exec-path 2>/dev/null)"
        COMPLETION_PATH="${GIT_EXEC_PATH%/libexec/git-core}"
        COMPLETION_PATH="${COMPLETION_PATH%/lib/git-core}"
        COMPLETION_PATH="$COMPLETION_PATH/share/git/completion"
        # if test -z "$COMPLETION_PATH/git-prompt.sh"
        # then
        . "$COMPLETION_PATH/git-completion.bash"
        . "$COMPLETION_PATH/git-prompt.sh"
        # if test -n `git branch --show-current` 
        # then
        PS1="$PS1"'\[\033[1;34m\]'                  # change color to cyan
        PS1="$PS1"' git:('                          # bash function
        PS1="$PS1"'\[\033[1;31m\]'                  # change color to cyan
        PS1="$PS1"'`git branch --show-current`'     # get current working branch
        PS1="$PS1"'\[\033[1;34m\]'                  # change color to bold blue
        PS1="$PS1"') '                              # close brackets

        PS1="$PS1"'\n'                  # new line
        PS1="$PS1"'\[\033[1;33m\]'      # change color to bold yellow
        PS1="$PS1"'$ '                  # prompt: always $
        PS1="$PS1"'\[\033[0m\]'         # change color to default
        # fi
        # fi
    fi
fi

MSYS2_PS1="$PS1"                    # for detection by MSYS2 SDK's bash.basrc

# Evaluate all user-specific Bash completion scripts (if any)
if test -z "$WINELOADERNOEXEC"
then
    for c in "$HOME"/bash_completion.d/*.bash
    do
        # Handle absence of any scripts (or the folder) gracefully
        test ! -f "$c" ||
        . "$c"
    done
fi

I’m trying to create a conditional statement to test if my current directory is a Git repository and if so, display the correct format.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

If I open my terminal in a Git repository:

➜  test-repo git:(main)
$ 

If I open my terminal without Git repository:

fatal: not a git repository (or any of the parent directories): .git
➜  test-repo git:() 
$ 

The intension is to remove fatal: not a git repository (or any of the parent directories): .git and git:() if I’m not in a Git repository.

>Solution :

How about

if git status -s 1>&2 2>/dev/null
then
  : You are in a git repo
else
  : You are not
fi

UPDATE : A faster alternative to git status -s would be

git rev-parse -q --short HEAD
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading