Pablo Herrero
Posted on September 16, 2020
Hey! 👋
Today I was fine-tuning my Git Bash, which I use in Windows Terminal, so I decided to leave the steps here in case someone finds it useful.
Installation
Ok, first, install all: Git and Windows Terminal.
Add Git-Bash to Windows Terminal
- Open setings on Windows Terminal.
- Generate a Guid: On PowerShell, type [guid]::NewGuid() to generate a new Guid.
- Insert a new Git-Bash profile:
{
// Git Bash
"guid": "{YOUR GUID}",
"closeOnExit" : "always",
"commandline" :
"\"%PROGRAMFILES%\\git\\usr\\bin\\bash.exe\" -i -l",
"icon" : "C:\\Program
Files\\Git\\mingw64\\share\\git\\git-for-windows.ico",
"name" : "Git Bash",
"startingDirectory" : "%USERPROFILE%",
"colorScheme": "Dracula"
},
Removing Git Bash backspace light flicker on Windows Terminal
Git Bash has incorrect flashing when you hit the backspace key on an empty line. It's a bit annoying and can be fixed with one line of code. First, create .inputrc file into your home:
code ~/.inputrc
I use code, because I love VSCode, you can use other editor. Then, add this text to the file and save it:
set bell-style none
Styling the prompt
This is the original bash:
Well yes, I like the minimalist, but I needed to change the titlebar, remove the MYSYS, and add some information, such as the Git repositories statuses and the time.
There are several ways to do it, my advice is to generate your own .bashrc instead of overwriting the .git-prompt.sh from the Git folder (which will overwrite any Git update and you would lose your customization ...). So, let's start by creating a new .bashrc. Run this code to create it:
code ~/.bashrc
You will get a message saying that Git Bash has created a new .bash_profile file. Don't worry, it's fine like this. Now, copy the entire content of the git_prompt.sh file found in your Git folder into the new .bashrc and lets edit it:
Change the titlebar
Change the value:
PS1='\[\033]0;TITTLE$PWD\007\]' # set window title
Remove the MYSYS
Comment it:
#PS1="$PS1"'\[\033[35m\]' # change to purple
#PS1="$PS1"'$MSYSTEM ' # show MSYSTEM
Git information
Add this to the end of the file and '__git_ps1
' will do the rest for you.
#Git status options
export GIT_PS1_SHOWSTASHSTATE=true
export GIT_PS1_SHOWDIRTYSTATE=true
export GIT_PS1_SHOWUNTRACKEDFILES=true
export GIT_PS1_SHOWUPSTREAM="auto"
Time
Add this:
PS1="$PS1"' \[\033[37m\][\A]' # 24h time, white
Aliases
Finally, how about some aliases? Just add them to the file:
#My aliases
alias gs='git status -sb'
alias gaa='git add --all'
alias gc='git commit -m $2'
alias gp='git push'
alias gpo='git push origin'
alias gpl='git pull'
alias gl="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
alias ls='ls -F --color=auto --show-control-chars'
alias ll='ls -l'
alias rm='rm -iv'
As a summary, this is the complete code:
#My aliases
alias gs='git status -sb'
alias gaa='git add --all'
alias gc='git commit -m $2'
alias gp='git push'
alias gpo='git push origin'
alias gpl='git pull'
alias gl="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
alias ls='ls -F --color=auto --show-control-chars'
alias ll='ls -l'
alias rm='rm -iv'
# Prompt style
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;Git Bash$PWD\007\]' # set window title
PS1="$PS1"'\n' # new line
PS1="$PS1"'\[\033[32m\]' # change to green
PS1="$PS1"'\u@\h ' # user@host<space>
#PS1="$PS1"'\[\033[35m\]' # change to purple
#PS1="$PS1"'$MSYSTEM ' # show MSYSTEM
PS1="$PS1"'\[\033[33m\]' # change to white
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 -f "$COMPLETION_PATH/git-prompt.sh"
then
. "$COMPLETION_PATH/git-completion.bash"
. "$COMPLETION_PATH/git-prompt.sh"
PS1="$PS1"'\[\033[36m\]' # change color to cyan
PS1="$PS1"'`__git_ps1`' # bash function
fi
fi
PS1="$PS1"' \[\033[37m\][\A]' # 24h time, white
PS1="$PS1"'\[\033[0m\]' # change color
PS1="$PS1"'\n' # new line
PS1="$PS1"'$ ' # prompt: always $
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
#Git status options
export GIT_PS1_SHOWSTASHSTATE=true
export GIT_PS1_SHOWDIRTYSTATE=true
export GIT_PS1_SHOWUNTRACKEDFILES=true
export GIT_PS1_SHOWUPSTREAM="auto"
Very good, it's done! save everything, restart the terminal and enjoy. This is the result, a clean bash with all the basic information in Git Bash:
Hope this helps someone. It is not so easy to find it on Google. Cheers🤘
Posted on September 16, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.