git --version git --version --build-options uname -a
OngoingÂ
According to
Repology,
the latest
packaged Git for Windows
is
.
2022-November-18Â
As of today, this evolvingâ [1]
article
has been on
the web
for
A shell is a layer or interface between you and an operating system. There are a lot of command-â line shells for Windows, including:
COMMAND.COM, also known as âthe DOS Promptâ (used in Windows 9x and earlier)
cmd.exe, also known as CMD and âCommand Promptâ
WSL Bash,
also
known as
â
Over the years, Iâve used all six of the above Windows command-â line shells. In 2020, I installed Git for Windows and can now add a seventh shell to the list of command-â line Windows shells Iâve used:
Git Bash
Bash is an acronym for âBourne again shellâ and it is a command-line shell that was created for Unix-like systems. Details are at wikipedia.org/wiki/Bash_(Unix_shell).
Â
Git Bash is a Windows command-line shell that is packaged with Git for Windows. It emulates the bash shell that is familiar to nix-nux users.â [4]â [5]
đĄ | Git Bash is useful even if you do not use git. |
Â
âź | Git Bash is not one of Windowsâ subsystems. When you are in Git Bash, you are in your regular Windows environment. And your Windows environment variables are available.â đ |
Â
I like Git Bash becauseâŚ
Iâm more comfortable with bash commands than CMD or PowerShell commands (because Iâve been using Bourne shell (sh) and friends for more than 30 years).
Itâs easy to install.
It has a small footprint.
It installs a Git Bash Here
command that is available when right-clicking on a folder in Windows File Explorer.
I can pipe the output of commands through the less
pager,
which is better than the more
pager.â [6]
In addition to
the
less
command,
the commands
awk
,
cat
,â [7]
cd
,
clear
,
cp
,
curl
,
cut
,
date
,
dd
,
diff
,
dos2unix
,
echo
,
file
,
find
,
gpg
,
grep
and friends,â [8]
gunzip
,
gzip
,
head
,
history
,
jobs
,
kill
,
ls
,
md5sum
,
mkdir
,
mv
,
mount
,
nano
,
od
,
openssl
,
perl
,
printenv
,
ps
,
pwd
,
rm
,
rmdir
,
scp
,
sed
,
sftp
,
sha1sum
, sha256sum
, sha512sum
,
sort
,
split
,
ssh
,
stat
,
tail
,
tar
,
touch
,
uname
,
uniq
,
vim
and friends,â [9]
wc
,
which
,
whoami
,
and more nix-nux commands are available.
I can view
built-in help for a bash command with, for example,
less --help
pwd --help
Almost any
app thatâs on my pathâââincluding
hugo
,
figlet
,
and
tree.com
[10]âââcan be launched
either
within a Git Bash script
or
at a Git Bash command prompt
(possibly
with the help of winpty
).[11]
I can write bash or shâ [12] scripts andâŚ
my Windows environment variables are available,
and I do not have to worry about WSL file system issues[13] because Git Bash uses the regular Windows file system (but be aware that Git Bash uses forward-slash-delimited paths to refer to the Windows file system).
I can use output redirection (with, for example, >
) to create a file
that is
UTF-8 Unicode text
rather than
Little-endian UTF-16 Unicode text, with CRLF line terminators
(which is the CMD and PowerShell default encodingâ đ).
Â
Git Bash has helpful communities, including:
Almost everything I know about Git Bash, I learned in the above five communities.
Â
To install Git Bash, install Git For Windows, which you can download from eitherâŚ
Think carefully about what options you choose during the installation.
If you are a power user, the defaults are probably not what you want.
For example,
I
like to
change the default install directory,
which is
C:\Program Files\Git\
,
to
C:\Program Files\GitForWindows\
because this helps me remember the full name of the app in
this
directory.
⚠| Git for Windows requires Windows Vista or newer. Windows Vista was released in 2007 (~16 years ago). |
Â
To learn about launching Git Bash in various terminal emulators, including Mintty (which is Git Bashâs default terminal emulator), see Launching Git Bash in Mintty, ConEmu, VS Codeâs Terminal, and Other Terminal Emulators.
Â
To learn about the Git for Windows that you are using, run some or all of the following at a Git Bashâ [14] command-line prompt:
git --version git --version --build-options uname -a
To see what options it was installed with, run the following at a Git Bash prompt:
cat /etc/install-options.txt
Â
To update Git for Windows, run the following at a Git Bashâ [14] command-line prompt:
git --version git update-git-for-windows git --version
âź | When you update Git for WindowsâŚ
|
Â
To uninstall Git for Windows, see How to uninstall git? in github.com/git-for-windows/git/discussions.
Â
Mintty is Git Bashâs default terminal emulator. Details are at wikipedia.org/wiki/Mintty.
Since
I prefer
the
Solarized Light
color scheme,
I edited ~/.minttyrc
so it includes the following.
ForegroundColour=101, 123, 131 BackgroundColour=253, 246, 227 CursorColour= 220, 50, 47 Black= 7, 54, 66 BoldBlack= 0, 43, 54 Red= 220, 50, 47 BoldRed= 203, 75, 22 Green= 133, 153, 0 BoldGreen= 88, 110, 117 Yellow= 181, 137, 0 BoldYellow= 101, 123, 131 Blue= 38, 139, 210 BoldBlue= 131, 148, 150 Magenta= 211, 54, 130 BoldMagenta= 108, 113, 196 Cyan= 42, 161, 152 BoldCyan= 147, 161, 161 White= 238, 232, 213 BoldWhite= 253, 246, 227
This is the
contents of
the .minttyrc.light
file,
which is part of
github.com/mavnn/mintty-colors-solarized.
Thank you
Michael Newton (@mavnn@github.com)
for making this color scheme
available on GitHub!
Â
To change the character set and fonts used in the mintty terminal emulator, right click anywhere in a mintty window or title bar and choose Options. In the left pane, choose Text and thenâŚ
Click SelectâŚ
and choose
DejaVu Sans Mono, 10pt
(or whatever you prefer) for the font.
Under Character Set, choose UTF-8 (Unicode)
(or whatever you prefer).
Click Save
These and other settings will be appended to the bottom of your ~/.minttyrc
file.
Â
Before you customize Git Bash, check out some of its default settings by running the following four commands at a Git Bash command-line prompt.
alias mount printenv set -o
Â
If ~/.bash_profile
exists, the commands in it
are run each time you
launch
a Git Bash
terminal.
To create and edit this file do the following.
Launch a Git Bash terminal.
At the Git Bash command-line prompt, run one of these commands:
nano ~/.bash_profile vim ~/.bash_profile
Note that the
TUI (terminal user interface)
editors nano
and vim
are included in Git Bash and are on your PATH.
(If you do not know how to use vim
, I recommend that you use nano
because, otherwise, it
may take you a while to figure out how to exit vim.â đ)
Add whatever commands youâd like to this file. Here is an
excerpt of my ~/.bash_profile
:
## Created: 2023-02-24 ## Use `gvim filename` to edit filename with GUI Vim alias gvim="/C/Windows/gvim.bat" ## Use `cdi` to cd to the Infinite Ink project root ## Note I set INFINITEINKROOT environment variable via Control Panel alias cdi="cd `cygpath $INFINITEINKROOT`" ## Do not let me overwrite a file with > redirection set -o noclobber ## Make Backspace and other things work in VS Code's & IntelliJ's terminals export TERM=cygwin # export TERM=xterm # export TERM=xterm-256color ## NOTE: All 3 of the above TERM settings work for me
Save your edits and close the editor.
At the Git Bash prompt, use the following file
command to check the file type.
file ~/.bash_profile
This
will probably display
ASCIIÂ text
or
.
If
either
âBOMâ
or
âCRLF line terminatorsâ
are mentioned in
the
output
of this
file
command,
convert it to Unix-format with one of the following commands.
dos2unix ~/.bash_profile nano --unix ~/.bash_profile
To learn about these commands, run the following commands.
dos2unix --help nano --help
Â
đĄ | After you change your
~/.bash_profile ,
I recommend that you close all Git Bash sessions
and all Windows File Explorer windows, and then relaunch Git Bash and
make sure your
new
~/.bash_profile
settings worked. |
Â
To see what aliases are available, run:
alias
On my system, this displays:
alias gvim='/C/Windows/gvim.bat' alias cdi='cd /c/Users/USERNAME/path/to/infiniteink/project/root' alias ll='ls -l' alias ls='ls -F --color=auto --show-control-chars'
The first two aliases are the ones I created above in my ~/.bash_profile
.
The last two are Git Bashâs default aliases.
âź | Default
aliases (and more) are specified in files that are located in the /etc/profile.d/ directory.
It is best notâ to edit
files under /etc/
because
they
might be replaced when Git for Windows is updated. |
Â
Normally Unix-like shells are case sensitive, but Git Bash, in general, is case insensitive.
Â
To view your current path, run the following command, which means âprint working directory.â
pwd
To go to your Git Bash home directory,
which is also known as ~
,
run either of the following equivalent commands.
cd cd ~
On most systems, your Git Bash home directory isâŚ
/c/users/USERNAME/
with USERNAME
replaced with your user name.
Note that in Git BashâŚ
The path delimiter is slash (/
), which is also known as forward slash.
The C:
drive is mounted as /c/
.
To list all mounts, run the mount
command.
You can display a Windows-type path of the current working directory with
pwd -W
.
The format of the path this command displays is sometimes called
âmixed typeâ
because it starts with a drive letter, such as C:
,
and uses
forward slashes
(/
)
rather than backslashes
(\
)
as path separators.
Â
start
commandWhen you are at a Git Bash prompt, you can launch
a file or directory in your systemâs default app
by using
the Start
command,
which is equivalent
to
the start
command (thanks to case insensitivity).
Below are some examples.
To open the current directory in Windows File Explorer, run:
start . đ Notice this dot (.)
To open your home directory in Windows File Explorer, run:
start ~
To open your $APPDATA directory in Windows File Explorer, run:
start $APPDATA
To open /c
in Windows File Explorer, run either of these equivalent commands:
start /c start /c/
To open the parent directory of the current directory in Windows File Explorer, run:
start ..
To open an HTML file in your default web browser, run something like this:
start ReleaseNotes.html
Â
You can launch any app thatâs on your path from a Git Bash prompt. For example, if Visual Studio Code is installed on your system and is on your path, you can use the following to open the current directory in VS Code.
code . đ Notice this dot (.)
Â
To find out the environment variables available to Git Bash, run:
printenv
This includes the PATH environment variable, which lists the directories that are searched for executables.
Â
Iâd rather write a bash or shâ [12] shell script than a Windows batch file to deal with apps, files, and folders that live in my Windows file system. Thanks to Git Bash, Itâs easy to do this. (I have learned the hard way that itâs not so easy to do this in WSL.â [13])
Â
When you run printenv
, you can see that the ~/bin/
directory
(usually /c/users/USERNAME/bin/
)
is
on your PATH. This is a reasonable place to put your Git Bash scripts.
To create this directory, run this command:
mkdir ~/bin/
Â
One of my scripts is called
gvim-winpath
and it looks like this:
#!/bin/sh ## Created: 2023-02-24 ## Filename: gvim-winpath ## Usage: gvim-winpath "C:\path\to\filename" /c/windows/gvim.bat `cygpath "$1"`
I use this to launch gvim on a file that
is specified using a Windows-style backslash path.
To learn about the cygpath
command, which is used in this script, run
one of
the following commands at a Git Bash prompt.
cygpath --help cygpath --help |less
If you pipe the
output to the less
pager, you
need to know
how to
use less
:
The essentials are
that
within less
, you can
press Space to page down,
press b (for back) to page up,
and press
q
to quit.
Â
đĄ | cygpath
is analogous to wslpath ,
which I use in
Infinite Inkâs
qutebrowser Userscripts on Windows. |
Â
In most Unix-like shells, you need to chmod +x
executables
but in Git Bash this is not needed.
Â
If you have issues with
non-ASCII
Unicode characters, run
the following at a Git Bash prompt
and make sure each
setting
includes UTF-8
.
locale
Also,
you can
try
to solve
Unicode issues
by
running
the following sequence of
chcp.com
â [10]
commands at a Git Bash prompt.
chcp.com chcp.com 65001 chcp.com
This changes the code page to 65001, which supports UTF-8 encoding.
⚠| Nowadays UTF-8 is the standard file encoding of the internet (and of Unicode in general). |
Â
Arguments to nix-nux commands, in general, are case sensitive. For example, in the following
cygpath --help
The command cygpath
is case insensitive,
but
its argument --help
is case sensitive.
For example,
this works:
Cygpath --help
but this does not work:
cygpath --Help
Â
To quit Git Bash, you can either click the close-window X in the upper right corner of the terminal window or type the following at the command prompt:
exit
This exit
command
is a
system call
and
must be all lower
case.â
Â
For more about Git Bash, see Infinite InkâsâŚ
Â
powershell.exe
) but I do not yet have experience using PowerShell Core (pwsh
).more
command is not included in Git Bash, but the less
command, which can do everything more
can do (and more), is included in Git Bash.tree.com
and chcp.com
are located in /c/windows/system32/
and are on your Git-Bash path. Each must be called with the .com
file extension. &
to the end of the command so it will be launched as a background job.@nm@mathstodon.xyz
or
#InfiniteInk
in it.